unity, 由5.2.1f1升级到5.3.5f1,2d物理不正常解法
2016-06-12 20:14
495 查看
由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/
最后发现问题出在我的游戏中的下面一段代码:
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/
相关文章推荐
- 实现Unity对Dictionary的序列化
- Unity3d与iOS交互开发——接入平台SDK必备技能
- Unity3D研究院之IOS全自动打包生成ipa
- 如何添加AdMob广告到现有的Unity3D ios游戏
- Unity3D研究院之IOS&Android收集Log文件
- Unity 发布到Android的注意事项开发环境
- Unity 发布到IOS的注意事项
- HoloLens开发手记 - Unity之World Anchor空间锚
- Unity3d的iOS调试实用技巧
- OnBeforeSerialize And OnAfterDeserialize
- unity3d项目版本管理设置
- 深入浅出聊Unity3D优化:从Draw Calls到GC
- Unity3D和网页数据交互的基本原理
- Unity3d文件部署到IIS,图解 配置说明
- unity 代码设置要打包的AssetBundle
- Unity学习日常问题记录八-反弹和静止条件值是可以设的,ParticleSystem的方向
- 【Unity3d】如何绘制椭圆
- unity知识总结
- 关于游戏对象隐藏和重新显示之前触发的消息。
- 关于unity5鼠标在物体上的检测相关问题