如何忽略对象之间的碰撞
我写了一个脚本,使用ontriggerenter找到一个炮弹在2D游戏中击中另一艘船的时间。
private void OnTriggerEnter(Collider other) { if (other.tag != "cannonBallWASD" ) { return; } Destroy(other.gameObject); Destroy(gameObject); Debug.Log(other); }
2.使用WASD(ShipWASD)控制的船舶在使用箭头键(ShipArrows)控制的第二艘船上发射炮弹(cannonballWASD)。 此代码位于附加到ShipArrows的脚本上。
3.我有一个单独的代码,使用一个没有网格渲染器(边界)的立方体,它会破坏任何离开边界的炮弹,看起来它们正落入大海。 这是一场双人游戏。
4.这就是问题所在 – 所以边界随船一起移动,它是ShipArrows的一个孩子。 当我发射大炮时,炮弹击中边界而不是舰船对撞机。 当我移除边界时,它应该击中船,但边界是我想要的。
5.边界和船舶都有并且需要是触发器碰撞器。 有没有办法忽略此脚本中的边界,但不能在以下脚本中忽略它。
private void OnTriggerExit(Collider other) { if(other.tag != "cannonBallWASD" && other.tag != "cannonBallArrows") { return; } Destroy(other.gameObject); }
这个脚本使ShipArrows cannonBalls在离开ShipArrows Boundary时通过摧毁它们看起来像是在海中坠落。 (两艘船都这样做。)
要忽略碰撞,请使用Physics.IgnoreCollision
。
还有Physics.IgnoreLayerCollision
,用于忽略图层上的碰撞。
只需将要忽略的所有对象放在一个图层中,然后调用该函数来忽略它们上的图层。
忽略科里森3D :
Physics.IgnoreCollision(yourFirstCollider, yourSecondCollider, true)
要么
Physics.IgnoreLayerCollision(yourFirstLayer, yourOtherLayer, true);
重置/识别Collison 2D :
Physics2D.IgnoreCollision(yourFirstCollider, yourSecondCollider, false);
要么
Physics2D.IgnoreLayerCollision(yourFirstLayer, yourOtherLayer, false)
两个层都不必相同。 您可以忽略来自不同图层的对象的碰撞。 这也可以通过编辑器无代码完成,方法是指定每个GameObject图层,然后进入编辑 – > 项目设置 – > 物理 – >或编辑 – > 项目设置 – > 物理2D,然后配置哪些图层应该与之碰撞从那里开始。
上述就是C#学习教程:如何忽略对象之间的碰撞分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/958111.html