【发布时间】:2016-07-19 16:47:42
【问题描述】:
这个程序应该在操纵杆的 Y 方向有正偏移时向前移动我的角色,并在操纵杆不移动时停止移动。但我的代码似乎只是第一次这样做。第二次以后,当我按下按钮时它似乎停止移动,当我松开它时它会移动。
这是我的代码:
using UnityEngine;
using System.Collections;
public class move : MonoBehaviour {
public Transform obj;
float threshold = 0.0f;
Vector3 current_pos;
void Start () {
current_pos = obj.position;
}
public void Update() {
Vector3 offset = obj.position - current_pos;
if(offset.y > threshold) { // goes forward
transform.Translate(Vector3.forward *10* Time.deltaTime);
transform.Translate(Vector3.up * Time.deltaTime, Space.World);
}
if (offset.y < threshold){ // goes reverse
transform.Translate(-Vector3.forward *10* Time.deltaTime);
transform.Translate(Vector3.up *10* Time.deltaTime, Space.World);
}
}
}
我有一个小球体,可以输入操纵杆。如果球体的位置(偏移)有正向移动,我会让我的角色移动。 因此,如果球体向前移动(由于操纵杆输入),我的角色就会移动。但是我的角色在一个动作之后就连续移动。停不下来。
【问题讨论】:
-
你听说过调试吗?它是关于逐步运行您的应用程序,您可以检查所有值是否符合您的期望。
-
为什么不在更新函数中更新当前位置?您的 start 函数中的 if 语句应该 - 据我了解 - 始终返回 false,因为当前位置是对象位置,两者之间的差异应该为零。
-
另外,任何时间为零的东西总是为零——尽管我假设你知道这一点。我这么说是因为
transform.Translate(Vector3.up *0* Time.deltaTime, Space.World);和它上面的行都乘以零。可能是错字?还是故意的?因为你的转变为零。 -
我想如果我更新当前位置,那么就不会有偏移量,是吗?因为说操纵杆的正常位置是(0,0,0),而 obj.position 是不断变化的。至少这是我在程序中想要的。 ://
-
不清楚你想用这段代码实现什么。通过详细说明您最终想要做什么来更新您的问题
标签: c# unity3d game-development