我应该如何移动我的gameObject(盒子),以便当盒子击中另一个盒子时它会停止(或者更准确地说,首先被记录的击中)



GameEnvironment是2d的。Physcis没有。

我有一个gameObject(gO)标记的盒子,自动从a点移动到b点。附加到这个脚本有ff代码:

transform.position = Vector3.Lerp (transform.position, targetPos, (Time.time-startTime)*0.0001f);

注意:这个动作是缓慢的。

我还添加了一个raycast2d,基本上说,如果它击中另一个框,它将停止在其当前位置。

if(hit){
        if (hit.collider.tag == "box") {
            canControl = false;
            canMove = false;
            canSpawn();
        }
} else {
    canMove = true;
}

这个和上面的代码都是在boxMovementScript的更新。

在这一点上,一切都很好,当我在另一个盒子前面移走一个盒子时,后者继续向targetPos移动。当一个方框挡住它的路时,它停在当前位置。

当我试图控制盒子移动得更快时,问题就出现了。如果它前面有另一个盒子,它就会绕过这个盒子,命中就不会被记录下来。我的右移代码如下。这是在我的GameOBjectControllerScript的void Update。

if (Input.GetKeyDown(KeyCode.D) && rX !=-100){
    box.transform.position = Vector3.Lerp(atom.transform.position, rightendpos, 1);
}

右边的位置基本上是一个距离当前位置两个方框的vector3位置。

我应该如何移动我的gameObject(box),以便当box碰到另一个box时它停止?

您可以尝试以下两种方法:

首先,你可以尝试在FixedUpdate()方法中运行代码,因为它对物理更友好。

其次,你可以为你的移动立方体游戏对象添加OnCollisionEnter2D()方法,在附加的脚本中,更多信息在这里http://docs.unity3d.com/ScriptReference/Collider2D.OnCollisionEnter2D.html [OnCollisionEnter页面有更多的例子!]还有一些其他的碰撞事件,如OnCollision2D等。

我会尝试使用OnCollisionEnter2D()来停止任何运动,当然你可以尝试检测任何标签等,祝你好运!

相关内容

最新更新