воскресенье, 1 февраля 2015 г.

Unity 3D: Управление персонажем мышкой, вид с верху

Решаем задачу:

- Вид с верху;
- Персонаж (спрайт) должен перемещаться к месту клика мышью;
- Персонаж должен поворачиваться по направлению движения.

Решение:

using UnityEngine;

public class Player : MonoBehaviour
{

    private Vector3 _positionMove;
    private float _speed = 1f;

    private void Start()
    {
        _positionMove = transform.position;
    }

    private void Update()
    {
        UpdateInput();
        UpdateMove();
    }

    private void UpdateInput()
    {
        if (Input.GetMouseButtonDown(0))
        {
            _positionMove =
                UnityEngine.Camera.main.ScreenToWorldPoint(Input.mousePosition);
            _positionMove.z = 0;
        }
    }

    private void UpdateMove()
    {
        float moveDelta = (_positionMove - transform.position).magnitude;
        if (moveDelta <= _speed * Time.deltaTime)
        {
            transform.position = _positionMove;
            return;
        }
        Vector3 moveDir = _positionMove - transform.position;
        //
        float angle = Mathf.Atan2(moveDir.y, moveDir.x) * Mathf.Rad2Deg - 90;
        transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));
        //
        moveDir.Normalize();
        transform.position += moveDir * _speed * Time.deltaTime;
    }
}

1 комментарий: