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](https://habrastorage.org/webt/67/85/a5/6785a5b77231a289035629.png)
anim.SetTrigger("takeOf"); я не придумал зачем он нужен так что и не использую