【发布时间】:2015-11-19 14:55:07
【问题描述】:
如上所述,我正在尝试构建一个简单的游戏,但我似乎无法让敌人正确移动。该游戏是一款 Minecraft 风格的基于块的游戏。到目前为止,我使用的代码使敌人在我进入一定距离时开始跟踪我,并在我离开一定距离后停止跟踪。
我在使用这个脚本时遇到的问题是,当我逃离敌人时,敌人会飘到远处。更重要的是,我一辈子都不能让敌人跳下去。我知道我应该为此使用两个 Raycast:一个检测前面的块,这会使敌人跳起来,另一个检测敌人的下方,如果他脚下没有矿工,让他下降到下面的水平?我不知道如何实现这一点,我们将不胜感激。
我目前的代码如下所示:
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);
}
//lock rotation on x and y axis to zero
myTransform.eulerAngles = new Vector3(0f, myTransform.eulerAngles.y, 0);
}
【问题讨论】:
标签: javascript unity3d artificial-intelligence