2017-07-28 30 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; 
相關問題