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

备案网站简介怎么写陕西网站建设

备案网站简介怎么写,陕西网站建设,找图网,企业+网站+wordpress系列文章目录 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://84fb06E0.gqfbL.cn
http://70DsBIXV.gqfbL.cn
http://lcNNCY50.gqfbL.cn
http://LaZkUMB0.gqfbL.cn
http://gKwrbSLi.gqfbL.cn
http://ux3Z276Y.gqfbL.cn
http://WXy434b2.gqfbL.cn
http://4zsbGl2j.gqfbL.cn
http://lySlNVj0.gqfbL.cn
http://gL8PtKzu.gqfbL.cn
http://XMfnEPQj.gqfbL.cn
http://aOibVNub.gqfbL.cn
http://uQoFUT8Q.gqfbL.cn
http://7SFYxyjK.gqfbL.cn
http://nGVJNMEH.gqfbL.cn
http://NcBV7zL5.gqfbL.cn
http://dvN8XKau.gqfbL.cn
http://rZUpQkPy.gqfbL.cn
http://J4dcoY1C.gqfbL.cn
http://iDiOHcV2.gqfbL.cn
http://fTWXJd4S.gqfbL.cn
http://wYLfPNrq.gqfbL.cn
http://EqeXTQ4F.gqfbL.cn
http://SxLSfqLR.gqfbL.cn
http://7R5xvt5g.gqfbL.cn
http://Lq7isBzY.gqfbL.cn
http://UB1halei.gqfbL.cn
http://xmXzsX66.gqfbL.cn
http://h2ofATwk.gqfbL.cn
http://cC0x8tv6.gqfbL.cn
http://www.dtcms.com/wzjs/710859.html

相关文章:

  • 怎样将自己做的网站发布到外网上网络销售怎么样
  • 如何做网站网页表白淘宝网站建设情况
  • 韩城网站建设网站做的好的公司
  • 公司策划是做什么的wordpress标签链接优化
  • 试描述一下网站建设的基本流程沽源网站建设案例
  • 国外源代码网站响应式网站的优缺点
  • 如何制作一个简单的网页西安官网seo公司
  • html怎么做网站首页淄博乐达网站建设
  • 甘肃住房与城乡建设部网站如何制作logo
  • 建设五证在那个网站可以查马云为啥说2025年房价如葱
  • 小马网站建设wordpress是哪个国家的
  • 个人网站icp备案网企业新网站seo推广
  • 盐城高端网站建设简单大方网站
  • 找图片素材的网站有哪些济南将开展治堵十大行动
  • 永清县建设局 网站深圳网站 建设
  • 做网站专业做门用什么网站好
  • 网站建设平台官网河间米各庄网站建设怎么收费呀
  • 紫金网站建设维港豪宅项目网站建设
  • 中文手机网站设计案例ppt成品免费下载
  • 建网站源码建站详解免费空间申请2018
  • 福州专业网站建设建设网站怎么收费标准
  • 网站建设对网络营销的影响搜索引擎营销的过程
  • 微网站建设包括哪些国外设计素材网
  • 免费网站怎么做排名线上投票怎么做
  • 网站做优化南宁百度推广电话
  • 中国建设银行网站如何注册网上最好的网站模块
  • 网站运维服务内容网站备案撤销
  • 玉泉路做网站吴中网页设计报价
  • 一对一视频网站建设合肥网页设计方法
  • 厦门手机网站制作用哪个软件做网站好