C# 物理。模拟每一帧

C# 物理。模拟每一帧,c#,unity3d,C#,Unity3d,我有一个游戏对象,当玩家选择力量和方向时,会使用physics.simulate绘制运动轨迹和终点位置的线。如果我每0.5f秒使用一次,效果会很好,但是我必须预测每帧的轨迹和结束位置,但是游戏就落后了。如何预测每帧的轨迹和结束位置 私人电子计算器 { 虽然是真的 { 收益率返回新WaitForSeconds0.3f; touchhandler.listofcoll.Clear; touchhandler.force=floatMath.powdanceToroller,3; touchhandl

我有一个游戏对象,当玩家选择力量和方向时,会使用physics.simulate绘制运动轨迹和终点位置的线。如果我每0.5f秒使用一次,效果会很好,但是我必须预测每帧的轨迹和结束位置,但是游戏就落后了。如何预测每帧的轨迹和结束位置

私人电子计算器 { 虽然是真的 { 收益率返回新WaitForSeconds0.3f; touchhandler.listofcoll.Clear; touchhandler.force=floatMath.powdanceToroller,3; touchhandler.RollerMove; endpos=touchhandler.CheckPositionrollerobj.GetComponent; destination.transform.position=endpos; } } 公共向量3检查位置刚体默认值RB { 物理。自动模拟=错误; defaultRb=GetComponent; Vector3 defaultPos=defaultRb.position; 四元数defaultRot=defaultRb.rotation; float timeInSec=时间检查; 而timeinset>=Time.fixedDeltaTime { TIMEINSE-=Time.FIXEDDELTIME; 物理。模拟时间。固定时间; }//结束时 Vector3 futurePos=默认RB.position; Physics.autoSimulation=true; defaultRb.velocity=Vector3.0; defaultRb.angularVelocity=矢量3.0; defaultRb.transform.position=defaultPos; defaultRb.transform.rotation=defaultRot; 回归未来; }
通常,你应该做所有与物理引擎相关的事情,所以在使用IEnumerator时也应该做刚体,而不是在每帧的基础上

物理更新不是在每帧的基础上进行的,而是在固定的时间间隔内进行的,这是一个很好的原因,因此固定更新:它通常有点耗时,而且资源密集。因此,为了避免巨大的滞后,你应该避免每一帧都使用物理

另一件让你慢下来的事情是重复调用GetComponent。您应该只做一次,以后再使用引用:

私人刚体; 私人空间觉醒 { 刚体=rollerobj.GetComponent; } 私人电子计算器 { 虽然是真的 { 返回新的waitforfixedpate; touchhandler.listofcoll.Clear; touchhandler.force=floatMath.powdanceToroller,3; touchhandler.RollerMove; endpos=touchhandler.CheckPositionrigidBody; destination.transform.position=endpos; } } 在这条线的位置

defaultRb=GetComponent; 没道理!您可能已经传入了有效的刚体引用,也可能没有。因此,在这里覆盖它似乎有点适得其反

如果您想在这里再次使用一种后备方法,而不是将引用存储在Awake中一次,然后像这样重用它

私人刚体; 私人空间觉醒 { 刚体=rollerobj.GetComponent; //现在已经在这里添加了后备方案 如果!rigidBody rigidBody=GetComponent; //或者你甚至可以使用 //如果!rigidBody rigidBody=GetComponentChildrenTrue; //为了在整个等级体系中找到一个刚体 }