using CnControls; using UnityEngine; namespace CustomJoystick { public class FourWayController : MonoBehaviour { private Vector3[] directionalVectors = { Vector3.forward, Vector3.back, Vector3.right, Vector3.left }; private Transform _mainCameraTransform; private void Awake() { _mainCameraTransform = Camera.main.transform; } private void Update() { var movementVector = new Vector3(CnInputManager.GetAxis("Horizontal"), 0f, CnInputManager.GetAxis("Vertical")); if (movementVector.sqrMagnitude < 0.00001f) return; // Clamping Vector3 closestDirectionVector = directionalVectors[0]; float closestDot = Vector3.Dot(movementVector, closestDirectionVector); for (int i = 1; i < directionalVectors.Length; i++) { float dot = Vector3.Dot(movementVector, directionalVectors[i]); if (dot < closestDot) { closestDirectionVector = directionalVectors[i]; closestDot = dot; } } // closestDirectionVector is what we need var transformedDirection = _mainCameraTransform.InverseTransformDirection(closestDirectionVector); transformedDirection.y = 0f; transformedDirection.Normalize(); transform.position += transformedDirection * Time.deltaTime; } } }