unity, 由5.2.1f1升级到5.3.5f1,2d物理不正常解法
由5.2.1f1升級到5.3.5f1,物理不正常。
最后發現問題出在我的游戲中的下面一段代碼:
? Vector2 targetPosition=...;
? Vector2 targetVelocity=...;
? GetComponent<Rigidbody2D> ().MovePosition (targetPosition);
?? ??? ?float mass = GetComponent<Rigidbody2D> ().mass;
?? ??? ?GetComponent<Rigidbody2D> ().AddForce (targetVelocity*mass,ForceMode2D.Impulse);
原來Rigidbody2D.MovePosition的行為在5.2.1f1和5.3.5f1中發生了變化。在5.3.5f1中
MovePosition的實現原理是產生一個在一幀之內由當前位置移動到目標位置的速度,則到下一幀,剛體就會按此速度移動到目標位置了。在5.2.1f1中,當剛體移到目標位置后此速度會被保留,而5.3.5f1中“修正”了這個“bug”,當剛體到達目標位置后,會將剛體的速度恢復為調用MovePosition之前的速度。
但是看來,這樣“修正”帶來了新的問題,即如果在MovePosition之后立即調用了修改剛體速度的代碼,似乎會被覆蓋掉。
我目前的避坑辦法是將
GetComponent<Rigidbody2D> ().MovePosition (targetPosition);
改成
GetComponent<Rigidbody2D> ().position= targetPosition;
這樣就在5.2.1f1和5.3.5f1中都正常了。
參考: http://forum.unity3d.com/threads/5-0-2f-rigidbody2d-moveposition-setting-the-velocity-now.325655/
轉載于:https://www.cnblogs.com/wantnon/p/5578655.html
總結
以上是生活随笔為你收集整理的unity, 由5.2.1f1升级到5.3.5f1,2d物理不正常解法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 索引节点(inode)爆满问题处理
- 下一篇: springmvc+mybatis,在m