Categories News

FairyGUI还是UGUI,从性能上怎么选 – UWA问答 | 博客 | 游戏及VR应用性能优化记录分享

1)FairyGUI还是UGUI,从性能上怎么选2)FairyBatching为何还会断批 这是第492篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。 UWA社区主页:community.uwa4d.comUWA QQ群:793972859 本次推送的实战案例来自于使用UWA服务的项目的真实且典型的问题。UWA将关键线索、定位路径与处理建议整理成了可复用的案例笔记,便于大家快速对照、排查自身项目中的同类问题。 实战案例 Q:新项目正在评估FairyGUI和UGUI,单从性能角度看,能不能直接判断哪一种方案更好? A:不能简单判断FairyGUI一定比UGUI好。两套方案都可以做到比较好的性能,差别更多在于各自容易踩到什么性能坑。 UGUI比较常见的问题集中在Canvas体系。界面中动态元素较多时,如果Canvas划分和动静分离没有处理好,容易出现网格重建、顶点属性更新等额外开销;SetActive、SetParent以及UI Particle等操作,也可能成为性能热点。 FairyGUI的实现方式不同。UI进入Unity后更接近普通MeshRenderer的渲染方式,不依赖UGUI那套Canvas网格重建流程,因此动静分离、频繁顶点更新这类问题相对少一些。 但FairyGUI也不是“天然性能更高”。它同样有自己的性能限制,例如动态合批条件、Renderer相关属性、文本顶点数量以及UI与特效的混排方式,都可能影响最终性能。 从目前接触到的项目经验来看,UGUI遇到的性能问题类型会更多一些,而FairyGUI相对集中。但这并不代表FairyGUI天然性能更高,两套方案都可以做到比较好的性能。选型时更适合结合团队现状判断: 已经有成熟UGUI框架和优化经验现有积累本身就有价值,没有必要仅因为换方案可能减少部分性能问题就重新切换。 更关注UI制作效率,且愿意重新建立使用规范可以重点评估FairyGUI,尤其是动态UI较多、希望减少程序拼UI工作的项目。 如果项目本身比较重UI,最好再准备几个接近真实业务的测试场景,例如大量动态文本、频繁开关界面、角色预览、UI特效混排,放到同一设备、相近画面复杂度下进行对比。 FairyGUI并非在所有场景下都更占优势,它只是规避了UGUI中的一部分常见性能问题;最终怎么选,还是要结合团队已有积累和实际UI场景。 实战案例 Q:FairyGUI已经开启FairyBatching,为什么同材质的UI元素还是会出现合批被打断? A:FairyBatching主要是调整UI元素的渲染顺序,为后续合批创造条件,并不代表开启后,同材质元素就一定能够合起来。 实际能不能合批,还会受到网格复杂度、UI层级关系以及特效混排等因素影响。例如文本开启Outline、Shadow等效果后,生成的顶点数量会明显增加。当网格复杂度超过动态合批允许的范围,即使材质一致、FairyBatching已经调整好顺序,也可能被拆成多个Draw Call。 UI对象之间的包围框重叠同样会影响排序。FairyBatching在重新组织渲染顺序时,还要保证原本的前后遮挡关系不被破坏,所以不同组件的包围框一旦互相覆盖,同材质元素就不一定能够自由调整到连续的绘制顺序中。这里比较容易忽略的是:画面看起来没有重叠,不代表实际包围框没有重叠。 如果UI中还穿插了粒子或3D特效,情况会更复杂。通过GoWrapper等方式把特效放进UI层级后,一旦形成类似:UI → 特效 → UI这样的交错关系,原本能够连续绘制的UI元素也可能被拆开。 开启FairyBatching后Draw Call仍然偏高,可以重点检查三件事:文本和UI Mesh顶点是否过多、UI对象包围框是否重叠,以及特效或3D对象是否穿插在UI渲染顺序中。 FairyBatching只是尽量为合批创造条件。开启后Draw Call仍高,就需要继续找是哪一个条件打断了合批。 无论是社区里开发者们的互助讨论,还是AI基于知识沉淀的快速反馈,核心都是为了让每一个技术难题都有解、每一次踩坑都有回响。希望这些从真实开发场景中提炼的经验,能直接帮你解决当下的技术卡点,也让你在遇到同类问题时,能更高效地找到破局方向。 封面图来源于网络 今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。 UWA官网:www.uwa4d.comUWA社区:community.uwa4d.comUWA学堂:edu.uwa4d.com官方技术QQ群:793972859 PakarPBN 私人博客网络(Private Blog Network,简称 PBN)是由个人或组织控制的一组网站,主要用于向一个“目标网站”(Money Site)建立反向链接,从而影响其在 Google 等搜索引擎中的排名。PBN 的核心理念建立在反向链接对 Google 排名算法的重要性之上。由于…

