Надеюсь это не рофл пост.
Так будет работать.
[SerializeField] private LayerMask _ground;
[SerializeField] private Transform _groundCheckPoint;
[SerializeField] private float _groundCheckRadius;
[SerializeField] private float speed =3f;
[SerializeField] private int lives = 5;
[SerializeField] private float jumpForce = 15f;
private float _horizontalInput;
private bool isGrounded;
private Rigidbody2D rb;
private SpriteRenderer sprite;
private void Awake()
{
rb = GetComponent<Rigidbody2D>();
sprite = GetComponentInChildren<SpriteRenderer>();
}
private void Update()
{
//Input получать лучше в Update
ProcessedInput();
//Ты сначала выучи c#, потом на unity пиши, правильно не $$, а &&. Это же основы лол.
//GetAxisRaw возращает float, а не bool
if (CheckGround() && Input.GetButtonDown("Jump"))
Jump();
}
private void FixedUpdate()
{
Run();
}
private void ProcessedInput()
{
//Лучше использовать GetAxisRaw, а не просто GetAxis, т.к. Raw возвращает числа -1 0 1, в отличие от GetAxis где числа не целые.
_horizontalInput = Input.GetAxisRaw("Horizontal");
}
private void Run()
{
Vector3 dir = transform.right * _horizontalInput;
//Не MoveTovard, а MoveTowards
transform.position = Vector3.MoveTowards(transform.position, transform.position + dir, speed * Time.deltaTime);
sprite.flipX = dir.x < 0.0f;
}
private void Jump()
{
//Ты где код пишешь? В блокноте? Почему столько ошибок???
rb.AddForce(transform.up * jumpForce, ForceMode2D.Impulse);
}
//И как ты вообще получаешь isGrounded, если ты функцию нигде не вызываешь???
private bool CheckGround()
{
//Используй LayerMask и на то, что у тебя ground поставь нужный LayerMask
var collider = Physics2D.OverlapCircleAll(_groundCheckPoint.position, _groundCheckRadius, _ground);
return isGrounded = collider.Length >= 1;
}
//Чтобы было легче настроить CheckGround
private void OnDrawGizmosSelected()
{
if(_groundCheckPoint == null)
return;
Gizmos.DrawWireSphere(_groundCheckPoint.position, _groundCheckRadius);
}