@Nike23

Как правильно написать синтаксис управления персонажем, похожее на subway surfers?

Захотелось мне сделать игру , где монетка падает вниз и ей надо маневрировать во время полёт и дойти до монетоприёмника для получения плюшки. Суть в том что я не знаю как правильно написать управления персонаж. С горем пополам с пару гайдов я сделал управление но там очень много if я знаю что это не правильно и такого не должно быть в коде и он практически не читаем, но к сожалению пока не знаю как это сделать а гайдов я особо не нашёл как сделать такое управление.

60bd4a0051dd3341777524.jpeg
[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));
    }
  • Вопрос задан
  • 139 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы