当前位置: 首页 > wzjs >正文

2345网址大全手机版厦门关键词排名seo

2345网址大全手机版,厦门关键词排名seo,武汉做鸭兼职网站,聊城做网站的公司渠道系列文章目录 unity知识点 文章目录 系列文章目录👉前言👉一、判断UI的可见性1-1、第一种1-2、通过RectTransform计算可视区域1-3、滚动容器内可见性检测(Scroll View) 👉二、判断物体的可见性2-1、视锥体检测方法2-2…

系列文章目录

unity知识点


文章目录

  • 系列文章目录
  • 👉前言
  • 👉一、判断UI的可见性
    • 1-1、第一种
    • 1-2、通过RectTransform计算可视区域
    • 1-3、滚动容器内可见性检测(Scroll View)
  • 👉二、判断物体的可见性
    • 2-1、视锥体检测方法
    • 2-2、遮挡检测(射线检测法)
    • 2-3、使用渲染器回调(自动触发)
    • 2-4、判断物体中心点的可见性
    • 2-5、判断物体包围盒是否在Camera包围盒内
    • 2-6、完整方法
  • 👉壁纸分享
  • 👉总结


👉前言

在Unity中,判断UI和3D物体的可见性需要结合渲染逻辑、空间坐标系转换及特定API的使用

博客将会介绍Unity3D中UI与物体可见性的判断方法。
希望这篇博客对Unity的开发者有所帮助。
大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
欢迎点赞评论哦.下面就让我们进入正文吧 !


提示:以下是本篇文章正文内容,下面案例可供参考

👉一、判断UI的可见性

1-1、第一种

该方法适用于3D Canvas(第三种模式), 和 2D且赋值了相机的Canvas。(第二种模式)
不适合2D没有赋值相机的Canvas(第一种模式)。

    /// <summary>/// 判断ui是否能被相机Camera可见/// </summary>public bool GetUIDisable(Camera cam, RectTransform ui){bool value = true;Vector3 pos = cam.WorldToScreenPoint(ui.position);if (pos.z < 0 || pos.x < 0 || pos.x > Screen.width || pos.y < 0 || pos.y > Screen.height)value = false;return value;}

1-2、通过RectTransform计算可视区域

public static bool IsUIVisible(RectTransform rectTransform) {// 获取UI的屏幕范围Vector3[] corners = new Vector3[4];rectTransform.GetWorldCorners(corners);// 计算屏幕的有效区域(假设主Canvas覆盖整个屏幕)Rect screenRect = new Rect(0, 0, Screen.width, Screen.height);// 检查所有角是否在屏幕内foreach (Vector3 corner in corners) {if (!screenRect.Contains(corner)) {return false;}}return true;
}

1-3、滚动容器内可见性检测(Scroll View)

动态加载列表项:当UI元素进入ScrollRect可视区域时加载数据。
自动适配布局:隐藏屏幕外的UI元素以优化性能。

public bool IsVisibleInScrollView(ScrollRect scrollRect, RectTransform content) {// 获取ScrollRect的可视区域Rect viewportRect = scrollRect.viewport.rect;Bounds viewportBounds = new Bounds(scrollRect.viewport.position, new Vector2(scrollRect.viewport.rect.width, scrollRect.viewport.rect.height));// 转换目标UI的坐标到Viewport空间Vector3[] contentCorners = new Vector3[4];content.GetWorldCorners(contentCorners);Matrix4x4 viewportMatrix = scrollRect.viewport.worldToLocalMatrix;// 检查是否与Viewport重叠return RectTransformUtility.RectangleContainsScreenPoint(scrollRect.viewport, content.position, null // 可指定特定摄像机);
}

👉二、判断物体的可见性

3D物体的可见性取决于

  1. 摄像机视锥体(Frustum):物体是否在摄像机视野内。
  2. 渲染器状态:Renderer.isVisible 属性(自动更新)。
  3. 遮挡关系:物体是否被其他物体遮挡(需额外计算)。

2-1、视锥体检测方法

public bool IsInCameraView(Camera camera, GameObject obj) {// 获取物体的包围盒Bounds bounds = obj.GetComponent<Renderer>().bounds;// 创建视锥体平面Plane[] planes = GeometryUtility.CalculateFrustumPlanes(camera);// 检查包围盒是否在视锥体内return GeometryUtility.TestPlanesAABB(planes, bounds);
}

