您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
84 行
2.2 KiB
84 行
2.2 KiB
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.Rendering;
|
|
|
|
[ExecuteAlways]
|
|
public class CloudManager : MonoBehaviour
|
|
{
|
|
public float scale = 0.1f;
|
|
public Material material;
|
|
public LayerMask layer;
|
|
|
|
[NonSerialized] private Cloud[] clouds;
|
|
|
|
private void OnValidate()
|
|
{
|
|
Init();
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
RenderPipelineManager.beginCameraRendering += CloudAlign;
|
|
//PlanarReflections.beginPlanarReflections += CloudAlign;
|
|
Init();
|
|
}
|
|
|
|
void Init()
|
|
{
|
|
transform.localScale = Vector3.one * scale;
|
|
|
|
/* clouds = new Cloud[transform.childCount];
|
|
|
|
for (int i = 0; i < clouds.Length; i++)
|
|
{
|
|
var cloud = new Cloud();
|
|
cloud.t = transform.GetChild(i);
|
|
cloud.matrix = cloud.t.localToWorldMatrix;
|
|
cloud.mesh = cloud.t.GetComponent<MeshFilter>().sharedMesh;
|
|
cloud.t.GetComponent<Renderer>().enabled = false;
|
|
clouds[i] = cloud;
|
|
}*/
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
RenderPipelineManager.beginCameraRendering -= CloudAlign;
|
|
//PlanarReflections.beginPlanarReflections -= CloudAlign;
|
|
}
|
|
|
|
void CloudAlign(ScriptableRenderContext context, Camera camera)
|
|
{
|
|
if (camera.cameraType != CameraType.Preview)
|
|
{
|
|
var t = camera.transform;
|
|
var position = t.position;
|
|
position -= position * scale;
|
|
transform.position = position;
|
|
|
|
//var cmd = CommandBufferPool.Get("clouds");
|
|
|
|
Debug.Log($"Rendering {clouds.Length} clouds for camera:{camera.name}");
|
|
foreach (var cloud in clouds)
|
|
{
|
|
//cmd.DrawMesh(cloud.mesh, cloud.t.localToWorldMatrix, material);
|
|
Graphics.DrawMesh(cloud.mesh, cloud.t.localToWorldMatrix, material, 8);
|
|
}
|
|
|
|
//context.ExecuteCommandBuffer(cmd);
|
|
//context.Submit();
|
|
//CommandBufferPool.Release(cmd);
|
|
}
|
|
}
|
|
|
|
private void OnDrawGizmos()
|
|
{
|
|
Gizmos.DrawWireSphere(Vector3.zero, 750f);
|
|
}
|
|
|
|
public class Cloud
|
|
{
|
|
public Transform t;
|
|
public Matrix4x4 matrix;
|
|
public Mesh mesh;
|
|
}
|
|
}
|