SurvivalShooter学习笔记(三.敌人移动)

1.敌人和玩家若存活,敌人始终朝着玩家所在位置移动,所以要给玩家物体一个Tag:Player从而找到玩家

2.敌人的自动寻路使用Unity自带的NavMeshAgent寻路组件寻路,要先把场景中不动的物体勾选Static,然后Navigation-Bake烘焙


移动 代码如下:

 public class EnemyMovement : MonoBehaviour
    {
        Transform player;               // 玩家位置变量.
        PlayerHealth playerHealth;      // 玩家生命脚本
        EnemyHealth enemyHealth;        // 敌人生命脚本
        UnityEngine.AI.NavMeshAgent nav; //敌人身上寻路组件

        void Awake ()
        {
            // 获取组件
            player = GameObject.FindGameObjectWithTag ("Player").transform; //根据Tag找到玩家
            playerHealth = player.GetComponent <PlayerHealth> ();
            enemyHealth = GetComponent <EnemyHealth> ();
            nav = GetComponent <UnityEngine.AI.NavMeshAgent> ();//获取物体身上寻路组件
        }

        void Update ()
        {
            // 如果主角和敌人都存活
            if(enemyHealth.currentHealth > 0 && playerHealth.currentHealth > 0)
            {
                // 使用寻路组件朝玩家位置寻路
                nav.SetDestination (player.position);
            }
            else
            {
                //主角或敌人死亡,停止寻路,禁用寻路组件
                nav.enabled = false;
            }
        }
    }



3.敌人小怪身上状态机:默认移动,始终朝着敌人移动;直到玩家死亡,才切换到待机状态


4.小怪身上挂刚体组件,Drag和Angular Drag都设置为Inf无限大,使用重力取消物理属性。勾选禁用Y方向移动和XZ方向旋转


5.小怪身上加CapsuleCollider组件,调整适配,不勾选IsTrigger


6.小怪身上加大一点的SphereCollider组件,勾选IsTrigger,作为进入攻击玩家范围的触发判断用

注意:

7.本例中有三种怪,其中两种怪是用的一套动画,而大象是单独一套动画

但是,大象的动画状态机和其他的是一个逻辑,所以为了复用状态参数以及状态机的逻辑,不新建AnimatorController,而是

复用状态机:AnimatorOverrideController(针对动画不同,但是状态机逻辑与参数都相同的情况:如多种角色)

Controller拖入复用的源状态机,然后分别拖入相应动画:


因此需要注意,父AC的改变会影响override的AC。


原文地址:https://www.cnblogs.com/caymanlu/p/6361689.html