Unity如何判断游戏对象是否在屏幕内,检测玩家、NPC等是否在视野内 您所在的位置:网站首页 ui屏幕渲染 Unity如何判断游戏对象是否在屏幕内,检测玩家、NPC等是否在视野内

Unity如何判断游戏对象是否在屏幕内,检测玩家、NPC等是否在视野内

2023-09-17 03:49| 来源: 网络整理| 查看: 265

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 实验室设备网 版权所有