在这个实例中,我们要做一些敌人AI的简单实现,其中自动跟随和动画是重点,我们要达到的目标如下:
1.敌人能够自动跟随主角
2.敌人模型一共有四个动作:Idle(空闲) Run(奔跑) Attack(攻击) Death(死亡).
3.要求敌人在合适的时机能够做出合适动作
(一)自动跟随的实现
1)首先,新建一个场景 如图,场景里至少有两个角色: 有一个敌人(刀骷髅兵) 还有一个主角(没错,就是那个胶囊体)
2)先选择场景模型,然后在 Inspector 窗口选项 Static旁边的小三角显示出下拉菜单,确定其中 Navigation Static 被选中. 对于与场景地形无关的模型选项,则要确定没有被选中,如图所示。
Navigation 窗口的选项主要是定义地形对寻路的影响。Radius 和 Height 可以理解为寻路者的半径和高度。Max Slope 是最大坡度,超过这个坡度寻路者则无法通过。Step Height 是楼梯的最大高度 ,超过这个高度寻路者则无法通过。Drop Height表示寻路者可以跳落的高度极限。Jump Distance 表示寻路者的跳跃距离极限。
3)选择菜单栏里的Window 选项里的Navigation选项 点击下面的bake 渲染完成后是这个样子 这些蓝色的区域就是能自动寻路的区域
4) 然后给主角写 移动控制脚本 和 镜头控制脚本 并赋给主角(胶囊体):
1 public classPlayerControl : MonoBehaviour2 {3
4 //定义玩家的Transform
5 publicTransform m_transform;6 //定义玩家的角色控制器
7 CharacterController m_ch;8 //定义玩家的移动速度
9 float m_movespeed = 10.0f;10 //定义玩家的重力
11 float m_gravity = 2.0f;12 //定义玩家的生命
13 public int m_life = 5;14
15 //定义摄像机的Transform
16 Transform m_cameraTransform;17 //定义摄像机的旋转角度
18 Vector3 m_cameraRotation;19 //定义摄像机的高度
20 float m_cameraHeight = 1.4f;21 //定义小地图摄像机
22 publicTransform m_miniMap;23
24 //定义枪口的Transform m_muzzlepPoint;
25 Transform m_muzzlePoint;26 //定义射击时,射线射到的碰撞层
27 publicLayerMask m_layer;28 //定义射中目标后粒子效果的Transform
29 publicTransform m_fx;30 //定义射击音效
31 publicAudioClip m_shootAudio;32 //定义射击间隔时间计时器
33 float m_shootTimer = 0;34
35
36
37 //Use this for initialization
38 voidStart()39 {40 //获取玩家本身的Transform 赋给 m_transform
41 m_transform = this.transform;42 //获取玩家本身的CharacterController组件 赋给 m_ch
43 m_ch = this.GetComponent();44
45 //摄像机的控制的初始化46 //获取摄像机的Transform
47 m_cameraTransform =Camera.main.transform;48 //定义一个三维向量用来表示摄像机位置 并把玩家的位置赋给它 设置摄像机初始位置
49 Vector3 pos =m_transform.position;50 //摄像机的Y轴坐标 为 本来的坐标加上上面定义的摄像机高度
51 pos.y +=m_cameraHeight;52 //把修改后的摄像机坐标重新赋给m_cameraTransform
53 m_cameraTransform.position =pos;54 //把主角的旋转角度 赋给 摄像机的旋转角度
55 m_cameraTransform.rotation =m_transform.rotation;56 //获取摄像机的角度
57 m_cameraRotation =m_transform.eulerAngles;58
59 //隐藏鼠标