Unity Camera.main 找不到报错

项目场景:

Unity2020


问题描述

在Unity2020中通过UnityEngine.Camera.main代码获取当前场景相机报空
我们在场景创建Camera,但是我们还是无法在代码里面通过以下代码来获取我们场景的Camera

 camera= UnityEngine.Camera.main;

原因分析:

因为我们的场景里面摄像机的Tag并没指定为MainCamera

第一个已启用的相机组件,Tag为"MainCamera"(只读)。

如果没有启用了"主相机"标记的相机组件,则此属性为 null。

在内部,Unity 会缓存所有带有"MainCamera"标记的游戏对象。访问此属性时,Unity 会从其缓存中返回第一个有效结果。访问此属性的 CPU 开销很小,相当于调用 GameObject.GetComponent。如果 CPU 性能很重要,请考虑缓存此属性。


解决方案:

我们指定一下,就可以解决了
在这里插入图片描述

using UnityEngine; using UnityEngine.Rendering; public class SkyboxController : MonoBehaviour { [Header("参数配置")] public Color darkSkyColor = Color.black; [Range(0, 1)] public float darkAmbientIntensity = 0.2f; private Camera mainCamera; private Material originalSkybox; private Color originalAmbientLight; private float originalAmbientIntensity; private AmbientMode originalAmbientMode; private bool isDarkMode; void Start() { mainCamera = Camera.main; // 保存原始环境设置 originalSkybox = RenderSettings.skybox ? new Material(RenderSettings.skybox) : new Material(Shader.Find("Skybox/Procedural")); originalAmbientLight = RenderSettings.ambientLight; originalAmbientIntensity = RenderSettings.ambientIntensity; originalAmbientMode = RenderSettings.ambientMode; mainCamera.clearFlags = CameraClearFlags.Skybox; } public void ToggleSky() { isDarkMode = !isDarkMode; ExecuteSkyChange(isDarkMode); } private void ExecuteSkyChange(bool targetState) { if (targetState) // 进入暗模式 { // 保存当前环境光设置 originalAmbientLight = RenderSettings.ambientLight; originalAmbientIntensity = RenderSettings.ambientIntensity; originalAmbientMode = RenderSettings.ambientMode; // 设置暗模式参数 RenderSettings.skybox = null; mainCamera.clearFlags = CameraClearFlags.SolidColor; mainCamera.backgroundColor = darkSkyColor; // 设置替代环境光 RenderSettings.ambientMode = AmbientMode.Flat; RenderSettings.ambientLight = darkSkyColor * darkAmbientIntensity; } else // 恢复原始模式 { RenderSettings.skybox = originalSkybox; mainCamera.clearFlags = CameraClearFlags.Skybox; // 恢复原始环境设置 RenderSettings.ambientMode = originalAmbientMode; RenderSettings.ambientIntensity = originalAmbientIntensity; RenderSettings.ambientLight = originalAmbientLight; } // 强制更新光照系统 DynamicGI.UpdateEnvironment(); RenderSettings.RefreshShaderBindings(); Shader.SetGlobalFloat("_GlossyEnvironmentColor", 1.0f); } void OnDestroy() { // 清理创建的新材质 if (originalSkybox != null && !originalSkybox.shader.name.Contains("Procedural")) Destroy(originalSkybox); } }这个代码报错,严重性 代码 说明 项目 文件 行 禁止显示状态 详细信息 错误 CS0117 “RenderSettings”未包含“RefreshShaderBindings”的定义 Assembly-CSharp E:\Unity3DWrok\NanNing\Assets\Script\测试\SkyboxController.cs 70 活动
最新发布
03-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值