前言:不得不自我批评一下,更新的速度有点慢,距离上一篇已经有2个月了。接下来要赶下进度了……
这篇文章主要介绍,如何添加一个敌人角色,并自动跟踪Player对象。
步骤一:之前系列一,忘记添加场景了。补上。即将预设体Environment拖拽到Hierarchy场景中。如下:
步骤二:将敌人zombunny对象拖拽到场景中。位置如下:
同时,把HitParticles预设体拖拽到zombunny对象上,使其成为zombunny的子物体。作用:Player对象击中敌人zombunny,产生粒子特效。位置如下:
步骤三:将zombunny的Layer层,设置为shootable层(后面代码控制, 只有这一层的对象才能被Player对象进行攻击),意味着它可以被主角Player进行攻击。如下:
步骤四:给zombunny添加一个胶囊碰撞组件: Add Component–>Physics–>Capsule Collider
目的:用于碰撞。才不会使得zombunny直接穿透场景的物体。
设置如下:
Center : X :0 | Y:0.8 | Z:0
Radius :0.5
Height:1.5
步骤五:给zombunny添加一个球型碰撞器组件:Add Component–>Physics–>Sphere Collider
目的:用于与主角Player对象进行碰撞触发检测。注意:Is Trigger 必须勾选!!!
设置如下:
Is Trigger : √ ,必须勾选
Center : X :0 | Y:0.8 | Z:0
Radius :0.8
步骤六:给zombunny添加一个Audio Source组件:Add Component –>Audio–>Audio Source
目的:zombunny被主角攻击时,会出现受伤的声音片段。
设置如下:
AudioClip(声音片段):选中zombunny Hurt
取消Play On Awake(开机自动播放)
步骤七:给zombunny添加Nav Mesh Agen组件:Add Component –>Navigation–>Nav Mesh Agen
目的:使zombunny角色能够自动寻径,跟踪Player对象
设置如下:
首先 window –>Navigation 打开Navigation面板,在Bake选项中设置: Agent Radius :0.75 | Agent Height:1.2 | Step Height :0.1
设置完,点击Bake,进行路径烘焙,效果如下:
蓝色的区域,表示烘焙后的效果,这部分区域,zombunny角色可以进行走动。而黑色区域,zombunny会绕道而走。
步骤八:为zombunny角色创建一个动画控制器,用于控制角色运动时的状态。
在2016_my_survival_Shooter目录下,右键–>create–>Animator Controller –>命名为yzx_Enemy —>拖拽该控制器到场景中的zombunny对象上;
打开Animator视窗,window–>Animator
默认有3个状态 (Any State 、Entry 、Exit),右键空白处,分别创建三个状态(右击–>Create State–>Empty),并分别重命名为Move、Idle 和 Death;
接下来,点击Parameters,点击“+”号,添加两个参数。两个参数均设置为Trigger(触发型): Dead 和 PlayerDead ,并记得勾选。
最后,设置好整个控制器状态的逻辑。
Entry—>Move; 默认状态
Move–>Idel (右击–>Make Transition) 并选中过渡线,设置过渡条件,在Inspect视图中,找到Conditions,选中“+”,把刚才设置的参数添加进来(这里选择PlayerDead);
Any State–>Death (过渡条件设置为 Dead);
整体的效果如下:
步骤九:写一个zombunny的运动脚本。
在2016_my_survival_Shooter下的子目录yzx_script下,新建一个C#脚本,并命名为EnemyMovement ,并将脚本拖拽到zombunny对象上。其中,EnemyMovement.cs脚本代码如下:
using UnityEngine;
using System.Collections;
public class EvemyMovement : MonoBehaviour {
Transform player; //定义一个private变量,类型为Transform类型
NavMeshAgent nav; //定义一个private变量,类型为NavMeshAgent类型
// Use this for initialization
void Start () {
player = GameObject.FindGameObjectWithTag ("Player").transform; //根据Tag标签找到Player对象,如果你有印象,你会发现上一篇系列一,Player角色的设置Tag设置为Player
nav = GetComponent<NavMeshAgent> (); //由于该脚本是绑定在zombunny上的,而NavMeshAgent组件也在zombunny对象上,所以直接GetComponent就可以得到zombunny上的组件。
}
// Update is called once per frame
void Update () {
nav.SetDestination (player.position); //设置nav对象的最终目的地,也就是zombunny的最终位置,其位置为Player角色的实时位置,那么zombunny就会跟踪Player对象了。
}
}
暂时就到这了……
附上整个项目的工程。链接:http://pan.baidu.com/s/1dEESvXf 密码:4w2h
本次场景存放的路径为:2016_yzx_survival_shooter\Assets\2016_my_survival_Shooter.unity