static void CommandPOV(CommandArg[] args)
        {
            if (args[0].Int == 1)
            {
                // POV camera
                if (POV_CAMERA == null)
                {
                    HeadIK headIK = UnityEngine.Object.FindObjectOfType <HeadIK>();

                    GameObject pov = new GameObject("POV_Camera");
                    pov.transform.parent = headIK.head.gameObject.transform;

                    POV_CAMERA = pov.AddComponent <Camera>();
                    POV_CAMERA.nearClipPlane    = 0.15f;
                    POV_CAMERA.depth            = 999;
                    pov.transform.position      = headIK.head.position;
                    pov.transform.rotation      = headIK.head.rotation * Quaternion.Euler(new Vector3(-100f, 13f, 43f));
                    pov.transform.localRotation = pov.transform.localRotation * Quaternion.Euler(new Vector3(20f, 0f, 50f));
                }

                float fov = args.Length == 2 ? args[1].Float : 72f;
                POV_CAMERA.fieldOfView = fov;
                POV_CAMERA.enabled     = true;
            }
            else
            {
                POV_CAMERA.enabled = false;
            }
        }
        public static void SetPlayerView(int value, float fov)
        {
            if (value == 1)
            {
                // POV camera
                if (POV_CAMERA == null)
                {
                    HeadIK headIK = UnityEngine.Object.FindObjectOfType <HeadIK>();

                    GameObject pov = new GameObject("POV_Camera");
                    pov.transform.parent = headIK.head.gameObject.transform;

                    POV_CAMERA = pov.AddComponent <Camera>();
                    POV_CAMERA.nearClipPlane    = 0.15f;
                    POV_CAMERA.depth            = 999;
                    pov.transform.position      = headIK.head.position;
                    pov.transform.rotation      = headIK.head.rotation * Quaternion.Euler(new Vector3(-100f, 13f, 43f));
                    pov.transform.localRotation = pov.transform.localRotation * Quaternion.Euler(new Vector3(20f, 0f, 50f));
                }

                POV_CAMERA.fieldOfView = fov;
                POV_CAMERA.enabled     = true;
            }
            else
            {
                POV_CAMERA.enabled = false;
            }
        }
示例#3
0
        public void Awake()
        {
            PlayerHeadIK = PlayerController.Instance.GetComponentInChildren <HeadIK>();
            StartCoroutine(RecordBailedLoop());
            this.transformsToBeRecorded = new List <Transform>();
            this.RecordedFrames         = new List <ReplayRecordedFrame>();

            AddTransformToRecordedList(PlayerController.Instance.transform);

            //Board
            AddTransformToRecordedList(PlayerController.Instance.boardController.boardTransform);
            AddTransformToRecordedList(PlayerController.Instance.boardController.backTruckRigidbody.transform);
            AddTransformToRecordedList(PlayerController.Instance.boardController.frontTruckRigidbody.transform);
            AddTransformToRecordedList(SoundManager.Instance.wheel1);
            AddTransformToRecordedList(SoundManager.Instance.wheel2);
            AddTransformToRecordedList(SoundManager.Instance.wheel3);
            AddTransformToRecordedList(SoundManager.Instance.wheel4);

            //Bones
            AddTransformToRecordedList(PlayerController.Instance.skaterController.skaterTransform);
            AddTransformToRecordedList(PlayerController.Instance.skaterController.skaterRigidbody.transform);

            foreach (object obj in Enum.GetValues(typeof(HumanBodyBones)))
            {
                HumanBodyBones humanBodyBones = (HumanBodyBones)obj;
                if (humanBodyBones < HumanBodyBones.Hips || humanBodyBones >= HumanBodyBones.LastBone)
                {
                    break;
                }
                Transform boneTransform = PlayerController.Instance.animationController.skaterAnim.GetBoneTransform(humanBodyBones);
                if (boneTransform != null)
                {
                    AddTransformToRecordedList(boneTransform);
                }
            }
            var ikcTraverse = Traverse.Create(PlayerController.Instance.ikController);

            AddTransformToRecordedList(ikcTraverse.Field <Transform>("ikAnimBoard").Value);
            AddTransformToRecordedList(ikcTraverse.Field <Transform>("ikLeftFootPosition").Value);
            AddTransformToRecordedList(ikcTraverse.Field <Transform>("ikRightFootPosition").Value);
            AddTransformToRecordedList(ikcTraverse.Field <Transform>("ikAnimLeftFootTarget").Value);
            AddTransformToRecordedList(ikcTraverse.Field <Transform>("ikAnimRightFootTarget").Value);
            AddTransformToRecordedList(ikcTraverse.Field <Transform>("ikLeftFootPositionOffset").Value);
            AddTransformToRecordedList(ikcTraverse.Field <Transform>("ikRightFootPositionOffset").Value);

            transformsToBeRecorded.OrderBy(delegate(Transform t) {
                int i = 0;
                while (t.parent != null)
                {
                    i++;
                    t = t.parent;
                }
                return(i);
            });

            this.startTime = 0f;
            this.endTime   = 0f;
        }
