2017-01-15 9 views
1

Я очень новичок в C#, так что простите меня, если это очевидно.Unity Error: UnityEngine.Component 'не содержит определения для `velocity'

Я выполняю шаги в this tutorial и столкнулся с проблемой на шаге 6. Ошибка дает это: ошибка дает это:

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); 

ответ

4

rigidbody2D используется для быть переменной, унаследованной от компонента, который наследует MonoBehaviour. Теперь он устарел.

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

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

Severity Code Description Project File Line Suppression State Warning CS0108 'RobotController.rigidbody2D' hides inherited member 'Component.rigidbody2D'. Use the new keyword if hiding was intended.

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; 
    } 
} 
+0

Помимо выходя из 'используя UnityEngine, и' используя System.Collections, ', что работает отлично , – TrumpetDude

+1

Я оставил их специально, так как у вас уже есть их в вашем вопросе. Все, что вам нужно сделать, это заменить все в своем классе новым классом. – Programmer