我目前正在使用的代码让敌人在远处注意到我,如果我靠近就跟着我。我遇到的问题是他们如何行动。我正在构建一个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);
}
}
答案 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