Unity调用GameObject.SetActive报CS0120错误的解决方法
报错根因
CS0120报错触发逻辑非常明确:SetActive(bool)是GameObject类型的实例方法,必须通过具体的游戏对象实例调用,你写的GameObject.SetActive(false)是直接用类名调用静态方法的写法,编译器找不到对应的实例引用,自然抛出错误。
这里要特别注意Unity的易混写法:大写G开头的GameObject是类名(代表类型本身),小写g开头的gameObject是MonoBehaviour脚本自带的实例属性,指代当前脚本挂载的那个具体游戏对象,绝大多数新手踩这个坑都是大小写写混了。
可行修复方案
- 如果
Die()方法所在的脚本,本身就挂在你要停用的2D Sprite对象上:直接用内置的gameObject实例调用方法即可,这是最简洁的写法。 - 如果要停用的Sprite不是当前脚本挂载的对象:在脚本内声明一个GameObject类型的可序列化字段,在Unity编辑器的Inspector面板把目标Sprite对象拖到对应字段完成赋值,再通过这个字段调用
SetActive()。
修复后代码
脚本挂在目标Sprite上的最简写法
private void Die() { gameObject.SetActive(false); }
操作其他指定Sprite对象的写法
// 声明后记得在Inspector面板拖入要停用的2D Sprite对象 public GameObject target2DSprite; private void Die() { target2DSprite.SetActive(false); }
补充说明:如果只是想隐藏Sprite显示、不想停用整个游戏对象(避免对象上挂的其他脚本、碰撞体等也被停用),也可以单独控制SpriteRenderer组件的enabled属性:
GetComponent<SpriteRenderer>().enabled = false;,根据实际需求选择即可。
内容的提问来源于stack exchange,提问作者Kuro
相关产品推荐
相关产品推荐

