using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.TextCore.Text; public class Rotate3DObject : MonoBehaviour { #region Input Actions [SerializeField] private InputActionAsset _actions; public InputActionAsset actions { get => _actions; set => _actions = value; } protected InputAction leftClickPressedInputAction { get; set; } protected InputAction mouseLookInputAction { get; set; } #endregion #region Variables private bool _rotateAllowed; private Camera _camera; [SerializeField] private float _speed; [SerializeField] private bool _inverted; #endregion private void Start() { Cursor.lockState = CursorLockMode.Locked; InitializeInputSystem(); _camera = Camera.main; } private void InitializeInputSystem() { leftClickPressedInputAction = GameManager.Instance.Input.UIAction.RightClick; if (leftClickPressedInputAction != null) { leftClickPressedInputAction.started += OnLeftClickPressed; leftClickPressedInputAction.performed += OnLeftClickPressed; leftClickPressedInputAction.canceled += OnLeftClickPressed; } mouseLookInputAction = GameManager.Instance.Input.UIAction.MouseLook; actions.Enable(); } protected virtual void OnLeftClickPressed(InputAction.CallbackContext context) { if (context.started || context.performed) { _rotateAllowed = true; } else if (context.canceled) _rotateAllowed = false; } protected virtual Vector2 GetMouseLookInput() { if (mouseLookInputAction != null) return mouseLookInputAction.ReadValue(); return Vector2.zero; } private void Update() { if (!_rotateAllowed) return; float MouseDelta = GetMouseLookInput().x; MouseDelta *= _speed * Time.deltaTime; transform.eulerAngles += new Vector3(0, MouseDelta, 0); } }