我在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);
答案 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脚本中),这样您就不会过度处理这些触摸。