有NPC在屏幕中跑动,在跑出屏幕外后会被删掉。现在问题是,如何判断NPC不在摄像机视野中。网上搜了一下,最多的一个回答是“unity 事件中 有相关的事件 可参考”,但是看不懂。另有人说投影到屏幕坐标,这个没有试过。一会去试试不在视野中和在视野中的投影有什么区别。谁能告诉我一种比较简单的方法来进行判断(比如unity中一个函数搞定O(∩_∩)O~)谢谢了!【补充】:将楼下方法挂在NPC上,可以检测得到,但是经过测试,在NPC出屏且移动一定距离后可以检测得到。我自己试了一种方法,用NPC映射到屏幕坐标来判断(和屏幕的宽和高比较)camera.WorldToScreenPoint(enemy.transform.position)Screen.widthScreen.height如果映射后的坐标不在屏幕内,则出屏了O(∩_∩)O~偶尔看到这个方法,但是还没试,先粘到这里。判断物体是否在视野内的方法。其实实现很简单,一个API方法而已。这个方法就是OnWillRenderObject(),在Unity3D文档描述中,当游戏对象对摄像机来说是可见的话,这个方法就会被调用。 我们来测试这个方法的功能。首先新建一个场景,在场景中放入一个方块和一个球体,还有加入光源,便于观察,我使用的是Unity3D5.0beta版本,在新建场景时会团默认创建光源,其他版本要自己加入。接下来,给球体加入刚体组件。运行场景,我们会发现球体会受重力影响掉下去,方块还在原位。新建一脚本,如下所示:using UnityEngine;public class DetectVision:MonoBehaviour{//传入方块的引用,用作标识 public GameObject cube; //标识球体是否在摄像机视野内 public bool isRendering=true; private float lastTime=0; private float curtTime=0;void Update() { //对比时间记录,如果不等,说明还在摄像机视野中。 isRendering = curtTime != lastTime ? true : false; if (isRendering) { //在视野中,方块为红色 cube.GetComponent().material.color = Color.red; } else { //不在视野中,方块变为白色 cube.GetComponent().material.color = Color.white; } //将当前时间传入上一帧时间记录中 lastTime = curtTime; }//如果对象可见,调用此方法 void OnWillRenderObject() { //将当前帧开始时间记录 curtTime = Time.time; }}将脚本拖到球体上,并将方块对象拖到脚本上。运行程序,我们发现,刚开始方块是红色的。当球体掉出视野后,方块变成了白色,效果图如下: