[Unity3D]Unity3D游戏开发之怪物AI
来源:互联网 发布:石家庄铁道大学 知乎 编辑:程序博客网 时间:2024/06/02 10:47
大家好,欢迎大家关注由我为大家带来的Unity3D游戏开发系列文章,我的博客地址为:http://blog.csdn.net/qinyuanpei。
在上一篇文章中,我们基本上实现了一个小地图的功能,今天呢,我们来实现怪物AI,所谓怪物AI就是指我们为怪物编写一定的算法,使其可以具备一定程度的智能化,以增强游戏的可玩性。在一般的RPG游戏中,怪物通常在一个游戏设定的范围内巡逻,当玩家进入怪物的警戒范围时,怪物就会由巡逻状态转变为攻击状态,向玩家进行攻击,那么,我们今天就来实现一个简单的怪物AI吧,下面我们一起来看代码:
- using UnityEngine;
- using System.Collections;
- public class AI : MonoBehaviour {
- //定义怪物的四种状态:站立、行走、奔跑、无所事事
- public const int STATE_STAND=0;
- public const int STATE_WALK=1;
- public const int STATE_RUN=2;
- //怪物当前状态
- private int NowState;
- //游戏角色
- public GameObject Hero;
- //怪物思考时间
- public const int AI_THINK_TIME=2;
- //触发怪物攻击的临界距离
- public const int AI_ATTACT_DISTANCE=10;
- //上一次思考的时间
- private float LastThinkTime;
- void Start ()
- {
- }
- void Update ()
- {
- //当敌人与怪物间的距离小于攻击范围半径的时候
- if(Vector3.Distance(transform.position,Hero.transform.position)<AI_ATTACT_DISTANCE)
- {
- //敌人开始奔跑
- this.GetComponent<Animation>().Play("run");
- //敌人进入奔跑状态
- NowState=STATE_RUN;
- //使敌人面向角色
- transform.LookAt(Hero.transform);
- //向玩家靠近
- transform.Translate(Vector3.forward*Time.deltaTime * 5);
- }else
- {
- //当当前时间与上一次思考时间的差值大于怪物的思考时间时怪物开始思考
- if(Time.time-LastThinkTime>AI_THINK_TIME)
- {
- //开始思考
- LastThinkTime=Time.time;
- //获取0-3之间的随机数字
- int Rnd=Random.Range(0,2);
- //根据随机数值为怪物赋予不同的状态行为
- switch(Rnd)
- {
- case 0:
- //站立状态
- this.GetComponent<Animation>().Play("idle");
- NowState=STATE_STAND;
- break;
- case 1:
- //行走状态
- //使怪物旋转以完成行走动作
- Quaternion mRotation=Quaternion.Euler(0,Random.Range(1,5)*90,0);
- transform.rotation=Quaternion.Slerp(transform.rotation,mRotation,Time.deltaTime*1000);
- //播放动画
- this.GetComponent<Animation>().Play("walk");
- //改变位置
- transform.Translate(Vector3.forward*Time.deltaTime * 3);
- NowState=STATE_WALK;
- break;
- case 2:
- //奔跑状态
- this.GetComponent<Animation>().Play("run");
- transform.Translate(Vector3.forward*Time.deltaTime * 5);
- NowState=STATE_RUN;
- break;
- }
- }
- }
- }
- }
在上面的代码中,能够触发怪物状态发生变化的有两个条件,第一,是玩家进入了怪物的警范围,此时怪物将面向玩家奔跑靠近;第二,当前时间与怪物上一次思考的时间之差大于怪物的思考时间,此时,怪物将随机作出反应。
好,下面我们回到游戏界面当中来。
如图,博主事先从官方资源商店里下载了一个人物模型。在这个模型中,设计者已经为我们设计好了人物动画,我们将这个模型拖放到场景中,调整到合适的位置,并将人物默认动画设置为idle,下面我们将刚才写好的脚本拖放到此模型上,并设置Hero为我们的玩家对象,在这里我们使用了官方提供的第三人称角色控制器组件,最终实现的效果如下 :
可以看到,在不同的时刻,怪物可以自己执行不同的状态动作,当玩家靠近怪物的时候,会被敌人追击,这就是今天的内容啦,谢谢大家!
转载:原文出处
0 0
- [Unity3D]Unity3D游戏开发之怪物AI
- [Unity3D]Unity3D游戏开发之怪物AI
- 【Unity3D自学记录】游戏开发之怪物AI
- Unity3D怪物基本AI
- Unity3d之怪物AI接口规范
- unity3d 怪物的简单ai
- Unity3D研究院之游戏开发中的人工智能AI
- Unity3D研究院之游戏开发中的人工智能AI
- Unity3D游戏开发之邂逅Unity3D
- [Unity3D]Unity3D 游戏开发之碰撞检测
- [Unity3D]Unity3D游戏开发之粒子系统
- [Unity3D]Unity3D 游戏开发之碰撞检测
- Unity3D游戏开发之“unity3D命令行参数”
- [Unity3D]Unity3D游戏开发之Unity3D中的动态阴影
- [Unity3D]Unity3D游戏开发之从Unity3D到Eclipse
- [Unity3D]Unity3D 游戏开发之Unity3D Native2D特性研究
- [Unity3D]Unity3D游戏开发之从Unity3D到Eclipse
- Cocos2d-x怪物智能AI怪物也有智商----之游戏开发《赵云要格斗》(6)
- Eclipse安装插件时,总卡住
- 敏捷开发学习分享
- SkeletonJson
- Eclipse颜色主题插件 - Eclipse Color Theme
- Java 模式的设计原则
- [Unity3D]Unity3D游戏开发之怪物AI
- 跑在清城
- SkeletonData
- Ubuntu 中安装低版本的gcc/g++
- 单独修改一条sql语句的语法
- Skeleton
- 修复mysql数据库
- 棋牌社区最新分享源码
- Android Studio常用快捷键、Android Studio快捷键大全