Read More
Categories News

Line Drawing Converter 照片轉黑白線稿工具

本文重點:Line Drawing Converter 是一款線上照片轉黑白線稿工具,內建 Clean、Simple、Detailed、Bold、Thin 五種線條模式,可先預覽再下載,另有 Pencil Drawing 鉛筆素描功能;採點數制、需註冊,新帳號送 2 個永久免費點數,免費成品會有浮水印。 把一張照片轉為乾淨的黑白線稿,用途其實比想像中多,喜歡畫圖的人會拿線稿來描圖練習或當著色本(想找現成的著色圖,可到 ぬりえランド 著色樂園 或 BeddyColor 下載);做手作、刺青、刺繡的人需要清楚的輪廓當版型;在製作簡報或文件時,一張線條插圖比彩色照片更好搭配版面;就連列印成黑白稿,線條畫也比灰階照片更省墨水、更清爽。 Line Drawing Converter 是什麼? 但透過手機內建的濾鏡或一般線稿工具做出來的成品往往不夠理想,例如很常見的畫面到處都雜訊,還會冒出一堆根本不存在的假陰影,輪廓糊成一團等,效果很看運氣。如果需要完成度更高的線稿,往往得動用專業繪圖軟體進行修圖,對一般人來說門檻高,光是描邊、調整參數就要摸索很久。 本文要介紹的「Line Drawing Converter」是一款專門把照片轉成黑白線條畫的線上工具,主打成品比一般素描濾鏡更清晰,能有效減少雜訊與假陰影。它內建 Clean、Simple、Detailed、Bold、Thin 五種線條模式,還提供移除背景、為列印設計的高對比黑線、長寬比、數量、輸出品質等微調選項(不過有部分功能需付費才能用),同一張照片可以做出不同風格的線稿。 在費用上,這個工具採點數制,需要註冊帳號才能使用。新用戶建立帳號後可獲得 2 個永久免費點數,足夠先試轉兩張看看效果有沒有符合自己需求,後續若要大量使用,再選擇訂閱方案或永久點數包即可。要注意的是,免費使用生成的照片右上角會顯示浮水印(網址),不過付費後生成的成品不會。 五種線條模式差異 五種線條模式的差異如下,可依照片內容與用途選擇: 模式 說明 Clean 細節與線條較平衡的通用款 Simple 只保留最少線條,適合極簡風格 Detailed 保留最多細節,適合結構複雜的照片 Bold 線條較粗,列印效果最好 Thin 線條輕盈細緻 使用教學 註冊登入並確認免費點數 開啟 Line…

Read More
Categories News

卡顿帧自己划,Shader看编译,Overdraw自动采:这次把决定权交还给项目

