Enemy Ai unityscript运动问题

时间:2015-11-18 15:28:08

标签: unity3d artificial-intelligence unityscript

我目前正在使用的代码让敌人在远处注意到我,如果我靠近就跟着我。我遇到的问题是他们如何行动。我正在构建一个Minecraft风格的游戏,但是我不能让敌人留在地上并像我一样用fps控制器跳起来。他们似乎只是向我漂浮了最短的距离。

代码:

 var target : Transform; //the enemy's target
 var moveSpeed = 3; //move speed
 var rotationSpeed = 3; //speed of turning
 var range : float=10f;
 var range2 : float=10f;
 var stop : float=0;
 var myTransform : Transform; //current transform data of this enemy
 function Awake()
 {
     myTransform = transform; //cache transform data for easy access/preformance
 }

 function Start()
 {
      target = GameObject.FindWithTag("1Player").transform; //target the player

 }

 function Update () {
     //rotate to look at the player
     var distance = Vector3.Distance(myTransform.position, target.position);
     if (distance<=range2 &&  distance>=range){
     myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
     Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
     }


     else if(distance<=range && distance>stop){

     //move towards the player
     myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
     Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
     myTransform.position += myTransform.forward * moveSpeed * Time.deltaTime;
     }
     else if (distance<=stop) {
     myTransform.rotation = Quaternion.Slerp(myTransform.rotation,
     Quaternion.LookRotation(target.position - myTransform.position), rotationSpeed*Time.deltaTime);
     }


 }

1 个答案:

答案 0 :(得分:0)

好的,现在这就是你所缺少的:

1.将x和z轴上的旋转锁定为零

myTransform.eulerAngles = new Vector3(0f, myTransform.eulerAngles.y, 0);

最后添加此行。

2.在AI前面做一个短距离光线投射,如果它检测到一些障碍物,停止当前运动并按y轴移动,如果没有像你在脚本中写的那样移动障碍物。

至于光线投射,我没有必要在这里写,你可以在Unity3D文档中找到更多关于它的信息: http://docs.unity3d.com/ScriptReference/Physics.Raycast.html本教程适用于州议员:https://unity3d.com/learn/tutorials/modules/beginner/physics/raycasting