Страница 1 из 1

TopDown 2D управление персонажем

СообщениеДобавлено: 07 окт 2021, 17:46
MrDmitry
Как сделать правильное управление персонажем с видом сверху(2D)?

Хочу сделать что то типо того

https://www.youtube.com/watch?v=X36-jM- ... 0%9F%8E%AE

Сейчас персонаж вертится за мышкой.

Синтаксис:
Используется csharp
public class MouseController : MonoBehaviour
{
    private Vector2 Direction;
    private Rigidbody2D _rb;

    void Start()
    {
        _rb = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        Direction = Camera.main.ScreenToWorldPoint(Input.mousePosition);
    }

    private void FixedUpdate()
    {
        Vector2 LookDir = Direction - _rb.position;
        float angle = Mathf.Atan2(LookDir.y, LookDir.x) * Mathf.Rad2Deg - 90f;
        _rb.rotation = angle;
    }
}


Но вот как сделать правильно перемещение, я не совсем понимаю. Нужно чтоб персонаж двигался в сторону направления мыши, при нажатии клавиши вперед(W) и соответственно "Стрейфил" при нажатии A или D и шел назад от мыши при нажатии S. Сейчас же он просто ходит по "Направляющим"


Синтаксис:
Используется csharp
public class KeyboardController : MonoBehaviour
{
    [SerializeField]
    private float Speed = 5f;
    private Vector2 Movement;
    private Rigidbody2D _rb;

    void Start()
    {
        _rb = GetComponent<Rigidbody2D>();
    }

    private void Update()
    {
        Movement.x = Input.GetAxisRaw("Horizontal");
        Movement.y = Input.GetAxisRaw("Vertical");
    }

    private void FixedUpdate()
    {
        _rb.velocity = Movement * Speed;
    }
}

Re: TopDown 2D управление персонажем

СообщениеДобавлено: 07 окт 2021, 19:53
1max1
Нужно чтоб персонаж двигался в сторону направления мыши, при нажатии клавиши вперед(W) и соответственно "Стрейфил" при нажатии A или D и шел назад от мыши при нажатии S.

Это очень неудобно, но коль надо, тогда смотри в сторону https://docs.unity3d.com/ScriptReferenc ... ction.html

Re: TopDown 2D управление персонажем

СообщениеДобавлено: 08 окт 2021, 17:02
MrDmitry
Синтаксис:
Используется csharp
private void FixedUpdate()
    {
        transform.TransformDirection(Movement);
    }


На движение это не повлияло (

Re: TopDown 2D управление персонажем

СообщениеДобавлено: 08 окт 2021, 17:43
Alkos26Rus
MrDmitry писал(а):
Синтаксис:
Используется csharp
private void FixedUpdate()
    {
        transform.TransformDirection(Movement);
    }


На движение это не повлияло (

Синтаксис:
Используется csharp
_rb.velocity = transform.TransformDirection(Movement) * Speed;