销毁游戏对象
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 触动。
我在 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 触动。