Unity3D--创建敌人和玩家之间的AI

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MarioHos/article/details/44261517

创建敌人和玩家之间的AI

using UnityEngine;
using System.Collections;

public class EnemyAI : MonoBehaviour 
{
    //  敌人冲向的目标
    public Transform target;
    //  敌人移动速度
    public int moveSpeed = 5;
    //  敌人旋转速度
    public int rotationSpeed = 5;
    //  敌人和玩家之间的最大距离
    public int maxDistance;
    // ???  看下面解释
    private Transform myTransform;
    // ???
    void Awake()
    {
        myTransform = transform;
    }

    void Start () 
    {
        //  通过标签去查找游戏对象
        GameObject go = GameObject.FindGameObjectWithTag("Player");
        //  将它的transform指定给target
        target = go.transform;
        maxDistance = 2;

    }

    void Update () 
    {
        //  在敌人和玩家之间画一条线
        Debug.DrawLine(target.position,myTransform.position,Color.red);
        //  看着目标
        myTransform.rotation = Quaternion.Slerp(myTransform.rotation,Quaternion.LookRotation(target.position - myTransform.position),rotationSpeed * Time.deltaTime );
        //  判断敌人和玩家之间的距离是否大于最大距离
        if(Vector3.Distance(target.position, myTransform.position) > maxDistance)
        {
        //  移向目标
        myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
        }
    }
}

注释 :Awake() 是激活功能,它将会在你的脚本所用功能之前调用,所以你想要在脚本的最一开始做一些事情的话,你可以加一个Awake ();
讲解以下代码:
Public Transform myTransform;
myTransform = transform;
目的是给我们的Transform【形态】做一个缓存,然后再Awake功能中将transform赋值myTransform。我们知道我们将会调用transform信息,在Update中进行移动,旋转,但是每次调用transform的时候,它每次都要回去查找transform到底是什么,所以与其让它每次都来检查这个transform,我们不如建立一个缓存,将它存进myTransform变量中,这将让运算变得更加快速,所以我们不需要不停地去查找这些信息,我们直接给它一个自动的参考,这就是为什么这么做的原因。

没有更多推荐了,返回首页