44 lines
1.7 KiB
C#
44 lines
1.7 KiB
C#
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<Camera>();
|
|
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();
|
|
}
|
|
} |