首页 > 解决方案 > 我试图在与我的玩家碰撞后破坏一个游戏对象,然后重新实例化它以再次碰撞它,形成一个循环,但它不起作用

问题描述

//所以基本上这是更新功能。代码的所有部分都在工作。唯一的问题是我的弹丸首先被实例化,1.5 秒后它被摧毁。2 秒后(timebtwshots 变量设置为 2)另一个射弹被实例化,但 1.5 秒后,它没有被停用。因此,弹丸在我的屏幕上杂乱无章。

void Update()
{


    if (timebtwshots <= 0)
    {
        StartCoroutine(blah());
        
    }
    else
    {
        timebtwshots -= Time.deltaTime;
    }
    IEnumerator blah()
    {
        projectile.SetActive(true);
        Instantiate(projectile, transform.position, Quaternion.identity);
        timebtwshots = starttimebtwshots;
        yield return new WaitForSeconds(1.5f);
        projectile.SetActive(false);
    } 
}

标签: c#unity3d

解决方案


我看不到在哪里projectile定义。也许是一个全局对象?

无论如何,当你实例化一个新的射弹时,如果你想控制它,你必须首先将它分配给一个变量。

var spawnedProjectile = Instantiate(projectile, transform.position, Quaternion.identity);

从那时起,您可以控制 THAT spawnedProjectile。在您的代码中,您总是访问第一个projectile,因此不会禁用新的代码(您继续调用.setActive(false)已经激活为假的射弹)。

但是,您并没有破坏对象,您只是将 Active 设置为 false。您可能会考虑使用Destroy(spawnedProjectile)来完全销毁游戏对象。


推荐阅读