Top.Mail.Ru
Ответы

Unity как сделать поворот персонажа в сторону движения через джойстик

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class MobileController : MonoBehaviour,IDragHandler,IPointerUpHandler,IPointerDownHandler
{
private Image joystickBG;
[SerializeField]
private Image joystick;
private Vector2 inputVector;// полученные координаты джойстика

private void Start()
{
joystickBG = GetComponent();
joystick = transform.GetChild(0).GetComponent();
}

public virtual void OnPointerDown(PointerEventData ped)
{
OnDrag(ped);
}
public virtual void OnPointerUp(PointerEventData ped)
{
inputVector = Vector2.zero;
joystick.rectTransform.anchoredPosition = Vector2.zero;
}
public virtual void OnDrag(PointerEventData ped)
{
Vector2 pos;
if(RectTransformUtility.ScreenPointToLocalPointInRectangle(joystickBG.rectTransform,ped.position,ped.pressEventCamera, out pos))
{
pos.x = (pos.x / joystickBG.rectTransform.sizeDelta.x);
pos.y = (pos.y / joystickBG.rectTransform.sizeDelta.x);

inputVector = new Vector2(pos.x * 2 - 1, pos.y * 2 - 1);
inputVector = (inputVector.magnitude > 1.0f) ? inputVector.normalized : inputVector;

joystick.rectTransform.anchoredPosition = new Vector2(inputVector.x*(joystickBG.rectTransform.sizeDelta.x/2), inputVector.y * (joystickBG.rectTransform.sizeDelta.y / 2));

}
}

public float Horizontal()
{
if (inputVector.x != 0) return inputVector.x;
else return Input.GetAxis("Horizontal");
}

public float Vertical()
{
if (inputVector.y != 0) return inputVector.y;
else return Input.GetAxis("Vertical");
}
}

По дате
По рейтингу
Аватар пользователя
Профи

Вот так !

Vector3 moveVector = (Vector3.up * joystick.Horizontal + Vector3.left * joystick.Vertical);
if(joystick.Horizontal != 0 || joystick.Vertical != 0)
{
transform.rotation = Quaternion.LookRotation(Vector3.forward, moveVector);
}

Аватар пользователя
Профи
5лет

Привет. Тут очень мало экспертов Unity. Так что рекомендую тебе зайти на любой форум по этой теме, например на этот, он официальный, правда на английском всё: https://forum.unity.com
Ты же знаешь английский? Если нет - переведи страницу.
Удачи.