Задать вопрос
  • Баг в игре на Unity, как исправить?

    @DrRen7
    private void Start()
    {
    anim = GetComponent();
    rb = GetComponent();
    }

    у GetComponent не указан какой компонент нужно получить
    как должно быть
    anim = GetComponent<Animator>();
    https://docs.unity3d.com/ru/current/ScriptReferenc...
    В аниматоре есть триггер takeOf но ресета триггера нет, так что он всегда будет срабатывать после первого выполнения
    чучуть поправил скрипт
    using UnityEngine;
    
    public class PlayerController : MonoBehaviour
    {
        private Rigidbody2D _rb2d;
        [Header("MovemengSetting")]
        [SerializeField] private float _speed=4f;
        [SerializeField] private float _jumpPower = 3f;
        private float _inputX;
        private bool _isGrounded;
        [Header("GroundSetting")]
        [SerializeField] Transform _feetPos;
        [SerializeField] float _checkRad;
        [SerializeField] LayerMask _groundMask;
    
        private Animator _animator;
        private SpriteRenderer _spRend;
        private void Start()
        {
            _rb2d = GetComponent<Rigidbody2D>();
            _animator = GetComponent<Animator>();
            _spRend = GetComponent<SpriteRenderer>();
        }
        private void Update()
        {
            InputRead();
            PlayerFlip();
            AnimatorUpdate();
        }
    
        private void AnimatorUpdate()
        {
            _animator.SetBool("isRunning",_inputX!=0);
            _animator.SetBool("isJumping", _isGrounded);
        }
    
        private void InputRead()
        {
            _inputX = Input.GetAxis("Horizontal");
            if (Input.GetKeyDown(KeyCode.Space)) TryJump();
        }
    
        private void TryJump()
        {
            if (_isGrounded) _rb2d.linearVelocityY=_jumpPower;
        }
    
        void PlayerFlip()
        {
            _spRend.flipX = _inputX < 0;
        }
        private void FixedUpdate()
        {
            _isGrounded=IsGround();
            Movement();
        }
        bool IsGround() => Physics2D.OverlapCircle(_feetPos.position, _checkRad, _groundMask);
        void Movement()
        {
            _rb2d.linearVelocityX = _inputX * _speed;
        }
    #if UNITY_EDITOR
        private void OnDrawGizmos()
        {
            Gizmos.color = Color.red;
            Gizmos.DrawSphere(_feetPos.position, _checkRad);
        }
    #endif
    }

    настройки Rb на всякий случай
    6785a5b77231a289035629.png
    anim.SetTrigger("takeOf"); я не придумал зачем он нужен так что и не использую
    Ответ написан
    2 комментария