Unity C#报CS0176错误:Camera.main.current无法通过实例引用访问怎么办
错误原因
CS0176报错的核心是混淆了Unity Camera类的静态成员和实例成员的用法:
Camera.main本身是静态属性,返回当前场景中标记了「MainCamera」标签的Camera实例- 代码中多余的
.current属于Camera类的静态属性,用于获取当前正在渲染的相机,不能用Camera.main返回的实例对象去访问静态成员,因此触发了该报错。 - 同时代码还存在隐藏问题:已经在类作用域声明了全局变量
objectP,在if判断内又重复声明了同名局部变量,会导致全局变量未被正确赋值,后续生成物体时坐标异常。
修复方案
- 删掉多余的
.current,直接用已经获取到的sceneCamera实例调用ScreenToWorldPoint方法 - 移除if判断内
objectP前的类型声明,直接给全局变量赋值
修复后完整代码
public GameObject tower; public Camera sceneCamera; Vector3 objectP; void Update () { sceneCamera = Camera.main; if (sceneCamera!= null) { Vector3 mousePos = Input.mousePosition; mousePos.z = 2.0f; objectP = sceneCamera.ScreenToWorldPoint(mousePos); } if (Input.GetButtonDown("Fire1")) { Instantiate(tower, objectP, Quaternion.identity); } }
优化建议
- 没有特殊需求的话,可以把
sceneCamera = Camera.main;移到Start()方法中只执行一次,避免每帧调用Camera.main产生不必要的性能损耗 - 仅当场景存在主相机动态销毁、切换的逻辑时,再保留每帧对
sceneCamera的判空、赋值逻辑
内容的提问来源于stack exchange,提问作者user16753340
相关产品推荐
相关产品推荐

