Unity如何判断游戏对象是否在屏幕内,检测玩家、NPC等是否在视野内 | 您所在的位置:网站首页 › ui屏幕渲染 › Unity如何判断游戏对象是否在屏幕内,检测玩家、NPC等是否在视野内 |
1、带有Render的物体: 通过覆写OnWillRenderObject来判断被渲染的物体是否在视野内,但是对于不带Render的物体无法检测 2、坐标转换: Unity提供的丰富的坐标转化机制,可以将GameObject的世界坐标转换为视野坐标来判断是否在视野内 1> 通过camera.WorldToViewportPoint(worldPos)将世界坐标转化为视窗坐标 2> 视窗坐标系为坐下角为(0,0),右上角为(1,1),只需判断第一步转换的坐标viewPos的x、y是否在0-1之间即可 3> 判断z值,在相机照射范围内远处的物体也可以判断 4> 适当留一部分阈值 //物体出现在屏幕 void OnBecameVisible() { Debug.Log(this.name.ToString()+"这个物体出现在屏幕里面了"); } //物体离开屏幕 void OnBecameInvisible() { Debug.Log(this.name.ToString() + "这个物体离开屏幕里面了"); } using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 将脚本挂在摄像机观察的物体上 物体必须带有Render /// public class PlayerView : MonoBehaviour { bool isRendering; float curtTime = 0f; float lastTime = 0f; void OnWillRenderObject() { curtTime = Time.time; } public bool IsInView(Vector3 worldPos) { Transform camTransform = Camera.main.transform; Vector2 viewPos = Camera.main.WorldToViewportPoint(worldPos); Vector3 dir = (worldPos - camTransform.position).normalized; float dot = Vector3.Dot(camTransform.forward, dir); //判断物体是否在相机前面 if (dot > 0 && viewPos.x >= 0 && viewPos.x = 0 && viewPos.y |
CopyRight 2018-2019 实验室设备网 版权所有 |