using UnityEngine; public class SkyCapture : MonoBehaviour { public Camera mainCamera; public Material reflectionSkyboxMaterial; public RenderTexture skyRenderTexture; private Camera skyCaptureCamera; void Start() { // 创建一个隐藏的截图相机 GameObject camObj = new GameObject("SkyCaptureCam"); skyCaptureCamera = camObj.AddComponent(); skyCaptureCamera.enabled = false; // 配置截图用的 RenderTexture skyRenderTexture = new RenderTexture(1024, 1024, 16, RenderTextureFormat.ARGB32); skyRenderTexture.Create(); // 配置 skybox 材质(你需要一个简单的 Skybox/6 Sided Shader 材质) reflectionSkyboxMaterial.SetTexture("_FrontTex", skyRenderTexture); reflectionSkyboxMaterial.SetTexture("_BackTex", skyRenderTexture); reflectionSkyboxMaterial.SetTexture("_LeftTex", skyRenderTexture); reflectionSkyboxMaterial.SetTexture("_RightTex", skyRenderTexture); reflectionSkyboxMaterial.SetTexture("_UpTex", skyRenderTexture); reflectionSkyboxMaterial.SetTexture("_DownTex", skyRenderTexture); } void LateUpdate() { // 将截图相机位置同步到主相机 skyCaptureCamera.transform.position = mainCamera.transform.position; skyCaptureCamera.transform.rotation = mainCamera.transform.rotation; skyCaptureCamera.CopyFrom(mainCamera); skyCaptureCamera.cullingMask = LayerMask.GetMask("Sky", "Clouds"); // 只渲染天空和云层 skyCaptureCamera.targetTexture = skyRenderTexture; skyCaptureCamera.clearFlags = CameraClearFlags.Skybox; skyCaptureCamera.Render(); } }