unity3d - “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);
}
}
请帮助我如何解决这个谢谢!
解决方案
将您向我们展示的最后一个代码块/脚本更改为:
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 行的代码就会被执行。
推荐阅读
- php - 带过滤器的页面导航
- javascript - Azure Application Insights - 在 Javascript 中具有自定义属性的 trackEvent
- firebase - Mac os x 设备上的 Unity 排行榜 - Pubnub、Playfab 还是 Firebase?
- javascript - TypeError:无法在 Dotenv.apply 读取未定义的属性“版本”
- c++ - 如何在 C++ 中将字符串类型的约束转移到 z3 求解器 expr?
- c++ - 如何分发 C++ 模块?
- c# - WPF问题MainWindow Frame没有从ViewModel更改Source属性
- c# - Outlook 2016 AttachmentRemove 不会触发
- jquery - Node.js 将所需模块优先于其他所需模块
- c# - 自定义字体在 Uno.WASM 中有效,但在 Uno.UWP 中无效