首页 > 解决方案 > “SpriteRenderer”类型的对象已被销毁,但您仍在尝试访问它

问题描述

我的游戏的 SpriteRenderer 有问题我收到此错误“SpriteRenderer”类型的对象已被破坏,但您仍在尝试访问它通过在此处的方向后声明 sprite != null 解决了错误消息

public void DestroyEnemy(){
    if (sprite != null)
    {
    sprite.enabled = false;
    capsule.enabled = false;
    smoke.SetActive(true);
    }
}

当敌人被摧毁时,烟雾效果并且只在下一个敌人上调用一次不再发生

if(other.CompareTag("EnemyHead")){
        player.Impulse();
        enemy.DestroyEnemy();
        Destroy(other.transform.parent.gameObject, 0.5f);
    }
}

请帮助我如何解决这个谢谢!

标签: unity3d

解决方案


将您向我们展示的最后一个代码块/脚本更改为:

public bool destroyed = false;
if(other.CompareTag("EnemyHead")){
        player.Impulse();
        enemy.DestroyEnemy();
        destroyed = true;
        Destroy(other.transform.parent.gameObject, 0.5f);
    }
}

并将第一个脚本更改为:

public GameObject obj;
bool destroyed = false;

void Update(){
    destroyed = obj.GetComponent<theScriptUpAbove’sName>().destroyed;
}
public void DestroyEnemy(){
    if (!destroyed)
    {
    sprite.enabled = false;
    capsule.enabled = false;
    smoke.SetActive(true);
    }
}

假设这两种方法都在同一个脚本中,这些将起作用。一旦敌人被摧毁,它就不会执行if语句。所以当敌人还活着的时候,第 2 块第 4 行的代码就会被执行。


推荐阅读