Захотелось мне сделать игру , где монетка падает вниз и ей надо маневрировать во время полёт и дойти до монетоприёмника для получения плюшки. Суть в том что я не знаю как правильно написать управления персонаж. С горем пополам с пару гайдов я сделал управление но там очень много if я знаю что это не правильно и такого не должно быть в коде и он практически не читаем, но к сожалению пока не знаю как это сделать а гайдов я особо не нашёл как сделать такое управление.
[SerializeField] private GameObject _palyer;
//тут я сделал 3 таргета для перемещения монетки по таргетам
[SerializeField] private Transform _left;
[SerializeField] private Transform _center;
[SerializeField] private Transform _right;
private int _state = 1; // Сделал int для обозначения на каком таргете находиться плеер 0-left 1-center 2-right
// выравниваю по центру плейра в коде потому что не получаеться в unity я незаю почему всё перепробывл и пресоздовал и градус поворота проверял не получалось поставить персонажа на центр
private void Awake()
{
_palyer.transform.position = _center.transform.position;
}
public void OnBeginDrag(PointerEventData eventData)
{
if(Mathf.Abs(eventData.delta.x)> Mathf.Abs(eventData.delta.y))
{
if(eventData.delta.x > 0)
{
if (_state == 1)
{
_state = 2;
Cheker();
}
if (_state == 0)
{
_state = 1;
Cheker();
}
}
else
{
if(_state == 1)
{
_state = 0;
Cheker();
}
else if(_state == 2)
{
_state = 1;
Cheker();
}
}
}
}
public void OnDrag(PointerEventData eventData)
{
}
private void FixedUpdate()
{
Cheker();
}
private void Cheker()
{
if (_state == 0 )
{
Left();
}
else if (_state == 1)
{
Center();
}
else if (_state == 2)
{
Right();
}
}
private void Left()
{
_palyer.transform.position = Vector2.Lerp(_palyer.transform.position, _left.transform.position, (3 * Time.deltaTime));
}
private void Center()
{
_palyer.transform.position = Vector2.Lerp(_palyer.transform.position, _center.transform.position, (3 * Time.deltaTime));
}
private void Right()
{
_palyer.transform.position = Vector2.Lerp(_palyer.transform.position, _right.transform.position, (3 * Time.deltaTime));
}