コード例 #1
0
        public override void OnLateUpdate()
        {
            Vector3 playerUp = m_Common.m_Player.transform.localToWorldMatrix.GetColumn(1);

            transform.position    = new Vector3(0, 0, 0);
            transform.eulerAngles = new Vector3(0, 0, 0);

            m_Common.m_CameraAltitude += Input.GetAxis("RightVertical") * m_Common.m_AltitudeSpeed * Time.fixedDeltaTime;
            m_Common.m_CameraAltitude  = Mathf.Clamp(m_Common.m_CameraAltitude, m_Common.m_MinAltutide, m_Common.m_MaxAltitude);

            float YRotation = Input.GetAxis("RightHorizontal");

            m_Common.m_YAngle += YRotation * m_Common.m_RotationSpeed * Time.fixedDeltaTime;

            float zAngle = FD_Math.GetSignedAngle(Vector3.right, -playerUp, Vector3.forward);

            zAngle += 90;

            transform.Translate(m_Common.m_Player.transform.position, Space.Self);                 //move to player's position
            transform.Rotate(0, 0, zAngle, Space.Self);                                            //align with Y axis of player
            transform.Rotate(playerUp, m_Common.m_YAngle, Space.World);                            //rotate around the y axis
            transform.Translate(0, m_Common.m_CameraAltitude, m_Common.m_MaxDistance, Space.Self); //offset of the camera position
            transform.LookAt(m_Common.m_Player.transform, playerUp);                               //look at the player

            transform.position = m_Common.DetectObstacle(transform.position);                      //check for obstacle
        }
コード例 #2
0
        void SetForwardOrientation()
        {
            Vector3 right, up, forward;

            m_Controller.GetLocalFrame(out right, out up, out forward);
            Vector3 projectedCameraForward = FD_Math.GetProjectedVectorOnPlan(Camera.main.transform.forward, up);
            float   lookAtAngle            = FD_Math.GetSignedAngle(forward, projectedCameraForward.normalized, up);

            transform.Rotate(0, lookAtAngle, 0, Space.Self);
        }
コード例 #3
0
        //Return the angle around the z axis making the player up on the ground.
        public float GetPlayerUpOrientation()
        {
            Vector3 idealDown = transform.position;

            idealDown.z = 0;
            idealDown.Normalize();

            //z axis
            float zAngle = FD_Math.GetSignedAngle(Vector3.right, idealDown, Vector3.forward);

            zAngle += 90;

            return(zAngle);
        }
コード例 #4
0
        void SetUpOrientation()
        {
            Vector3 idealDown = transform.position;

            idealDown.z = 0;
            idealDown.Normalize();

            //z axis
            float zAngle = FD_Math.GetSignedAngle(Vector3.right, idealDown, Vector3.forward);

            zAngle += 90;

            Vector3 eulerAngles = new Vector3(0, 0, zAngle);

            transform.eulerAngles = eulerAngles;
        }
コード例 #5
0
        public void SetCompoundTransform()
        {
            Vector3 ideal = m_BasePosition;

            ideal.z = 0;
            ideal.Normalize();
            float zAngle = FD_Math.GetSignedAngle(Vector3.right, ideal, Vector3.forward) + 90;
            float div    = zAngle / m_SlicePlaneAngle;
            int   iDiv   = (int)Math.Round(div);

            zAngle = m_SlicePlaneAngle * iDiv;

            foreach (BlockContainer container in m_Blocks)
            {
                SetBlockTransform(container, zAngle);
            }
        }
コード例 #6
0
        public override void OnFixedUpdate()
        {
            transform.position    = new Vector3(0, 0, 0);
            transform.eulerAngles = new Vector3(0, 0, 0);

            transform.Translate(m_Position, Space.World);
            transform.Rotate(m_Orientation, Space.World);

            float currentSpeed = m_Speed;

            if (Input.GetAxis("RT") > 0)
            {
                currentSpeed = m_FastSpeed;
            }

            Vector3 up      = transform.localToWorldMatrix.GetColumn(1);
            Vector3 forward = transform.localToWorldMatrix.GetColumn(2);

            {   //rotation around forward axis
                float zAngle = 0;
                if (Input.GetButton("LB"))
                {
                    zAngle += m_RotationSpeed * Time.fixedDeltaTime;
                }
                else if (Input.GetButton("RB"))
                {
                    zAngle -= m_RotationSpeed * Time.fixedDeltaTime;
                }

                transform.Rotate(0, 0, zAngle, Space.World);
            }

            {   //translation
                Vector3 offset = Vector3.zero;
                if (Input.GetButton("X"))
                {
                    offset += up * currentSpeed * Time.fixedDeltaTime;
                }
                if (Input.GetButton("B"))
                {
                    offset -= up * currentSpeed * Time.fixedDeltaTime;
                }

                Vector3 cameraForward = Camera.main.transform.localToWorldMatrix.GetColumn(2);
                Vector3 cameraRight   = Camera.main.transform.localToWorldMatrix.GetColumn(0);
                float   hAxis         = Input.GetAxis("Horizontal");
                float   vAxis         = Input.GetAxis("Vertical");
                offset += cameraForward * vAxis * currentSpeed * Time.fixedDeltaTime;
                offset += cameraRight * hAxis * currentSpeed * Time.fixedDeltaTime;

                m_Controller.Move(offset);

                if (hAxis != 0 || vAxis != 0)
                {
                    //rotation around up axis
                    Vector3 projectedCameraForward = FD_Math.GetProjectedVectorOnPlan(Camera.main.transform.forward, up);
                    float   lookAtAngle            = FD_Math.GetSignedAngle(forward, projectedCameraForward.normalized, up);
                    transform.Rotate(0, lookAtAngle, 0, Space.Self);
                }
            }

            //save position
            m_Position    = transform.position;
            m_Orientation = transform.eulerAngles;

            if (Input.GetButtonDown("Y"))
            {
                m_Machine.ChangeState(PlayerStateId.Freefall);
            }
        }