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 }
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); }
//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); }
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; }
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); } }
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); } }