剔除对象可见性
以下脚本说明了如何根据设置相机的可见性接收事件。
为简洁起见,此脚本使用了几种性能较高的方法。
using UnityEngine;
using System.Linq;
public class CullingGroupCameraBehaviour : MonoBehaviour
{
CullingGroup localCullingGroup;
MeshRenderer[] meshRenderers;
void OnEnable()
{
localCullingGroup = new CullingGroup();
meshRenderers = FindObjectsOfType<MeshRenderer>()
.Where((MeshRenderer m) => m.gameObject != this.gameObject)
.ToArray();
BoundingSphere[] cullingPoints = new BoundingSphere[meshRenderers.Length];
Transform[] meshTransforms = new Transform[meshRenderers.Length];
for (var i = 0; i < meshRenderers.Length; i++)
{
meshTransforms[i] = meshRenderers[i].GetComponent<Transform>();
cullingPoints[i].position = meshTransforms[i].position;
cullingPoints[i].radius = 4f;
}
localCullingGroup.onStateChanged = CullingEvent;
localCullingGroup.SetBoundingSpheres(cullingPoints);
localCullingGroup.targetCamera = Camera.main;
}
void CullingEvent(CullingGroupEvent sphere)
{
meshRenderers[sphere.index].material.color = sphere.isVisible ? Color.red : Color.white;
}
void OnDisable()
{
localCullingGroup.Dispose();
}
}
将脚本添加到场景并单击播放。场景中的所有几何体都将根据其可见性更改颜色。
http://i.stack.imgur.com/T28vl.gif
如果对象具有
MeshRenderer
组件,则可以使用MonoBehaviour.OnBecameVisible()
方法实现类似的效果。当你需要剔除空的 GameObjects,Vector3
坐标或者想要一种跟踪对象可见性的集中方法时,请使用 CulingGroups。