如果物体会被渲染的话,是需要调用OnWillRenderObject
的方法的,这里给外界提供了isRendering:boolean
public var isRendering:boolean=false;
private var lastTime:float=0;
private var curtTime:float=0;
function Update()
{
isRendering=curtTime!=lastTime?true:false;
lastTime=curtTime;
}
function OnWillRenderObject()
{
curtTime=Time.time;
}
另外网上还有一份代码,很久以前用过
- 对于2D带有SpriteRenderer的物体,传入SpriteRenderer.bounds
- 对于3D物体,传入Mesh.bounds
原理:传入一个bounds,是一个物体的范围边界,然后根据摄像机获取视锥体的六个面(planes),调用GeometryUtility.TestPlanesAABB(planes, bounds)判断bounds和planes构成的空间有没有重合的部分。
public static bool IsVisibleFrom(this Bounds bounds, Camera camera)
{
Plane[] planes = GeometryUtility.CalculateFrustumPlanes(camera);
return GeometryUtility.TestPlanesAABB(planes, bounds);
}