if (colliderBox.isTouching (col) && col.CompareTag("barrier")) {
score++;
this.GetComponent<Renderer> ().material.color = col.GetComponent<Renderer> ().material.color;
}
if (spriteBox.IsTouching(col) && col.CompareTag("barrier") ) {
Debug.Log (col);
Debug.Log (colliderBox);
SceneManager.LoadScene (mainMenu);
}
当前,在我的代码中,我正在使用onTriggerEnter来检测与名为“ barrier”的对象的碰撞,但是我不得不用3D对象替换2d spriteBox和2d colliderBox,现在isTouching不再是3D对撞机。我找不到简单的替代品。我可以用什么代替它们?
答案 0 :(得分:1)
没有用于3D碰撞的isTouching
函数的等效版本,但您可以自己滚动。当OnTriggerEnter
时,存储集合中涉及的两个对撞机。调用OnTriggerExit
时,请检查所涉及的两个对撞机,如果已经退出集合,请从集合中删除它们。这就是我在this帖子中使用CollisionDetection
脚本所做的事情。
将CollisionDetection
脚本附加到将要碰撞的对象上。
要检查Collider
是否在触摸另一个Collider
,请更改:
if (colliderBox.isTouching (col) && col.CompareTag("barrier")) { }
收件人:
if (CollisionDetection.IsTouching (colliderBox.gameObject, col.gameObject) && col.CompareTag("barrier")) { }
您还可以为CollisionDetection类添加ExtensionMethod:
public static class ExtensionMethod
{
public static bool IsTouching(this Collider collider, Collider otherCollider)
{
return CollisionDetection.IsTouching(collider.gameObject, otherCollider.gameObject);
}
public static bool IsTouching(this GameObject collider, GameObject otherCollider)
{
return CollisionDetection.IsTouching(collider, otherCollider);
}
}
现在,假设if (colliderBox.isTouching (col) && col.CompareTag("barrier"))
是colliderBox
或Collider
类型,您的GameObject
代码应该可以正常工作。
答案 1 :(得分:0)
在与 OnTriggerEnter 方法中的问题长时间斗争之后,我找到了另一种方法
<块引用>collider1.bounds.Intersects(collider2.bounds)
虽然有一种特殊情况,这种方法不起作用,如果 collider2 是一个像盒子一样的空心网格对撞机,并且 collider1 在里面,即使它们没有接触它,它们的交点也会返回 true,所以我建议使用 simple像盒子和球体对撞机这样的对撞机