示例#4
0
        // Start is called before the first frame update
        void Start()
        {
            if (!premaidRoot)
            {
                // 未指定ならモデルのルートにこのスクリプトがアタッチされているものとする
                premaidRoot = transform;
            }

            if (premaidRoot != null)
            {
                _joints = premaidRoot.GetComponentsInChildren <ModelJoint>();
            }

            // 左腕IKソルバを準備
            leftArmIK               = new ArmIK();
            leftArmIK.isRightSide   = false;
            leftArmIK.shoulderPitch = GetJointById("04");
            leftArmIK.upperArmRoll  = GetJointById("0B");
            leftArmIK.upperArmPitch = GetJointById("0F");
            leftArmIK.lowerArmRoll  = GetJointById("13");
            leftArmIK.handPitch     = GetJointById("17");
            leftArmIK.handTarget    = leftHandTarget;
            leftArmIK.elbowTarget   = leftElbowTarget;
            leftArmIK.Initialize();
            leftElbowTarget = leftArmIK.elbowTarget;  // 自動生成されていたら、controller側に代入
            leftHandTarget  = leftArmIK.handTarget;   // 自動生成されていたら、controller側に代入

            // 右腕IKソルバを準備
            rightArmIK               = new ArmIK();
            rightArmIK.isRightSide   = true;
            rightArmIK.shoulderPitch = GetJointById("02");
            rightArmIK.upperArmRoll  = GetJointById("09");
            rightArmIK.upperArmPitch = GetJointById("0D");
            rightArmIK.lowerArmRoll  = GetJointById("11");
            rightArmIK.handPitch     = GetJointById("15");
            rightArmIK.handTarget    = rightHandTarget;
            rightArmIK.elbowTarget   = rightElbowTarget;
            rightArmIK.Initialize();
            rightElbowTarget = rightArmIK.elbowTarget;    // 自動生成されていたら、controller側に代入
            rightHandTarget  = rightArmIK.handTarget;     // 自動生成されていたら、controller側に代入

            // 頭部IKソルバを準備
            headIK            = new HeadIK();
            headIK.neckYaw    = GetJointById("05");
            headIK.headPitch  = GetJointById("03");
            headIK.headRoll   = GetJointById("07");
            headIK.headTarget = headTarget;
            headIK.Initialize();
            headTarget = headIK.headTarget;         // 自動生成されていたら、controller側に代入

            // 左脚IKソルバを準備
            leftLegIK               = new LegIK();
            leftLegIK.isRightSide   = false;
            leftLegIK.upperLegYaw   = GetJointById("08");
            leftLegIK.upperLegRoll  = GetJointById("0C");
            leftLegIK.upperLegPitch = GetJointById("10");
            leftLegIK.kneePitch     = GetJointById("14");
            leftLegIK.anklePitch    = GetJointById("18");
            leftLegIK.footRoll      = GetJointById("1C");
            leftLegIK.footTarget    = leftFootTarget;
            leftLegIK.Initialize();
            leftFootTarget = leftLegIK.footTarget;

            // 右脚IKソルバを準備
            rightLegIK               = new LegIK();
            rightLegIK.isRightSide   = true;
            rightLegIK.upperLegYaw   = GetJointById("06");
            rightLegIK.upperLegRoll  = GetJointById("0A");
            rightLegIK.upperLegPitch = GetJointById("0E");
            rightLegIK.kneePitch     = GetJointById("12");
            rightLegIK.anklePitch    = GetJointById("16");
            rightLegIK.footRoll      = GetJointById("1A");
            rightLegIK.footTarget    = rightFootTarget;
            rightLegIK.Initialize();
            rightFootTarget = rightLegIK.footTarget;
        }
示例#5
0
		// - Wakeup for solvers.
		// - Require to setup each transforms.
		public bool Prepare()
		{
			_Prefix();

			if( _isPrepared ) {
				return false;
			}

			_isPrepared = true;

			Assert( rootTransform != null );
			if( rootTransform != null ) { // Failsafe.
				internalValues.defaultRootPosition = rootTransform.position;
				internalValues.defaultRootBasis = Matrix3x3.FromColumn( rootTransform.right, rootTransform.up, rootTransform.forward );
				internalValues.defaultRootBasisInv = internalValues.defaultRootBasis.transpose;
				internalValues.defaultRootRotation = rootTransform.rotation;
			}
			
			if( _bones != null ) {
				int boneLength = _bones.Length;
				for( int i = 0; i != boneLength; ++i ) {
					Assert( _bones[i] != null );
					if( _bones[i] != null ) {
						_bones[i].Prepare( this );
					}
				}
				for( int i = 0; i != boneLength; ++i ) {
					if( _bones[i] != null ) {
						_bones[i].PostPrepare();
					}
				}
			}

			boneCaches.Prepare( this );

			if( _effectors != null ) {
				int effectorLength = _effectors.Length;
                for( int i = 0; i != effectorLength; ++i ) {
					Assert( _effectors[i] != null );
					if( _effectors[i] != null ) {
						_effectors[i].Prepare( this );
					}
				}
			}

			if( _limbIK == null || _limbIK.Length != (int)LimbIKLocation.Max ) {
				_limbIK = new LimbIK[(int)LimbIKLocation.Max];
			}

			for( int i = 0; i != (int)LimbIKLocation.Max; ++i ) {
				_limbIK[i] = new LimbIK( this, (LimbIKLocation)i );
			}

			_bodyIK = new BodyIK( this, _limbIK );
			_headIK = new HeadIK( this );

			if( _fingerIK == null || _fingerIK.Length != (int)FingerIKType.Max ) {
				_fingerIK = new FingerIK[(int)FingerIKType.Max];
			}

			for( int i = 0; i != (int)FingerIKType.Max; ++i ) {
				_fingerIK[i] = new FingerIK( this, (FingerIKType)i );
			}

			{
				Bone neckBone = headBones.neck;
				Bone leftShoulder = leftArmBones.shoulder;
				Bone rightShoulder = rightArmBones.shoulder;
				if( leftShoulder != null && leftShoulder.transformIsAlive &&
					rightShoulder != null && rightShoulder.transformIsAlive &&
					neckBone != null && neckBone.transformIsAlive ) {
					if( leftShoulder.transform.parent == neckBone.transform &&
						rightShoulder.transform.parent == neckBone.transform ) {
						_isNeedFixShoulderWorldTransform = true;
					}
				}
			}

			return true;
        }