我正在尝试在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
,或者两者都错了?
答案 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);
}
}
}