Пример #1
0
    // 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;
            }
        }
    }
Пример #2
0
 // 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());
         }
     }
 }