2-2、遮挡检测(射线检测法)

public bool IsOccluded(GameObject target, Camera camera) {Vector3 dir = target.transform.position - camera.transform.position;float distance = dir.magnitude;Ray ray = new Ray(camera.transform.position, dir.normalized);if (Physics.Raycast(ray, out RaycastHit hit, distance)) {return hit.collider.gameObject != target;}return false;
}

2-3、使用渲染器回调(自动触发)

自带API

void OnBecameVisible() {// 当物体进入任何摄像机视野时触发
}void OnBecameInvisible() {// 当物体离开所有摄像机视野时触发
}

2-4、判断物体中心点的可见性

    public bool GetObjCenterDisable(Camera cam, Transform obj){//转化为视角坐标Vector3 viewPos = cam.WorldToViewportPoint(obj.position);//  z<0代表在相机背后if (viewPos.z < 0)return false;//  距离farClipPlane太远,摄像机看不到了if (viewPos.z > cam.farClipPlane)return false;//  x,y取值在 0~1之外时代表在视角范围外if (viewPos.x < 0 || viewPos.y < 0 || viewPos.x > 1 || viewPos.y > 1)return false;return true;}

2-5、判断物体包围盒是否在Camera包围盒内

在范围内就可见,则反之

    /// <summary>/// 相机包围盒/// </summary>private Plane[] _mTempCameraPlanes = new Plane[6];private void Update(){//使用方法;print(GetBondsVisable(transform.position, GetComponent<BoxCollider>().size));}private void LateUpdate(){//调用Unity的API,获取相机包围盒GeometryUtility.CalculateFrustumPlanes(Camera.main, _mTempCameraPlanes);}/// <summary>/// 通过相机包围盒来判定物体是否在视野中。/// </summary>public bool GetBondsVisable(Vector3 center, Vector3 size){Bounds bound = new Bounds(center, size); //这里的Size是半径return GeometryUtility.TestPlanesAABB(_mTempCameraPlanes, bound);}

2-6、完整方法

结合了2-1、2-2、示例如下:

// 综合判断3D物体是否可见(视锥体 + 遮挡)
public bool IsObjectVisible(GameObject obj, Camera mainCam) {if (!IsInCameraView(mainCam, obj)) return false;if (IsOccluded(obj, mainCam)) return false;return true;
}

请添加图片描述


👉壁纸分享

在这里插入图片描述

👉总结

本次总结的就是UI与物体可见性的判断方法, 有需要会继续增加功能
如能帮助到你,就帮忙点个赞吧,三连更好哦,谢谢
你的点赞就是对博主的支持,有问题记得留言评论哦!
不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!

http://www.dtcms.com/wzjs/305175.html

相关文章:

  • 北京手机网站制作公司软件外包企业排名
  • 网站推广公司网站社群营销怎么做
  • 网站开发与黑客沈阳seo团队
  • 琪觅公司网站开发渠道营销推广方案
  • 互助盘网站怎么做的市场营销策划公司
  • 网站建设版权纠纷营销推广公司
  • rsd wordpress网页seo搜索引擎优化
  • 做商城网站要多少钱新闻最新消息今天
  • 桓台网站建设公司长沙百度地图
  • 呼伦贝尔旅游包车网站咋做建站流程主要有哪些
  • 做一个打鱼网站需要多少钱百度联盟app
  • 做h5的网站哪个好google网站推广
  • 苏州园区做网站中国联通业绩
  • php做调查问卷网站深圳关键词优化公司哪家好
  • 做微商城网站疫情最新情况
  • 免费做简历的软件网站杭州seo博客
  • 网站开发网网站设计公司上海
  • 网络营销导向的企业网站建设的要求网站收录服务
  • html5的篮球网站开发百度官方免费下载安装
  • ps怎么做网站图片谷歌 翻墙入口
  • 产品展示网站模板下载seo是什么意思 seo是什么职位
  • 酷狗音乐网站开发语言hao123网址导航
  • 西安公司网站建设seo排名教程
  • 什么网站是专做代购的网络营销推广网站
  • 上海建设工程造价网站济南优化网页
  • 网页制作与网站建设实战大全优化教程网
  • 误入网站退不了怎么做web前端培训费用大概多少
  • 做独立网站需要注意些什么怎么开网店新手入门
  • 有没有专业做挂的网站游戏优化是什么意思
  • 阳江网站制作电脑网页制作