在Unity制作游戏的过程中,我们通常会有这样的需求,比如将屏幕外的人隐藏,提升游戏性能,或者是如果某些物体不在屏幕内,就提示玩家。
对于这些需求,我们使用到了Unity内置的一套函数,也就是下面两个
// 进入摄像机视野回调,每当物体进入视野时调用一次
void OnBecameVisible()// 离开摄像机视野回调,每当物体离开视野时调用一次
void OnBecameInvisible()
触发条件
挂载当前脚本的物体,需要拥有MeshRenderer或其他功能相似的Renderer组件。
疑难问题
有时候,我们发现虽然物体没有在摄像机视野内,但是OnBecameVisible函数也被触发了,那这是为什么呢。经过测试,我发现,如果物体会投射阴影,那么如果阴影被投射到屏幕之内,也是算作物体进入摄像机视野的,所以大家一定要注意这个要点。
具体代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraCheck: MonoBehaviour
{
private bool isInVisualField;
void OnBecameVisible()
{
isInVisualField = true;
}
void OnBecameInvisible()
{
isInVisualField = false;
}
}