项目快收口时,经常会碰到这种要求:“这一轮标准再收紧一点,原来不看的那批帧也拉出来。” 问题也随之而来:项目已经换线了,工具还守着原来的默认阈值。那批需要继续排查的帧,在报告里看着却“挺正常”,测试同学只能自己再筛一遍。 默认规则当然有用,但真查进项目里,很快就会发现,同一把尺子很难从头用到尾。前期抓大放小,后期标准越压越紧,一些关键战斗、固定玩法和主城场景也可能有自己的性能目标。哪些帧要继续往下查,最终得看项目自己的要求。 卡顿帧自己划:把“刻度尺”交还给项目 这次,GOT Online把卡顿阈值开放出来了。阈值调整后,卡顿曲线、卡顿点和相关统计会按照新的标准重新计算。哪些帧进入本轮重点排查范围,由项目自己决定。 在同一浏览器标签页和同一份数据里继续分析时,自定义阈值和降噪状态会保留;刷新页面或切换其他数据后,再恢复默认。看起来只是改了一条线,但真正做性能分析时,哪批帧会先被看见,本身就会影响后面的排查起点。 非主线程打点:把“暗中吃时间”的嫌疑人拉出来 有些性能问题不会爆出明显尖峰。比如Lua GC、资源加载,或者拆到后台执行的逻辑,可能每帧只稳定占掉几毫秒,但整段流程跑下来,一直在吃CPU预算。 现在可以通过SDK API给关心的代码段打点,单独观察峰值和全流程平均耗时,判断它是偶发抬高,还是长期处在高位。 想盯Lua GC,就给Lua GC打点;怀疑资源加载,就把对应代码段标出来。先把怀疑对象拉出来,比在一堆线程里找重点更直接。 Shader日志直达:打破“只给函数名”的排查黑盒 报告里出现Shader.CreateGPUProgram大尖峰,只能说明这里发生了Shader编译,但还不知道涉及哪些Shader和编译记录。 以前分析到这里,经常得再去找设备日志和工程配置。现在可以直接采集并下载对应的Shader编译日志,目前仅支持Android包。 拿到日志后,可以结合编译记录继续确认当时涉及哪些Shader,为后续检查预热、变体管理和运行时触发路径提供线索。 Overdraw自动采集:不再靠测试同学“拼手速” 以前抓相机Overdraw,需要手动点击Capture Overdraw。碰到快速跑图、战斗或镜头快速变化,想看的画面很容易错过,有时只能重跑流程。现在可以提前配置相机Overdraw自动采集。 测试流程照常跑,系统按配置完成采集,减少对人工点击时机的依赖,也更不容易错过目标画面。 区间框选与有效均值:少进几次Excel 资源管理页面板新增资源总值,方便直接对比版本间的资源规模。有效帧均值只统计存在有效数据的帧,更接近资源实际出现期间的平均水平。 自定义面板支持直接框选时间区间,函数、资源和相关统计会按照选中区间重新计算。 以前可能要导CSV、进Excel、筛区间,现在很多时候框一下就能直接看结果。 让工具跟上项目自己的排查思路 真实的性能优化,本来就不是照着固定路线往下走。项目阶段变了、关注对象变了,手里的“尺子”也得跟着变。 卡顿帧自己划,线程自己标,Shader顺着日志追,Overdraw交给系统采,区间框到哪里,数据就算到哪里。工具少卡一下,排查思路就能更顺地接下去。 最后说两句: 我们深知,在项目期引入或尝试一个新工具是有决策成本的。 工具的价值,不仅在于它能算得多快,更在于它能不能真的融入团队的日常流转中,帮大家准时下班。 但如果它能每天帮你省下半小时的查Bug时间,这笔账就绝对划算。为了让大家能毫无负担地验证这波“AI+性能优化”的疗效,我们为大家准备了专属福利: 关于UWA UWA是一家创业十年的高新技术企业,作为游戏行业的深耕者,UWA始终专注于为使用Unity、Unreal引擎的开发者提供丰富的优化产品,帮助开发者高效解决开发问题、定位性能瓶颈、提供解决方案,已支持超过一万款游戏项目。还打造了技术博客、问答、学堂等社区产品,为开发者提供便利和高效的支持。线上培训和线下教育的新业务,满足行业对人才培育的需求。 PakarPBN 私人博客网络(Private Blog Network,简称 PBN)是由个人或组织控制的一组网站,主要用于向一个“目标网站”(Money Site)建立反向链接,从而影响其在 Google 等搜索引擎中的排名。PBN 的核心理念建立在反向链接对 Google 排名算法的重要性之上。由于 Google…

Read More
Categories News

台灣百年時空地圖,輸入地址對照日治時期與現代地貌,看看你家 100 年前長什麼樣

你可曾想過:我現在住的地方、辦公室前的馬路或是街道,一百年前是長什麼樣子嗎?是稻田、埤塘、還是一片還沒開發的荒 […] 這篇文章「台灣百年時空地圖,輸入地址對照日治時期與現代地貌,看看你家 100 年前長什麼樣」最早出現在免費資源網,請追蹤 Facebook、X (Twitter)、Threads 或訂閱 RSS feed 獲取更多科技新知及免費資源相關介紹教學。 PakarPBN 私人博客网络(Private Blog Network,简称 PBN)是由个人或组织控制的一组网站,主要用于向一个“目标网站”(Money Site)建立反向链接,从而影响其在 Google 等搜索引擎中的排名。PBN 的核心理念建立在反向链接对 Google 排名算法的重要性之上。由于 Google 会将反向链接视为网站权威性和可信度的信号,因此一些网站所有者会尝试通过人为建立受自己控制的网站网络来制造这些信号。 在典型的 PBN 架构中,网站所有者会购买已经过期或具有一定历史的域名,这些域名通常已经拥有一定的权重、反向链接以及网站历史。之后,他们会重新建设这些域名的网站,并发布新的内容,同时通常使用不同的 IP 地址、主机服务商、网站主题以及所有者信息,使这些网站看起来彼此之间没有关联。在这些网站发布的内容中,会策略性地加入指向目标网站的链接。通过这种方式,网站所有者试图将链接权重(也称为 Link Equity 或 “Link Juice”)从 PBN 网站传递到目标网站。 PBN 的目的,是让目标网站看起来像是自然地从多个相互独立的网站获得了反向链接。如果操作得当,这种方式可能会在短期内提升关键词排名、增加自然搜索曝光度,并为目标网站带来更多来自搜索结果的流量。 Streaming Film Nonton Film gratis Jasa Backlink Download Anime Batch

Read More
Categories News

小游戏内存预留了,为何还会扩容

1)预留Heap为何还会扩容 2)闲置Camera为何还有Culling 这是第491篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。 UWA社区主页:community.uwa4d.com UWA QQ群:793972859 本次推送的实战案例来自于使用UWA服务的项目的真实且典型的问题。UWA将关键线索、定位路径与处理建议整理成了可复用的案例笔记,便于大家快速对照、排查自身项目中的同类问题。 实战案例 Q:小游戏Total Heap预留近500MB,为什么还会继续扩容? A:Total Heap只是预留空间,真正决定是否扩容的,是Dynamic Heap的实际使用量。 从UWA GOT Online报告中可以看到,Total Heap初始约为496MB,运行后很快触及上限,随后扩到600多MB,后面又进一步扩到800多MB。说明并不是预留没有生效,而是Dynamic Heap已经超过了最初的预留范围。 这里还要特别关注扩容瞬间的内存压力。小游戏Heap扩容过程中,原有内存可能会先被复制,短时间同时存在新旧两部分内存。例如原本已经接近500MB,扩容阶段的瞬时占用可能接近1GB,对内存限制更严格的iOS设备风险更高。报告后期Dynamic Heap已经达到700多MB,继续拆分后大致包括: Native Heap:400多MB Mono:约150MB Lua或其他第三方插件相关内存:100多MB 所以这里不能只靠提高Total Heap初始值解决。一方面要根据完整运行周期的实际水位设置合理的预留空间,另一方面还要继续降低Dynamic Heap本身的占用。 Native Heap可以继续结合引擎及资源内存排查;Mono重点关注是否持续上涨;第三方插件则可以通过开关插件做对照测试,确认具体的内存贡献。同时,Total Heap也不是设得越大越好。初始值过高,同样会增加低端设备启动阶段的内存压力。 实战案例 Q:Camera没有实际参与画面渲染,为什么Culling耗时还在? A:只要Camera仍处于启用状态,即使当前画面并不需要它,Culling等渲染准备工作仍可能继续产生CPU开销。 UWA GOT Online报告中Camera.Render的调用次数持续在10次左右。检查发现,场景虽然存在多个Camera,但部分当前不需要使用的Camera并没有Disable;与此同时,Culling在渲染模块中的耗时占比约为40%。 Culling需要根据Camera视角筛选后续可能参与渲染的对象,所以画面里没有看到这个Camera的内容,不等于这个Camera已经没有开销。角色预览、礼包展示、3D UI以及RenderTexture等功能都可能创建额外Camera。如果界面关闭后只是隐藏内容,却没有同步关闭Camera,这部分开销仍可能保留下来。 小游戏报告中的情况更加明显,部分区间Camera数量甚至达到40个左右,对应区间的渲染耗时也有明显上升。 排查时重点做三件事: 对比Camera.Render调用次数和当前画面真正需要的Camera数量; 检查UI、角色预览、RenderTexture等临时Camera是否在使用结束后及时Disable; 对必须保留的Camera,再检查Culling Mask是否包含了不需要处理的Layer。 处理后重新观察Camera.Render次数和Culling耗时是否下降,就能判断额外Camera是否确实贡献了这部分开销。 无论是社区里开发者们的互助讨论,还是AI基于知识沉淀的快速反馈,核心都是为了让每一个技术难题都有解、每一次踩坑都有回响。希望这些从真实开发场景中提炼的经验,能直接帮你解决当下的技术卡点,也让你在遇到同类问题时,能更高效地找到破局方向。 封面图来源于网络 今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。…

