Unity3D中调用脚本时如何忽略两个物体的碰撞?
How To Ignore Collision Between Two Objects On The Call Of A Script In Unity3D?
基本上,我想要做的是让两个对象(fpscontroller 和一堵墙)像正常情况一样发生碰撞。但是,一旦脚本运行,它们就不会再发生冲突。
那么,如何制作使两个对象忽略彼此碰撞的脚本呢?我试过查找它,得到的是 Physics.IgnoreCollision,但相关文档让我感到困惑。当我尝试将其放入并用我的变量替换他们的变量时,我遇到了一堆错误。
所以,请帮忙。
我将采用的方法是通过层。
在 unity 中,忽略对象之间物理碰撞的一种便捷方法是将要忽略的对象设置为玩家对象将始终忽略的层。
因此,要进行设置,请想象以下内容:
fpscontroller的图层设置为"player"(我创建并命名的图层)。
wall的图层最初总是设置为"wall"(我又创建了一个图层)
另外,我创建了一个图层,我称之为"IgnorePlayerCollisions"
现在我去:编辑>项目设置>物理
在这里我可以勾选关闭 player 和 IgnorePlayerCollisions[=53= 之间的碰撞的复选框]层。
现在,在 运行 时间我 运行 我的脚本说:
将墙层更改为 "IgnorePlayerCollisions"。瞧,我的播放器现在忽略了与这一层的所有碰撞。
代码示例:(您不需要所有这些):
// Function to Change a GameObject Layer to the Ignore Layer
public void ChangeGameObjectLayerToIgnore(GameObject go) {
go.layer = [Index of Ignore Layer];
}
// Function to Change "This" GameObjects layer to any other layer
public void ChangeThisGameObjectLayer(int layerIndex) {
this.gameObject.layer = layerIndex;
}
// Change a GameObject layer to another layer
public void ChangeGameObjectLayer(GameObject go, int layerIndex) {
go.layer = layerIndex;
}
怎么样?
将 C# 函数放入脚本并将其附加到您想要的游戏对象。在你的情况下,我可能会把它附加到我的 Player GameObject 上,因为看起来你可能想根据特定的触发器或其他东西在整个游戏中禁用对象。这实际上取决于您打算如何触发该功能。
让我知道这是否有意义。如果没有,我可以尝试让它更清晰。
祝你好运,玩得开心!
基本上,我想要做的是让两个对象(fpscontroller 和一堵墙)像正常情况一样发生碰撞。但是,一旦脚本运行,它们就不会再发生冲突。 那么,如何制作使两个对象忽略彼此碰撞的脚本呢?我试过查找它,得到的是 Physics.IgnoreCollision,但相关文档让我感到困惑。当我尝试将其放入并用我的变量替换他们的变量时,我遇到了一堆错误。 所以,请帮忙。
我将采用的方法是通过层。
在 unity 中,忽略对象之间物理碰撞的一种便捷方法是将要忽略的对象设置为玩家对象将始终忽略的层。
因此,要进行设置,请想象以下内容:
fpscontroller的图层设置为"player"(我创建并命名的图层)。
wall的图层最初总是设置为"wall"(我又创建了一个图层)
另外,我创建了一个图层,我称之为"IgnorePlayerCollisions"
现在我去:编辑>项目设置>物理 在这里我可以勾选关闭 player 和 IgnorePlayerCollisions[=53= 之间的碰撞的复选框]层。
现在,在 运行 时间我 运行 我的脚本说:
将墙层更改为 "IgnorePlayerCollisions"。瞧,我的播放器现在忽略了与这一层的所有碰撞。
代码示例:(您不需要所有这些):
// Function to Change a GameObject Layer to the Ignore Layer
public void ChangeGameObjectLayerToIgnore(GameObject go) {
go.layer = [Index of Ignore Layer];
}
// Function to Change "This" GameObjects layer to any other layer
public void ChangeThisGameObjectLayer(int layerIndex) {
this.gameObject.layer = layerIndex;
}
// Change a GameObject layer to another layer
public void ChangeGameObjectLayer(GameObject go, int layerIndex) {
go.layer = layerIndex;
}
怎么样?
将 C# 函数放入脚本并将其附加到您想要的游戏对象。在你的情况下,我可能会把它附加到我的 Player GameObject 上,因为看起来你可能想根据特定的触发器或其他东西在整个游戏中禁用对象。这实际上取决于您打算如何触发该功能。
让我知道这是否有意义。如果没有,我可以尝试让它更清晰。
祝你好运,玩得开心!