1

基本上,我想做的是让两个物体(fpscontroller 和一面墙)像平常一样碰撞。但是,一旦脚本运行,它们就不会再发生冲突了。那么,如何制作使两个对象忽略彼此碰撞的脚本呢?我试过查找这个,我得到的是 Physics.IgnoreCollision,但是关于那个的文档让我很困惑。当我尝试将其放入并用我的变量替换它们的变量时,我得到了一堆错误。所以,请帮忙。

4

1 回答 1

1

我这样做的方法是通过层。

在统一中,忽略对象之间的物理碰撞的一种方便方法是将要忽略的对象设置为玩家对象将始终忽略的层。

因此,要进行设置,请想象以下内容:

fpscontroller的图层设置为“播放器”(我创建并命名的图层)。

wall的层最初总是设置为“wall”(我再次创建了一个层)

此外,我创建了一个我称之为“IgnorePlayerCollisions”的图层

现在我去:编辑>项目设置>物理在这里我可以选中将关闭我的播放器IgnorePlayerCollisions层之间的碰撞的框。

现在,在运行时我运行我的脚本,它说:

将墙层更改为“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 中,因为您似乎希望根据特定触发器或其他东西在整个游戏中禁用对象。这实际上取决于您计划如何触发该功能。

让我知道这是否有意义。如果没有,我可以尝试使它更清晰。

祝好运并玩得开心点!

于 2015-10-10T00:01:52.227 回答