Read More
Categories News

Yt5s:免安裝線上下載 YouTube 影片 MP4、MP3

本文重點:Yt5s 是免安裝的線上 YouTube 影片下載工具,在瀏覽器貼上影片連結就能解析出各種格式,存成 MP4 影片或 MP3 音訊,畫質最高支援 4K,也能下載 Facebook、Instagram、X 影片與 YouTube Shorts。下方整理實際操作步驟,以及使用前要留意的著作權與安全風險。 在 YouTube 上遇到想反覆觀看的教學、想收藏的音樂,或是出門通勤時想先存起來離線看的影片,很多人第一個念頭就是把它下載到手機或電腦。但是 YouTube 官方提供的離線功能必須要付費訂閱 Premium 才能用,存下來的檔案也只能在 App 內播放,若是有其他需求就只能透過第三方工具下載,將影片保存、轉換為 MP3 或 MP4 等格式。 免費資源網整理兩篇 YouTube 影片下載轉 MP4、MP3 的教學文章,如果手邊的工具不能用,優先參考以下兩篇: 本文要介紹的「Yt5s」是一個免費的線上 YouTube 影片下載服務,直接在瀏覽器裡就能使用,不用額外安裝或下載任何軟體、外掛功能,也不需要註冊帳戶,只要把 YouTube 影片連結貼上,網站就會解析出各種可下載的格式,使用者選擇要存成有聲音的 MP4 影片、純音訊 MP3,還是不同解析度的畫質版本。 此外,Yt5s 還支援 Facebook、Instagram、X(Twitter)等平台,也可下載 YouTube Shorts 短影音與 YouTube Music。 Yt5s…

Read More
Categories News

GPM 2.0 WebGL 监测能力扩容|覆盖 Unity/Cocos/LayaAir 多引擎微信 & 抖音小游戏 – UWA问答 | 博客 | 游戏及VR应用性能优化记录分享

