2017-07-28 109 views
0
private void Start() 
{ 
    connected = false; 
} 

private void OnCollisionEnter(Collision collision) 
{ 
    if (collision.transform.tag == "Player") 
    { 
     dronePlayer = collision; 

     offset = dronePlayer.transform.position - gameObject.transform.position; 

     connected = true; 
    } 
} 

private void Update() 
{ 
    if (connected) 
    { 
     transform.position = dronePlayer.transform.position - offset; 
    } 
} 

简单,我要做到这一点拿起从另一个对象物体碰撞后,再左右移动。所以这个脚本改变了我用变换命中的对象的变换。Unity3d:对撞机与对象并更新其变换,则失去所有刚体的属性,并通过物体落在

这里的问题是,除非我接近场景中的另一个对象,否则所有工作都可以正常工作。刚体的法则被忽略,并通过其他通常碰撞的物体。

回答

1

它是因为你强迫它的位置相对于它被“卡住”的对象的特定位置:它不再是一个由物理引擎控制的刚体。它坚持到的对象不知道它不能再前进,这样做,并导致相互渗透。

您需要将此对象的碰撞体积添加到控制对象的层次结构中,以便物理引擎确实知道它。

+1

关于Unity物理对象的一个​​很好的实践是知道你是否要通过强制他们的位置或使用物理引擎来管理它们。无论你选择什么(我总是倾向于使用引擎),坚持下去。 – Greg

+0

非常好的一点,@Greg。我个人更喜欢不使用物理引擎(我从来没有多少运气让实体使用'AddForce()'以可信的方式移动,一切都像在冰上一样:低加速度,宽角和没有最大速度。 – Draco18s

0

我在一些朋友之间进行了一次对话,你指出的是正确的,它忽略了物理引擎。

有人指出使用一个惊人的作品。

 gameObject.AddComponent<FixedJoint>(); 
     gameObject.GetComponent<FixedJoint>().connectedBody = collision.rigidbody; 
相关问题