我正确使用GetComponents和IgnoreCollision吗?

时间:2015-11-11 20:25:48

标签: unity3d collision-detection

我正在尝试在2D侧面滚轮中获取一个玩家角色,以便在执行短划线操作时忽略阵列中特定对象的碰撞。但我的第一次尝试不起作用。没有错误,它只是不起作用。在冲刺时,角色仍然会与特定物体发生碰撞。

 private Collider2D col;
 public Collider2D[] dashMasks;

 void Awake()
 {
     col = GetComponent<BoxCollider2D>();
     dashMasks = GetComponents<Collider2D>();
 }

 void Update()
 {
     if(dashing)
     {
         foreach(Collider2D mask in dashMasks)
         {
             Physics2D.IgnoreCollision(col, mask);
         }
     }
}

我是否错误地进行了GetComponenets来电,或者我是否错误地执行了IgnoreCollision,或者两者都错了?

2 个答案:

答案 0 :(得分:0)

行。我测试了你的情况,它现在正在工作。 Unity版本是5.1.2f Personal。 Screenshot of the editor. Cube has 'PlayerController', Rigidbody2D, and BoxCollider2D.

这是代码。如果按空格键,则可以传递块精灵。如果不按,当然你不能通过。

public class PlayerController : MonoBehaviour {

float speed = 5;
bool dashing = false;
BoxCollider2D coll;
BoxCollider2D blockColl;

void Awake() {
    coll = this.transform.GetComponent<BoxCollider2D> ();
    blockColl = GameObject.Find ("Block").GetComponent<BoxCollider2D> ();
}

void Update()
{
    dashing = Input.GetKey (KeyCode.Space);
    Physics2D.IgnoreCollision (coll, blockColl, dashing);
}

void FixedUpdate () 
{
    float dirX = Input.GetAxis ("Horizontal");
    float dirY = Input.GetAxis ("Vertical");

    Vector3 movement = new Vector2 (dirX, dirY);

    GetComponent<Rigidbody2D> ().velocity = movement * speed;
}
}

答案 1 :(得分:-1)

我猜你已经在编辑器中设置了dashMasks 所以你不应该再次在这个脚本中设置dashMasks。

private Collider2D col;
public Collider2D[] dashMasks;

void Awake()
{
    col = GetComponent<BoxCollider2D>();
    //dashMasks = GetComponents<Collider2D>(); // delete it.
}

void Update()
{
    if(dashing)
    {
        foreach(Collider2D mask in dashMasks)
        {
            Physics2D.IgnoreCollision(col, mask);
        }
    }

}