小游戏赛道蓬勃发展,除Unity之外,大量商业小游戏项目基于Cocos、LayaAir进行开发。 WebGL环境受浏览器虚拟机、单线程内存模型约束,线上版本普遍会遇到:偶发卡顿、内存持续上涨、GC抖动、低端机型闪退,大量问题线下模拟器难以复现,只能依靠玩家反馈被动救火。 GPM 2.0此前已经为Unity引擎开发的小游戏/WebGL上线了完整的专属线上监测体系,打通小游戏线上性能黑盒。本次迭代,扩展了SDK引擎适配范围,将这套线上性能监测能力,完整开放给Cocos、LayaAir引擎项目。至此GPM 2.0 WebGL监测可同时覆盖Unity、Cocos、LayaAir三大主流引擎的微信、抖音小游戏/WebGL项目,让更多小游戏团队可以享用同一套线上真实玩家性能分析能力。 ▘▖小游戏共性痛点:本地测试表现良好,线上却频出问题 无论使用Unity、Cocos还是LayaAir开发WebGL小游戏,都会面临共通的技术困境: 1.本地环境不等于真实玩家手机环境编辑器、PC浏览器测试流畅,但移动端浏览器内核、内存限制、iOS非JIT机制会放大各类性能缺陷,很多问题只在线上真实设备触发。 2.内存问题隐蔽难复现Cocos节点销毁不彻底、LayaAir资源缓存残留、JS对象频繁创建,会带来渐进式内存上涨。不会直接抛出崩溃报错,随着游戏时长累积逐步卡顿、被系统杀进程,线下很难复现完整长会话。 3.卡顿根因难以区分脚本逻辑阻塞、GC抖动、渲染过载、资源加载混杂在一起,玩家只反馈“玩起来卡”,缺少数据定位到底哪一部分导致问题。 4.偶发BUG复现成本极高部分卡顿、闪退仅出现在特定机型、特定操作序列,QA很难复现,问题长期悬置,持续带来玩家流失。 5.过去Cocos、LayaAir小游戏缺少专业线上监测工具,大多依靠打印日志与客服工单,数据碎片化,很难做版本回归、机型分层分析。 现在,GPM 2.0的整套WebGL线上分析能力,平台分析指标、回放逻辑、告警逻辑等功能扩展支持Cocos、LayaAir引擎项目。 ▘▖GPM 2.0 WebGL监测能力总览 整套能力为WebGL浏览器环境定制,不是通用性能工具简单兼容;SDK采集开销可控,画面截帧功能默认关闭,满足微信、抖音小游戏平台审核上线规范。 1.全维度线上性能时序指标采集持续采集真实玩家会话FPS、帧耗时、帧率抖动、网络延迟、加载耗时,生成时序趋势曲线。 可以捕捉本地测试容易忽略的瞬时性能尖峰、间歇帧率抖动;支持按版本、渠道、机型、游戏场景聚合筛选,看清不同群体玩家真实线上体验,不被开发机的良好表现误导。 包含性能数据&截帧的异常对话报告 2.内存趋势追踪,定位内存泄漏问题在运行环境支持的情况下,Unity、Cocos和LayaAir的WebGL项目均可采集WASM Heap、JS Heap以及二者组合得到的近似WebGL Heap指标。其中,JS Heap是否可用取决于浏览器或小游戏运行环境是否开放相关能力。 通过内存时序曲线,研发可以直观观察进入哪类场景、执行哪一类交互之后内存持续走高,快速定位资源残留、对象频繁创建等泄漏根源,排查渐进式闪退问题。 小游戏项目内存数据及趋势图 3.卡顿帧堆栈溯源+版本性能基线对比发生帧率暴跌或卡顿事件时,捕获对应调用堆栈信息,定位耗时代码逻辑、循环执行或资源加载等问题。 不用反复复现玩家故障,优化需求直接落地对应业务模块。同时支持新旧版本、活动前后横向基线对比,识别迭代引入的帧率下滑、内存上涨等性能劣化,明确调优优先级。 单个玩家一次对话中发生的卡顿帧堆栈信息 玩家全局卡顿汇总批量分析 新旧版本性能数据对比 4.玩家故障现场回溯,解决线上难以复现难题a.异常瞬间自动截帧:卡顿、帧率异常发生时留存游戏画面,直观看到故障时刻场景、UI、特效状态,不再只依赖玩家文字描述。⚠️ 提示:小游戏平台会受性能开销约束,截帧功能默认关闭,项目需要结合自身性能实测手动开启。 b.全链路玩家操作轨迹回放:记录玩家点击、滑动、场景跳转等交互行为,与性能时序曲线联动,复现完整会话,闭环偶发线上客诉。 在线玩家数据实时看板 玩家行为&性能数据&自定义事件一览 c.多维度定向筛选:支持渠道、机型档次、游戏场景、付费玩家分组过滤,可单独锁定低配机型、特定渠道独有的性能缺陷,针对性完成适配与资源轻量化。 5.覆盖小游戏完整研发运营生命周期能力贯穿项目:测试验收 → 版本上线 → 活动迭代 → 长线运营。 ✔…

Read More
Categories News

世界即時影像地圖 Tomarigi:4,700 個 YouTube 直播攝影機線上看

