【发布时间】:2019-10-19 02:13:26
【问题描述】:
我希望一个对象在每次变换时使另一个对象移动。翻译但对象在到达目的地时并没有停止移动。
我在我的脚本中尝试了几件事,但我不知道可能是什么问题。一件事是:我的代码中有几种方法可以使不同的段落中的一些东西以不同的方式移动。因此,我编写了一个小方法,它在 Input.GetKey() 上执行特定方法,以查看当我不执行其他方法时它是否相同,此外我还注释掉了 Update 中调用的所有内容以确保确定。没有其他移动方法应该影响对象。因此,我只会发布在更新中在 GetKey 上调用的受影响方法。
“transPointFirst”到“transPointFourth”是在检查器中传递的空游戏对象。我还检查了 transPoints 是否在运行时移动,但不是,每帧的位置相同。
private void ElevateCaptain()
{
targetRigid.isKinematic = true;
var transFirst = new Vector3(transPointFirst.localPosition.x, transPointFirst.localPosition.y, 0);
var transSecond = new Vector3(transPointSecond.localPosition.x, transPointSecond.localPosition.y, 0);
var transThird = new Vector3(transPointThird.localPosition.x, transPointThird.localPosition.y, 0);
var transFourth = new Vector3(transPointFourth.localPosition.x, transPointFourth.localPosition.y, 0);
target.transform.Translate(transFirst * Time.deltaTime, Space.World);
if (target.transform.position == transFirst)
target.transform.Translate(transSecond * Time.deltaTime, Space.World);
else if (target.transform.position == transSecond)
target.transform.Translate(transThird * Time.deltaTime, Space.World);
else if (target.transform.position == transThird)
target.transform.Translate(transFourth * Time.deltaTime, Space.World);
else if (target.transform.position == transFourth)
{
targetRigid.isKinematic = false;
}
}
所以,我希望我的目标移动到第一个翻译,如果达到,移动到第二个翻译,依此类推。事实是:目标朝着正确的方向移动,但从未停止。如果代码是这样执行的,或者我在第一次 transform.Translate 调用后遗漏了所有内容,都没有关系。对象移动到第一个点并且越来越远......当我选择另一个这些点作为第一个翻译时也是一样的。我希望有人可以帮助我。
【问题讨论】:
-
你有一个没有 if 检查的 transform.Translate,所以它也会继续移动,你依赖 == 3 个浮点数,最好使用 vector3。距离和近似函数来检查它们是否是相同的位置。
-
@Eddge 我还尝试使用 Vector3.Distance 检查 if 条件。但是,transform.Translate 不应该移动到那个给定点而不是进一步吗?
-
不,那会朝着
-
@Eddge 在我的回答中提到了它,但是在两个
Vector3s 上使用==已经检查了近似相等。你的第一部分是完全正确的。 -
@Ruzihm,我宁愿在我的代码中具体说明我在做什么,而不是将其留给可以在任何更新时更改的 api 规范。