Ошибка Unity: UnityEngine.Component'не содержит определения для' скорости '

Я очень новичок в C#, так что простите, если это очевидно.

Я следую инструкциям в этом руководстве и столкнулся с проблемой на шестом этапе. Ошибка, которую он дает, такова: Ошибка, которую он дает, такова:

UnityEngine.Component' does not contain a definition for `velocity' and no extension method `velocity' of type `UnityEngine.Component' could be found. Are you missing an assembly reference?'

Вот код:

using UnityEngine;
using System.Collections;

public class RobotController : MonoBehaviour {
//This will be our maximum speed as we will always be multiplying by 1
public float maxSpeed = 2f;
//a boolean value to represent whether we are facing left or not
bool facingLeft = true;
//a value to represent our Animator
Animator anim;
// Use this for initialization
void Start () {
  //set anim to our animator
  anim = GetComponent<Animator>();

}

// Update is called once per frame
void FixedUpdate () {

  float move = Input.GetAxis ("Horizontal");//Gives us of one if we are moving via the arrow keys
  //move our Players rigidbody
  rigidbody2D.velocity = new Vector3 (move * maxSpeed, rigidbody2D.velocity.y);
  //set our speed
  anim.SetFloat ("Speed",Mathf.Abs (move));
  //if we are moving left but not facing left flip, and vice versa
  if (move < 0 && !facingLeft) {

   Flip ();
  } else if (move > 0 && facingLeft) {
   Flip ();
  }
}

//flip if needed
void Flip(){
  facingLeft = !facingLeft;
  Vector3 theScale = transform.localScale;
  theScale.x *= -1;
  transform.localScale = theScale;
}
}

Ошибка в строке 23:

rigidbody2D.velocity = new Vector3 (move * maxSpeed, rigidbody2D.velocity.y);

2 ответа

Решение

rigidbody2D Раньше была переменная, унаследованная от компонента, который MonoBehaviour это наследует. Сейчас это устарело.

Теперь вы должны объявить это и инициализировать его GetComponent<Rigidbody>(); так же, как вы сделали для аниматора (anim) переменная в Start() функция. Также, чтобы не путать себя со старой переменной, предлагаю переименовать rigidbody2D к чему-то еще. В приведенном ниже примере кода я переименую его в rigid2D и объявить это.

Если вы не переименуете его, вы можете получить предупреждение:

Код серьезности Описание Предупреждение о состоянии подавления строки файла проекта CS0108 "RobotController.rigidbody2D" скрывает унаследованный элемент "Component.rigidbody2D". Используйте новое ключевое слово, если скрытие было предназначено.

public class RobotController: MonoBehaviour
{
    public float maxSpeed = 2f;
    //a boolean value to represent whether we are facing left or not
    bool facingLeft = true;
    //a value to represent our Animator
    Animator anim;

    //Declare rigid2D
    Rigidbody rigid2D;
    // Use this for initialization
    void Start()
    {
        //set anim to our animator
        anim = GetComponent<Animator>();

        //Initialize rigid2D
        rigid2D = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void FixedUpdate()
    {

        float move = Input.GetAxis("Horizontal");//Gives us of one if we are moving via the arrow keys
                                                 //move our Players rigidbody
        rigid2D.velocity = new Vector3(move * maxSpeed, rigid2D.velocity.y);
        //set our speed
        anim.SetFloat("Speed", Mathf.Abs(move));
        //if we are moving left but not facing left flip, and vice versa
        if (move < 0 && !facingLeft)
        {

            Flip();
        }
        else if (move > 0 && facingLeft)
        {
            Flip();
        }
    }

    //flip if needed
    void Flip()
    {
        facingLeft = !facingLeft;
        Vector3 theScale = transform.localScale;
        theScale.x *= -1;
        transform.localScale = theScale;
    }
}

Вы просто создаете объект твердого тела в функции запуска,

Rigidbody rigidbody = GetComponent<Rigidbody>();

Если вы используете 2D-анимацию, используйте следующий код,

Rigidbody2D rigidbody = GetComponent<Rigidbody2D>();
Другие вопросы по тегам