本文重點:Tomarigi 是一個把 YouTube 直播攝影機標示在立體地球上的免費網站,2026 年 8 月實測收錄 4,755 個鏡頭,分成城市、海洋、自然、動物、鐵道、地標、機場與河川道路等類別,台灣也有近百個位置。點一下地圖上的圖釘就能在頁面裡播放即時畫面,不用註冊也不用安裝任何程式。 想看此時此刻的威尼斯海灘、阿拉斯加棕熊、NASA 高速公路攝影機塔,或是深夜的阿里山奮起湖嗎?網路上有數以千計的 YouTube 直播攝影機二十四小時不間斷放送,不過這些即時影像多半散落在各地,除非事前就知道要搜尋的實際位置或頻道名稱,否則很難從茫茫網海中去找出想看的實況直播鏡頭。 Tomarigi 是什麼? 本文要介紹的「Tomarigi」是一個把這些直播全部標示在地圖上的免費網站,名稱來自日文「とまり木」,也就是鳥兒停歇的橫木。開發者把它形容成是全球直播攝影機的棲息地。目前這裡已集合超過 4,700 個 YouTube 直播攝影機畫面,全部都被標在立體地球圖上,轉動時還能看出目前該地區是白天或是夜晚,透過每一個代表攝影機的圖釘標記,點一下就能在頁面裡播放即時畫面,不用跳出、不用註冊,也不用安裝任何應用程式就能用。 這個網站將收錄的直播攝影機進行分類,涵蓋城市街景、海邊、山林、動物、鐵道、機場、地標與道路河川,台灣也有近百個可瀏覽的鏡頭位置,包括九份、台北街頭、各地漁港與國家公園。這些直播影像都是透過原頻道的 YouTube 官方嵌入播放器播出,不一定 100% 可用(有些似乎會有休息時段),Tomarigi 網站本身只負責整理位置和分類。 Tomarigi 收錄哪些類型的直播? 網站下方的分類列會直接標出每個類別目前的攝影機數量,以下是 2026 年 8 月實測的分布狀況。 分類 攝影機數量 常見畫面 城市 City 877 街景、廣場、車站前 海洋 Sea 784 港口、海灘、外海 自然 Nature 634 山景、森林、瀑布…

Read More
Categories News

对象销毁了,为什么材质还留在内存里

1)Material Instance为什么持续增长 2)动态生成Mesh后,为什么Mono内存变高了 这是第489篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。 UWA社区主页:community.uwa4d.com UWA QQ群:793972859 本次推送的实战案例来自于使用UWA服务的项目的真实且典型的问题。UWA将关键线索、定位路径与处理建议整理成了可复用的案例笔记,便于大家快速对照、排查自身项目中的同类问题。 实战案例 Q:项目运行一段时间后,Material Instance数量持续增长,从开始的100多个增加到2000多个,这是什么原因?应该如何排查? A:这种情况可以先排查运行过程中是否不断实例化了新的Material。报告中可以看到,某类技能材质(Instance)从最开始的100多个逐渐增加到2000多个,而且持续出现新的实例。这类现象通常需要结合技能、角色、特效对象的生命周期一起看,确认运行过程中是否不断产生新的Material Instance。 Unity中访问Renderer.material时,如果当前Renderer使用的是共享材质,Unity会为它实例化一份独立的Material。这里不只是调用SetColor、SetFloat等修改操作需要注意,仅仅访问Renderer.material本身,就可能触发实例化。如果只是读取或继续使用共享材质,可以检查是否应该使用Renderer.sharedMaterial。 真正容易被忽略的是材质和GameObject的生命周期并不是完全绑定的。通过Renderer.material等方式在运行时实例化出来的Material,不会因为对应GameObject被Destroy就自动完成资源释放,需要对这类动态材质单独管理。 比如技能释放时创建了临时特效对象,同时实例化了一份材质。技能结束后GameObject已经销毁,但这份Material没有被显式销毁,下一次释放技能又生成新的实例,长期运行后就可能看到Material Instance数量从几百一路涨到几千。未被使用的材质也可能在Resources.UnloadUnusedAssets()等资源清理过程中被回收,但不应该把它当成高频动态材质的主要生命周期管理方式。 排查时可以从持续增长的材质名称入手,再对应技能释放、角色生成、特效播放等操作做复现。如果每执行一次操作,某类Material Instance数量都会增加,而对应对象销毁后实例仍然保留,就需要继续检查这条材质创建和销毁链路。 优化时可以重点关注两个方向: 减少不必要的Material Instance创建。 检查是否存在只为了读取材质却访问Renderer.material的情况;如果只是修改颜色、Vector等每个Renderer不同的属性,也可以评估MaterialPropertyBlock是否适用,减少独立Material实例。需要切换Shader或Shader Keyword时,则不能简单用MPB替代。 显式管理动态材质生命周期。 如果确实需要实例化Material,需要保留对应引用,并在对象生命周期结束时显式Destroy。对于高频创建的技能、角色和特效,也可以进一步检查是否能够复用材质,而不是不断创建新的实例。 实战案例 Q:项目地图区域原本直接使用MeshRenderer,但动态加载、卸载时会有卡顿,后来改为在脚本中保存顶点等数据,运行时再动态生成Mesh。UWA GOT Online报告显示Mono内存占用较高,如何判断是否和这部分数据有关? A:可以先通过Memory Profiler确认Mono堆中的主要占用。如果其中存在大量顶点、矩阵等Mesh相关数据,再结合引用关系查看这些数据是否由地图区域相关脚本对象持有,就能进一步判断Mono占用是否和这套动态Mesh实现有关。 这里需要关注的并不是“动态生成Mesh”本身,而是为了生成Mesh,脚本侧长期保存了多少网格数据。例如C#侧保存了大量Vector3[]、索引数组或矩阵数据,这些内容会占用Managed Heap,也就是这里看到的Mono内存。随后再把这些顶点、索引数据提交给Mesh,Mesh自身还需要在Native侧维护对应的网格数据。 因此,如果Mesh已经生成,而C#侧的原始顶点、索引等数据仍然长期保留,就可能出现同一批网格信息同时占用Managed和Native两侧内存的情况。这里不能简单理解为固定的“双倍内存”,但确实需要同时关注两边的数据占用,而不能只看Mono。 排查时可以重点看: 确认Mono中的Mesh相关数据占了多少。 查看顶点数组、索引、矩阵等数据的数量和实际占用,再通过引用关系确认它们是否由地图区域相关脚本长期持有。 检查Mesh生成后,托管侧数据是否仍然需要保留。 如果网格生成完成后不再需要频繁修改,原始Vector3[]、List等数据就要确认是否还有长期保存的必要。如果没有其他引用,可以解除引用,让GC后续回收,而不是一直和Mesh同时保留。 检查是否存在多份数据。 如果原始地图区域数据、转换后的顶点数据、运行时Mesh和其他缓存同时存在,同一份区域信息就可能以不同形式占用多份内存。 此外还要关注动态Mesh生成过程中的临时分配。如果频繁创建新的Vector3[]、List等托管对象,会持续产生GC Alloc,Managed Heap扩容后也不一定会马上回落,因此会出现Mono内存长期维持在较高水位的情况。 Mono堆规模变大、需要管理的托管对象增多后,GC扫描和标记的成本也可能随之增加,因此这部分问题不仅体现在内存占用上,也可能进一步带来GC耗时。 如果项目使用的Unity版本和现有架构允许,还可以继续评估NativeArray、Mesh.SetVertices(NativeArray),以及MeshDataArray、Mesh.ApplyAndDisposeWritableMeshData等方式,减少动态网格构建过程中对Managed Heap的依赖。不过这属于进一步的实现优化,排查时仍然应该先确认:现在到底是哪一批数据占用了Mono,它们为什么还被脚本长期持有。…

