我应该如何移动我的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的Update中。

在这一点上,一切都很好,当我在另一个盒子前面移开一个盒子时,后者继​​续向目标POS移动。当一个盒子挡住它的时候,它停在当前位置。

我试图控制盒子移动得更快时出现问题。如果另一个盒子在它的前面,它就绕过盒子,并且从未注册。我的正确的代码如下。这是在我的GameOBjectControllerScript的无效更新。

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

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

我应该如何移动我的gameObject(盒子),以便在盒子撞到另一盒子时停止?

+0

确保raycast2d的长度/距离至少或略长于对象在给定方向上的当前速度。 – LearnCocos2D

您可以尝试两件事情:

首先,你可以尝试运行代码的FixedUpdate内()方法,而不是因为它是在物理亲切。

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

我会尝试使用OnCollisionEnter2D()停止任何移动,当然,你可以尝试检测任何标签等,古德勒克!