摧毁游戏对象

时间:2016-01-27 18:30:27

标签: c# unity3d sprite gameobject

我在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);

1 个答案:

答案 0 :(得分:4)

看起来你在运行时会摧毁这个类似游戏管理器的脚本

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

线Destroy (gameObject);正在摧毁它自己的游戏对象,我猜测它是实例化的尖峰的主要对象(?);因此立刻摧毁了所有尖峰。

我建议使用光线投射来查明是否有任何尖峰被点击和/或敲击了哪个尖峰,然后仅摧毁该尖峰的游戏对象。这是一个很好的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);
        }
    }

此特定代码要求您的尖峰预制(模板)具有标记&#34; spike&#34;。我还建议您将此代码放在某种全球性的游戏管理器中。脚本Update()(而不是在Spike脚本中),这样您就不会过度处理这些触摸。