销毁游戏对象

Destroying game object

我在 Unity 中创建了一个简单的 2D 触摸游戏,我在场景顶部每 3 秒生成一次尖刺,当尖刺掉落时,玩家会在尖刺击中下面的角色之前点击尖刺,但是,当我测试游戏,当我点击尖刺(游戏对象)时,它会破坏场景中的所有尖刺(游戏对象)。这是代码:

public GameObject spike;
public float spawnTime1 = 1f;

// Use this for initialization
void Start () {
    InvokeRepeating ("SpawnSpike", spawnTime1, spawnTime1);

}

// Update is called once per frame
void Update () {
    for (var i = 0; i < Input.touchCount; ++i) {
        if (Input.GetTouch(i).phase == TouchPhase.Began) {
            Destroy (gameObject);
        }
    }
}

void SpawnSpike () {

    var newSpike = GameObject.Instantiate (spike); 
    newSpike.transform.position = new Vector3 (Random.Range(-3, 3), 11f, 0f);

当你 运行

时,你似乎正在破坏这个 game-manager-like 脚本本身
void Update () {
    for (var i = 0; i < Input.touchCount; ++i) {
        if (Input.GetTouch(i).phase == TouchPhase.Began) {
            Destroy (gameObject);
        }
    }
}

Destroy (gameObject); 正在破坏它自己的 game-object,我猜它是实例化尖峰的父级(?);因此一次摧毁所有尖刺。

我建议使用光线投射来确定是否在 and/or 上点击了任何尖峰,然后只破坏该尖峰的 game-object。这是一个很好的reference。如果您仍然觉得难以理解,我还建议您寻找有关相同内容的教程。

希望对您有所帮助!

更新:

这里有一些示例代码可以帮助您:

    if (Input.GetTouch(i).phase == TouchPhase.Began) {
        Vector3 pos = Camera.main.ScreenToWorldPoint (Input.GetTouch(i).position);
        RaycastHit2D hit = Physics2D.Raycast(pos, Vector2.zero);
        if (hit != null && hit.gameObject.CompareTag("spike") && hit.collider != null) {
            Debug.Log ("I'm tapping "+hit.gameObject.name);
            Destroy(hit.gameObject);
        }
    }

此特定代码要求您的长钉预制件(模板)具有标签 "spike"。我还建议您将此代码放在某种全局 "game-manager" 脚本的 Update() 中(而不是放在 Spike 脚本中),这样您就不会 over-process 触动。