【发布时间】:2020-09-12 23:03:01
【问题描述】:
我搜索了很多,但找不到任何答案。我的问题:我实例化了 Prefab 的几个 Gameobjects,每个包含两个子对象:一个障碍物和一个 scorezone。当玩家碰到障碍物时,我想破坏 scorezone(仅那个特定实例)。所以在运行时我的层次结构看起来像这样:
- -ObjectPrefab(克隆)
- ---计分区
- ---障碍
- -ObjectPrefab(克隆)
- ---计分区
- ---障碍
- ...
所以我需要找到一个子游戏对象(不是变换)然后将其销毁。我尝试了几个代码,但没有一个有效。这是我尝试过的三种替代方法的代码,但都没有奏效。:
private void OnCollisionEnter2D(Collision2D collision) {
if (collision.gameObject.tag == "obstacle") {
备选方案 1:
Destroy(GameObject.FindWithTag("scorezone"));
备选方案 1 非常接近,但它破坏了所有实例化对象的所有得分区。
备选方案 2:
Destroy(collision.gameObject.transform.parent.gameObject.FindWithTag("scorezone"));
备选方案 2 听起来合乎逻辑,但我收到错误消息“转换不包含“FindWithTag”的定义。
备选方案 3:
foreach (Transform child in collision.gameObject.transform)
{
if (child.tag == "scorezone")
{
Destroy(child.gameObject);
}
}
}
替代方案 3 没有给出错误,但当玩家撞到障碍物时实际上什么都不做。
非常感谢一些帮助,在此先感谢!
【问题讨论】:
-
或者遍历对撞机游戏对象上的孩子
标签: unity3d parent-child collision-detection destroy