有时候会发现 Unity UI 非常耗时,在 Profiler 中可以轻易的看到 UI 中 的 GraphicRaycaster.Raycast 单帧调用可以成百上千,甚至好几千,帧速率前不忍赌,一关掉 UI 立马满血复活.      这种情况大多出现在一是 Canvas 比较多而且子节点添加 GraphicRaycaster  组件也比较多的情况:二是每个 Canvas 下面有很多个 UI 面板,而每次其实显示的只有那么几个,不用的隐藏 SetActive(false),使用的激活显示 Set…
unity ui中鼠标移进或者移出的触发方式与2d.3d的不同,2d.3d物体使用的是onmouseover,ui使用的是OnPointerEnter.需要实现以下两个接口. public class TrackMouse: MonoBehaviour, IPointerEnterHandler, IPointerExitHandler { // Called when the pointer enters our GUI component. // Start tracking the mou…
本文将介绍一些提升Unity UI性能的技巧.更多优化技巧,可以观看Unity工程师Ian Dundore在Unite Europe 2017的演讲<使用Unity性能提升技巧>. 1.划分画布 问题:UI Canvas上有一个或多个元素变化时,会污染整个画布. 画布(Canvas)是Unity UI的基本组件.它会生成网格来呈现放置在画布上的UI元素,当UI元素变化时,它会重新生成网格并向GPU发起绘图调用,从而显示出UI. 生成这些网格会消耗大量性能,需要将UI元素收集到批处理中,从而尽可…
CPU bound:CPU性能边界,是指CPU计算时一直处于占用率很高的情况. GPU bound:GPU性能边界,同样的是指GPU计算时一直处于占用率很高的情况. 原文:https://unity3d.com/cn/learn/tutorials/temas/performance-optimization/optimizing-graphics-rendering-unity-games?playlist=44069   简介 在这篇文章中,我们将学习Unity渲染一帧时在幕后会发生什么,渲…
原地址:http://blog.sina.com.cn/s/blog_72b936d80100wwej.html 以下是i3D的一篇Unity教程中的笔记. i3D的这篇教程是[i3D.Next-Gen.Game.Development.with.Unity3D.Volume.I]对Unity有兴趣的CGer可能有帮助.----------------------------------------------------------------Fbx.贴图导入Unity时的注意事项:在导出Fb…
在这篇教程中你会学习如何扩展你的Unity3D编辑器,以便在你的项目中更好的使用它.你将会学习如何绘制你自己的gizmo,用代码来实现创建和删除物体,创建编辑器窗口,使用组件,并且允许用户撤销他们所作出的任何动作,这些全部都是用编辑器脚本来实现的. 这篇教程假设你已经熟悉Unity的基本工作流程.如果你知道如何在编辑器中创建物体.预设.场景并且知道如何移动它们,知道如何添加组件,那么你可以开始本教程的学习了. 最终结果预览 让我们看一下我们做出的最终结果是什么样子: 如你所见,我们会创建一个编辑…
1.Unity调用Android的方法默认不是在UI线程执行,所以在Android上写一些页面的重绘的方法,让Unity去调用时,注意要在Android中添加对应的runOnUiThread才可以: 2.Android library中包含资源,此时需要将资源导入到Unity项目中,那么在Android中就不可以直接使用R.id来寻找资源,而是必须通过下面方式: public static int getLayoutResIDByName(Context context, String name…
https://unity3d.com/cn/learn/tutorials/topics/best-practices/fundamentals-unity-ui?playlist=30089 理解组成Unity UI系统的各个部分很重要.一些基础的类和组件一起组成了这个系统.这一章节介绍一些的这系列文章所用到的术语,然后讨论一些Unity UI 关键系统的底层行为. 术语 Canvas是Unity的一个内部组件(native-code Unity Component).由Unity渲染系统使…
1. 协程 在Unity 3D中,我们刚开始写脚本的时候肯定会遇到类似下面这样的需求:每隔3秒发射一个烟花.怪物死亡后20秒再复活之类的.刚开始的时候喜欢把这些东西都塞到Update里面去,就像下面这样写. float nowTime = 3.0f; bool isDead = true; float deadTime = 20.0f; void startFireworks() { // 放烟花 } void revival() { // 复活 } void Update () { ) { s…
UIGrid 加载面板时,如果面板中含有大容量的 UIGrid,可能会很卡.我们可以只加载 UIGrid 的前 n 个单元格对象,在显示面板之后,利用协程加载剩余的所有单元格,每帧加载 m 个. 同样的,含有大容量 UIGrid 的面板,在关闭时,调用 Destroy 函数也会导致卡顿.可以在关闭面板时,将UI面板的摄像机关掉,然后将该面板对象全部收集到LIST中,然后利用协程依次从下到上删除对象,每帧删除 x 个. 如果是不需要排序删除等操作的 UIGrid,感觉可以使用对象池技术,在滑动过程…