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()来停止任何运动,当然你可以尝试检测任何标签等,祝你好运!