C# 我可以在一个特定的位置摧毁一个统一的克隆游戏对象吗?

C# 我可以在一个特定的位置摧毁一个统一的克隆游戏对象吗?,c#,unity3d,C#,Unity3d,我正在尝试在Unity中制作一个2d雷霆版本,其中地形是通过在游戏对象预制的克隆中繁殖而生成的。我想知道是否有任何方法可以在鼠标点击时销毁特定的游戏对象 是添加碰撞器和此脚本: void OnMouseDown(){ Destroy(this.gameObject); } 这将销毁您单击它所连接到的任何对象,只要该对象具有碰撞器是添加碰撞器并执行以下脚本: void OnMouseDown(){ Destroy(this.gameObject); } 这将销毁您单击它所连接的任何对象,只要它

我正在尝试在Unity中制作一个2d雷霆版本,其中地形是通过在游戏对象预制的克隆中繁殖而生成的。我想知道是否有任何方法可以在鼠标点击时销毁特定的游戏对象

是添加碰撞器和此脚本:

void OnMouseDown(){
Destroy(this.gameObject);
}

这将销毁您单击它所连接到的任何对象,只要该对象具有碰撞器

是添加碰撞器并执行以下脚本:

void OnMouseDown(){
Destroy(this.gameObject);
}

这将销毁您单击它所连接的任何对象,只要它有一个碰撞器,您可以使用OnMouseDown。在它里面,你必须使用Destroy安全地删除游戏对象(免费资源),并使用SetActive(false)使对象“不可见”且玩家无法使用,因为Destroy()不能保证立即生效

void OnMouseDown(){
this.gameObject.SetActive(false);
Destroy(this.gameObject);
}
或者,您可以使用raycast,但核心代码是相同的。两种解决方案都要求对象具有碰撞器


您可以使用OnMouseDown。在它里面,你必须使用Destroy安全地删除游戏对象(免费资源),并使用SetActive(false)使对象“不可见”且玩家无法使用,因为Destroy()不能保证立即生效

void OnMouseDown(){
this.gameObject.SetActive(false);
Destroy(this.gameObject);
}
或者,您可以使用raycast,但核心代码是相同的。两种解决方案都要求对象具有碰撞器


如果您在2D项目中使用EventSystem, 考虑把这个脚本附加到你的预制件上。

class Destroyable : MonoBehaviour, IPointerClickHandler {
    public void OnPointerClick(PointerEventData eventData)
    {
        Destroy(gameObject);
    }
}

如果在2D项目中使用EventSystem, 考虑把这个脚本附加到你的预制件上。

class Destroyable : MonoBehaviour, IPointerClickHandler {
    public void OnPointerClick(PointerEventData eventData)
    {
        Destroy(gameObject);
    }
}

一般来说,这些天你绝对应该使用“EventSystem”方法。一开始看起来比较复杂,但从长远来看要容易得多。“OnMouseDown”等基本上是不推荐的。一般来说,现在你肯定应该使用“EventSystem”方法。一开始看起来比较复杂,但从长远来看要容易得多。“OnMouseDown”等基本上是不推荐的。FWIW,实际上只使用Destroy是可以的。它会在下一帧开始时破坏它。一般来说,现在你肯定应该使用“EventSystem”方法。一开始看起来比较复杂,但从长远来看要容易得多。“OnMouseDown”等基本上是不推荐的。@Fattie我遇到的一种情况是,实例化预置并在触动触发器时销毁并没有像预期的那样与销毁一起工作。我可以在编辑器中访问“已销毁”对象的信息(虽然几乎持续5秒钟,但足以看到该对象)。EventSystem方法看起来更干净tho.FWIW,实际上只需使用Destroy就可以了。它会在下一帧开始时破坏它。一般来说,现在你肯定应该使用“EventSystem”方法。一开始看起来比较复杂,但从长远来看要容易得多。“OnMouseDown”等基本上是不推荐的。@Fattie我遇到的一种情况是,实例化预置并在触动触发器时销毁并没有像预期的那样与销毁一起工作。我可以在编辑器中访问“已销毁”对象的信息(虽然几乎持续5秒钟,但足以看到该对象)。EventSystem方法似乎更干净。这是方法:)这是方法:)