Read More
Categories News

Claude、Codex 額度查詢:OpenUsage 在 Mac 選單列即時顯示用量

本文重點:OpenUsage 是 MIT 授權的開源 Mac 選單列工具,把 Claude、Codex、Cursor 等 10 種 AI 服務的剩餘額度、重置倒數與花費估算集中顯示,大部分服務會自動偵測登入憑證,裝好就能用,需要 macOS 15 以上版本。 現今的工作和日常生活已經脫離不了 AI 服務,手上同時有好幾個 AI 訂閱也不是什麼稀奇的事,例如:Claude 一個、Codex 一個、Cursor 一個,可能再加上 Grok 等,每家的額度規則都還不一樣,有的是以每五小時工作階段計算,有的算每週上限、有的是點數餘額,真正麻煩的地方是如果想知道 AI 額度還剩下多少,就得一個一個打開官方後台去查,久了就會發現其實浪費不少時間。特別是擔心用量不小心超過會吃到自己的餘額,就得小心翼翼以免不小心把額度用完。如果只是想在同一個介面比較各家 AI 的回覆,可以用 ChatHub 這類工具解決,不過訂閱制的額度還是得一家一家管理。 後來我就去網路上搜尋有沒有可以在 Mac 工具列顯示 AI 服務目前剩餘額度的工具,找到一款名為「OpenUsage」的開源工具,它的功能很簡單,就是把各家 AI 服務的用量、額度重置時間和花費全部抓回來集中顯示,只要抬頭瞄一下右上角就能知道自己這週燒得有多快。這個工具目前支援 Claude、Codex、Cursor、GitHub Copilot、Devin、Grok、Antigravity、OpenCode、OpenRouter 和 Z.ai 共十種服務。 OpenUsage 採用 MIT 授權完全開放原始碼,在 GitHub…

Read More