Podstawowy ruch gracza w Unity

W Unity mamy do czynienia z dwoma* podstawowymi pętlami, Update( której częstotliwość zmienia się zależnie od mocy komputera i złożoności programu) i FixedUpdate, która wywołuje się w stałych odtępach czasu, domyślnie 50 razy na sekundę.

Aby zapewnić poprawne działanie gry na każdym urządzeniu, należy rozgraniczyć wywołania poszczególnych mechanizmów gry.

Sprawdzanie inputu użytkownika może przebiegać w Update, ale już wykonanie ruchu powinno odbywać się w FixedUpdate, aby na każdym urządzeniu ruch wyglądał podobnie.

Download Unity package: Player basic move and jump

Przykład: Podstawowy ruch w Unity z użyciem fizyki

using UnityEngine;
using static UnityEngine.Rendering.DebugUI;

public class PlayerMove : MonoBehaviour
{
    Rigidbody2D _rb;
    readonly float _speed = 5f;
    float _dirx;
    int _lastDir = 0;

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

    void Update()
    {
        _dirx = Input.GetAxisRaw("Horizontal");
        Rotate();
    }

    void FixedUpdate()
    {
        Move();
    }

    void Move()
    {
        _rb.linearVelocity = new(_dirx * _speed, _rb.linearVelocity.y);
    }

    void Rotate()
    {
        if (Mathf.Abs(_dirx) > 0.2f)
        {   
            if(_lastDir != Mathf.RoundToInt(_dirx))
            {
                transform.localScale = new(Mathf.Sign(_dirx), 1f, 1f);
                _lastDir = Mathf.RoundToInt(_dirx);
            }
        }
    }
}

Podstawowy skok z użyciem fizyki

using UnityEngine;

public class PlayerJump : MonoBehaviour
{
    Rigidbody2D _rb;
    readonly float _jumpForce = 12f;
    bool _canJump;

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

    void Update()
    {
        if (Input.GetButtonDown("Jump")) _canJump = true;
    }

    void FixedUpdate()
    {
        Jump();
    }

    void Jump()
    {
        if (_canJump)
        {
            _rb.linearVelocity += Vector2.up * _jumpForce;
            _canJump = false;
        }
    }
}

Podobne wpisy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *