【发布时间】:2018-02-24 20:35:33
【问题描述】:
我正在编写一个相当简单的脚本。由于我是编码和东西的新手,我的代码很可能看起来很糟糕。
好的,事情是这样的: 我触发了一个敌人,并且仅在玩家接近某个点时才产卵。然后敌人要跟着玩家,不管他在哪里,保持一定的3个单位范围。 至此。一切正常。
现在,似乎不起作用的是,我需要我的敌人在我的玩家周围“绕行”,当他在一定范围内 (3) 并且只有那时。 现在,它从一开始就在轨道上运行……我错过了什么??
到目前为止,这就是我的代码:
public Transform mTarget;
float mSpeed = 10.0f;
const float EPSILON = 3.0f;
public float speed;
void Start()
{
OrbitAround ();
}
void Update() {
transform.LookAt (mTarget.position);
if ((transform.position - mTarget.position).magnitude > EPSILON)
transform.Translate (0.0f, 0.0f, mSpeed * Time.deltaTime);
}
void OrbitAround() {
if(Vector3.Distance(transform.position, mTarget.transform.position) < 3) {
transform.RotateAround (mTarget.transform.position, Vector3.up, speed * Time.deltaTime);
}
}
非常感谢提前,如果有人可以帮助我。
干杯,
【问题讨论】:
-
如果
Update使用mTarget作为目的地,为什么OrbitAround使用Player.transform?另外,你在哪里打电话OrbitAround?最后,跟踪将在EPSILON, 3 处停止,但您的轨道代码会检查小于 2 的距离。 -
我想我可以删除“播放器”并使用 mTarget .transform?编辑了Start(),猜猜应该是在那里调用的吧?
-
“猜猜”?你已经写了代码,你应该知道每一行是做什么的,而不是“猜测”它做什么......
-
嗯,是的,已删除。 mTarget 和 Player 实际上是一样的。所以那里没有任何意义。
-
这行不通;看看docs.unity3d.com/ScriptReference/MonoBehaviour.Start.html (基本上 start 被称为 ONCE 而不是之后)