如何在Unity中换出游戏对象的子代?

问题描述 投票:1回答:2

我希望我的玩家拿起一个枪械预制件,该枪械是一个掉落的物品,然后将旧枪换成新枪。当前结构如下:enter image description here

所以想法是我的玩家在地面上捡起预制件:enter image description here

这是我尝试过的。我的想法是将一个孩子实例化为玩家,然后以某种方式移除“枪”孩子并将新枪放置在相同位置。着火点已经是我新的预制件的孩子了。所以我只需要交换两者。以下脚本将添加到地面上。

public class WeaponPickUp : MonoBehaviour
{

    public GameObject launcher;

    // Start is called before the first frame update
    void Start()
    {


    }

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

    }

    void  OnCollisionEnter2D(Collision2D col){
         if(col.gameObject.name =="Player"){

            GameObject go = Instantiate(launcher, new Vector3(0,0,0), Quaternion.identity) as GameObject;
            go.transform.parent = GameObject.Find("Player").transform;
            Destroy(gameObject);
        }
    }


}

任何想法从这里去哪里?非常感谢您提供任何反馈。

unity3d unityscript game-development
2个回答
2
投票

您不需要找到Player游戏对象,因为碰撞已经检测到它,您可以获取要替换的枪支的位置以用作新枪支的位置:

void OnCollisionEnter2D(Collision2D col)
{
    if (col.gameObject.name == "Player")
    {
        Vector3 spawnPosition = col.transform.GetChild(0).position;
        Destroy(col.transform.GetChild(0));
        Instantiate(launcher, spawnPosition, Quaternion.identity, col.transform);
        Destroy(gameObject);
    }
}

0
投票

将脚本附加到播放器。在“场景”视图中,调整您的枪支位置,然后进行预制。

  public GameObject gunPrefab;
     void  OnCollisionEnter2D(Collision2D col){
        if(col.gameObject.name =="gun"){
           Instantiate(gunPrefab, transform); //Instantiate(prefab, parent);
           Destroy(col.gameObject);
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.