1

游戏环境是二维的。物理没有。

我有一个 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 的无效更新中。

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

这里的 rightendpos 基本上是一个 vector3 位置,距离其当前位置两个框。

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

4

1 回答 1

0

你可以尝试两件事:

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

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

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

于 2014-07-02T11:52:21.097 回答