using UnityEngine; public class RotateByMouseInput : MonoBehaviour { public enum XSpace { self, world } public enum YSpace { self, world } public bool useX; public XSpace xSpace; public Vector3 xVector; public bool useY; public YSpace ySpace; public Vector3 yVector; [Header("Control")] public bool needControl; public bool needAlive; public bool freezeUnusedAngles; private HasControl hasControl; private PlayerDeath death; private float m = 1f; private void Start() { if (needControl) { hasControl = base.transform.root.GetComponent(); } if (needAlive) { death = base.transform.root.GetComponent(); } } private void LateUpdate() { if (needControl && !hasControl.hasControl) { return; } if (needAlive) { m = Mathf.Clamp(death.muscleFunction * 2f, 0f, 1f); if (death.dead) { return; } } if (useX) { Vector3 vector = xVector; if (xSpace == XSpace.self) { vector = base.transform.TransformDirection(vector); } base.transform.Rotate(vector * Input.GetAxis("Mouse X") * m * 0.8f, Space.World); } if (useY) { Vector3 vector2 = yVector; if (ySpace == YSpace.self) { vector2 = base.transform.TransformDirection(vector2); } base.transform.Rotate(vector2 * Input.GetAxis("Mouse Y") * m * 0.8f, Space.World); } if (!freezeUnusedAngles) { return; } if (useY) { if (yVector.x == 0f) { base.transform.localRotation = Quaternion.Euler(0f, base.transform.localEulerAngles.y, base.transform.localEulerAngles.z); } if (yVector.y == 0f) { base.transform.localRotation = Quaternion.Euler(base.transform.localEulerAngles.x, 0f, base.transform.localEulerAngles.z); } if (yVector.z == 0f) { base.transform.localRotation = Quaternion.Euler(base.transform.localEulerAngles.x, base.transform.localEulerAngles.y, 0f); } } if (useX) { if (xVector.x == 0f) { base.transform.localRotation = Quaternion.Euler(0f, base.transform.localEulerAngles.y, base.transform.localEulerAngles.z); } if (xVector.y == 0f) { base.transform.localRotation = Quaternion.Euler(base.transform.localEulerAngles.x, 0f, base.transform.localEulerAngles.z); } if (xVector.z == 0f) { base.transform.localRotation = Quaternion.Euler(base.transform.localEulerAngles.x, base.transform.localEulerAngles.y, 0f); } } } }