Исправление ошибки в скрипте Unity2D

Рейтинг: -2Ответов: 2Опубликовано: 30.01.2023
    using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public KeyCode leftKey;
    public KeyCode rightKey;
    public KeyCode squatKey;
    public KeyCode jumpKey;

    public Animator animator;


    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        animator.SetFloat("Speed", 0);
    }

     void Update() 
    { 
        float moveAxis = Input.GetAxis(moveInputAxis); 

        if (moveAxis != 0) 
        { 
            animator.SetFloat("Speed", Mathf.Abs(moveAxis)); 

            Vector2 newVelocity = rb.velocity; 

            newVelocity.x = moveAxis * speed; 

            rb.velocity = newVelocity; 

            if (moveAxis < 0) 
            { 
                transform.localScale = new Vector3(-1, 1, 1);   //flip character if going left  
            } else if (moveAxis > 0)   //if going right  
            {  
                transform.localScale = new Vector3(1, 1, 1);   //set the local scale to be facing right                                                      //set the local scale to be facing right  

            }  

        } else {   //if no input is detected then set speed to zero and play idle animation  

            animator.SetFloat("Speed", 0);  

        }  

        if (Input.GetKeyDown(jumpKey))
        {
            animator.SetTrigger("Jump");
            rb2d.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
        }
    
    }
}

Ошибки

как их исправить?

Ответы

▲ 0

Ну, наверное, добавить описание этой переменной туда же, где и остальные переменные класса вы объявляете - перед методами:

public class PlayerMovement : MonoBehaviour
{
    ...
    public Rigidbody2D rb;

    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        ...
▲ 0
  1. Ты забыл объявить 3 переменных: переменную rb, которая отвечает за использование Rigidbody2D, переменную speed, отвечающую за скорость твоего героя и переменную jumpForce отвечающую за силу прыжка. Также не пойму зачем тебе переменная rb2d, если у тебя уже есть rb, выполняющая ту же самую роль.
  2. В строке где ты объявил moveAxis написано что он равен moveInputAxis, такая строка в Unity не предусмотрена, вместо этого лучше написать Horizontal, также возьми во внимание что Input.GetAxis принимает строку, а не не существующую переменную.

Добавь эти строки в место где объявляешь переменные:

public float speed;
public float jumpForce;
private Rigidbody2D rb;

Значение Input.GetAxis измени на:

float moveAxis = Input.GetAxis("Horizontal");

В этой строке замени rb2d на rb;

rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);