2017-09-01 42 views
0

所以我在Unity 2D中製作了一個Crossy Road克隆,並且在第34行發現了一個錯誤。
我不確定我錯過了什麼,但是我需要另一個視角。 具體而言,我對這個說法得到一個錯誤:Unity2D Vector2不起作用

if (transform.position != new Vector2(curPosition.x, transform.position.y) + nextDir) 

,一切都標記爲紅色。

public class PlayerController : MonoBehaviour 
{ 
    public Vector2 nextDir; 
    public float jumpForce = 100; 
    public float speed = 5; 
    public float speedRot = 100; 
    public float rotationOffset; 
    Rigidbody rb; 
    public Vector2 curPosition; 

    void Start() 
    { 
     rb = GetComponent<Rigidbody>(); 
     curPosition = transform.position; 
    } 

    void Update() 
    { 
     if (transform.position != new Vector2(curPosition.x, transform.position.y) + nextDir) 
     { 
      transform.position = Vector2.MoveTowards(transform.position, new Vector2(curPosition.x, transform.position.y) + nextDir, speed * Time.deltaTime); 
     } 
     else 
     { 
      nextDir = Vector2.zero; 
      curPosition = transform.position; 
      curPosition.x = Mathf.Round(curPosition.x); 
      curPosition.y = Mathf.Round(curPosition.y); 
      if (Input.GetAxisRaw("Horizontal") != 0) 
      { 
       nextDir.x = -Input.GetAxisRaw("Horizontal"); 
       Move(); 
      } 
      else if (Input.GetAxisRaw("Vertical") != 0) 
      { 
       nextDir.y = Input.GetAxisRaw("Vertical"); 
       Move(); 
      } 
     } 
    } 

    void Move() 
    { 
     rb.AddForce(0, jumpForce, 0); 
    } 
} 
+0

複製並粘貼您收到的錯誤。 –

+0

@ m.rogalski「Character」對象沒有附加「rigidbody」 –

+0

在類的頂部添加這個[[RequireComponent(typeof(Rigidbody2D))]''。像這樣:'[RequireComponent(typeof(Rigidbody2D))] public class ...' –

回答

0

第一個錯誤(約合缺乏Rigidbody2D組件)可以通過在PlayerController的頂部添加RequireComponent屬性來解決:

[RequireComponent(typeof(Rigidbody2D)] 
public class PlayerController : MonoBehaviour 
{ 
    // rest of your code 

而且你想用3軸的比較對象一個與2軸

void Update() 
    { 
     // here you're trying to compare Vector3 (transform.position) 
     // to Vector2, (3 axis with 2 axis) 
     //if (transform.position != new Vector2(curPosition.x, transform.position.y) + nextDir) 
     // change it to this 
     Vector2 cmp = new Vector2(curPosition.x, transform.position.y) + nextDir; 
     if(cmp[0] != transform.position[0] || cmp[1] != transform.position[1]) 
     { 
      transform.position = Vector2.MoveTowards(transform.position, new Vector2(curPosition.x, transform.position.y) + nextDir, speed * Time.deltaTime); 
     } 
     // rest of the update's body 
    } 

    // rest of your code ... 
}