// Springhead剛体とGameObjectの間での位置姿勢の同期: 更新順を制御するためPHSceneからまとめて呼び出す public void UpdatePose() { if (sprObject != null) { PHSolidIf so = sprObject as PHSolidIf; if (fixedSolid) { // Fixedな剛体はHandleの位置をSpringheadに反映 so.SetPose(new Posed(fixedSolidPosition.ToVec3d(), fixedSolidRotation.ToQuaterniond())); gameObject.transform.position = fixedSolidPosition; gameObject.transform.rotation = fixedSolidRotation; } else { // Fixedでない剛体の場合 if (!so.IsDynamical()) { // Dynamicalでない剛体はUnityの位置をSpringheadに反映(操作可能) so.SetPose(gameObject.transform.ToPosed()); } else { // Dynamicalな剛体はSpringheadのシミュレーション結果をUnityに反映 gameObject.transform.FromPosed(so.GetPose()); } fixedSolidPosition = gameObject.transform.position; fixedSolidRotation = gameObject.transform.rotation; } } }
// Springhead剛体とGameObjectの間での位置姿勢の同期: 更新順を制御するためPHSceneからまとめて呼び出す public void UpdatePose() { if (sprObject != null) { PHSolidIf so = sprObject as PHSolidIf; if (!so.IsDynamical() && !fixedSolid) { // Dynamicalでない(かつ、fixedでもない)剛体はUnityの位置をSpringheadに反映(操作可能) so.SetPose(gameObject.transform.ToPosed()); } else { // Dynamicalな(もしくはfixedな)剛体はSpringheadのシミュレーション結果をUnityに反映 gameObject.transform.FromPosed(so.GetPose()); } } }