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来检测与一个名为“屏障”的对象的碰撞,但是我不得不用3D对象替换我的2d spriteBox和2d colliderBox,而现在isTouching不再是3D对撞机的属性。我找不到简单的替代品。我能用什么替换它们呢?
发布于 2018-11-23 22:02:09
对于3D碰撞,没有isTouching函数的等效版本,但您可以自己滚动。当OnTriggerEnter时,存储包含在集合中的两个对撞机。当调用OnTriggerExit时,检查所涉及的两个对撞机,如果已经退出集合,则将它们从集合中删除。这就是我在this post中使用CollisionDetection脚本所做的工作。
将CollisionDetection脚本附加到将发生冲突的对象。
若要检查Collider是否正在接触另一个Collider,请更改:
if (colliderBox.isTouching (col) && col.CompareTag("barrier")) { }至:
if (CollisionDetection.IsTouching (colliderBox.gameObject, col.gameObject) && col.CompareTag("barrier")) { }还可以为ExtensionMethod类添加CollisionDetection:
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"))是Collider或GameObject的一种类型,那么您的Collider代码应该可以不受更改地工作。
发布于 2021-06-05 09:54:55
在与OnTriggerEnter方法中的一个问题进行了长期的斗争之后,我找到了另一种方法
Collider1.bounds.Intersects(对撞机2.界)
虽然有一个特殊的情况,这种方法不能工作,如果collider2是一个空心网格对撞机像一个盒子和collider1在里面,即使他们没有接触它将返回对他们的交集,所以我建议使用简单的对撞机,如盒和球对撞机。
https://stackoverflow.com/questions/53453014
复制相似问题