using System.Collections; using System.Collections.Generic; using UnityEngine; public class FirePoint : MonoBehaviour { public GameObject bulletPrefab; public float timer; public bool canShoot; void Start() { timer = 0f; } void Update() { if (GameObject.Find("Player").GetComponent<PlayerController>().joystick_right_down) { timer += Time.deltaTime; if (timer >= 0.2f) { canShoot = true; } if(timer < 0.2f) { canShoot = false; } if (canShoot) { Instantiate(bulletPrefab, transform.position, transform.rotation); timer = 0f; } } Destroy(bulletPrefab, 2f); } } 为什么子弹没有被销毁呢?
时间: 2024-02-10 07:27:33 浏览: 118
SystemCollections接口图-C#入门经典教程
在你提供的代码中,子弹没有被正确销毁的原因是你在 `Update()` 方法中使用了 `Destroy(bulletPrefab, 2f)`。然而,`bulletPrefab` 是子弹的预制体(Prefab),而不是生成的子弹实例。
要正确销毁子弹实例,你需要获取到生成的子弹对象,并对其进行销毁。修改后的代码如下所示:
```csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FirePoint : MonoBehaviour
{
public GameObject bulletPrefab;
public float timer;
public bool canShoot;
void Update()
{
if (GameObject.Find("Player").GetComponent<PlayerController>().joystick_right_down)
{
timer += Time.deltaTime;
if (timer >= 0.2f)
{
canShoot = true;
}
if (timer < 0.2f)
{
canShoot = false;
}
if (canShoot)
{
GameObject bullet = Instantiate(bulletPrefab, transform.position, transform.rotation);
Destroy(bullet, 2f);
timer = 0f;
}
}
}
}
```
在这个修改后的代码中,我们使用 `Instantiate()` 方法生成子弹对象,并将其赋值给变量 `bullet`。然后使用 `Destroy(bullet, 2f)` 在2秒后销毁子弹对象。
请确保在实例化子弹之后立即为其设置销毁时间,这样才能正确地销毁生成的子弹实例。
阅读全文