Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Unity中检测碰撞并销毁游戏对象_C#_Unity3d - Fatal编程技术网

C# 在Unity中检测碰撞并销毁游戏对象

C# 在Unity中检测碰撞并销毁游戏对象,c#,unity3d,C#,Unity3d,所以我尝试在Unity中创建一个2D游戏,游戏对象在撞击墙壁时会被摧毁。所以我决定使用isTrigger函数并将脚本添加到每一面墙中。然而,我不知道为什么游戏对象没有被摧毁。我尝试将墙和游戏对象的碰撞类型设置为“离散”和“连续”,并将静态刚体添加到墙中,以查看这是否有帮助,甚至尝试更改墙的碰撞体的大小 下面是wallscript的代码 public class wallScript : MonoBehaviour { // Use this for initialization void St

所以我尝试在Unity中创建一个2D游戏,游戏对象在撞击墙壁时会被摧毁。所以我决定使用isTrigger函数并将脚本添加到每一面墙中。然而,我不知道为什么游戏对象没有被摧毁。我尝试将墙和游戏对象的碰撞类型设置为“离散”和“连续”,并将静态刚体添加到墙中,以查看这是否有帮助,甚至尝试更改墙的碰撞体的大小

下面是wallscript的代码

public class wallScript : MonoBehaviour {

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {

}


public void OnTrigger2D(Collider2D other)
{
    if (other.tag == "player01")
    {
        Destroy(other.gameObject);
    }

}}

p、 即使我删除了条件语句Destroy()仍然不起作用

您应该使用
void-oncollisioninter2d(Collision2D-other){…}
而不是
void-OnTrigger2D(collisted-other)

然后取消选中对象碰撞器上的“是否触发”复选框。

要解决您面临的问题,请首先选择场景中的墙精灵,向下滚动到碰撞器,并确保选中了“是否触发”

除此之外,只需检查您在代码中键入的标记是否与您试图销毁的播放器匹配。记住,它是区分大小写的


之后,代码应该可以正常运行。

谢谢你,你的方法对我很有效!但我不明白为什么isTrigger2D不起作用,因为触发器是:当对象彼此相交时(一个进入另一个);碰撞是:当对象发生接触时(就像它们彼此接触,但不相交)。如果我的回答对您有帮助,请将其标记为解决方案。对不起,我不熟悉堆栈溢出;但如果我将物体标记为istrigger,这不意味着它们彼此相交,所以应该销毁它们吗?istrigger可以用于区域。如果玩家越过边界(或进入)该区域,则可以运行任何脚本。没有必要使用对撞机。如果你不亲自销毁玩家和区域,那么玩家和区域都不会被销毁。我确实销毁了,但我的代码由于某种原因仍然无法工作,OnCollisionInter2d工作正常