You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.5 KiB
C#

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