给你一个关于怎么去设置Canvas(画布)工作的建议

提供Canvas(画布)来创建UI。Canvas有以下三种渲染模式:
1. Screen Space Camera
2. Screen Space Overlay
3. World Space
现在,我们做一个简单的例子,让我们对这些选项一个一个的测试,以便我们能更好去了解它。
1.Screen Space Camera
首先,我们创建一个Unity工程,并且进一步的理解它:
C#脚本: MoveCamera.cs

1. 在你的Scene视图下创建一个Canvas
2. 设置它的Renderer mode(渲染模式)选项为:Screen Space - Camera
3. 拖拽Main Camera到该选项条上去

4. 在Canvas下创建一个Panel,且随便拿一张图片或纹理作为背景
5. 在Canvas下创建尽可能多的Text、Panel、Image

6. 为Main Camera添加如下脚本


[C#]  纯文本查看  复制代码
?
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using UnityEngine;
   using System.Collections;
   public class MoveCamera : MonoBehaviour
   {
       private float velocity = 0.0f;
       private float smoothTime = 0.3f;
       private bool moveCamera = false ;
       public Vector3 initialPosition;
       public Vector3 targetPosition;
       public float lerpSpeed;
       public float initialZ;
       public float targetZ;
       public Camera cam;
       void Update ()
       {
           if (Input.GetMouseButtonDown (0)) {
               initialPosition = transform.position;
               targetPosition = new Vector3 (transform.position.x + Random.Range (-5, 5), transform.position.y +                 Random.Range (-5, 5), transform.position.z);
               initialZ = transform.eulerAngles.z;
               targetZ = initialZ + Random.Range (-50, 50);
               moveCamera = true ;
               lerpSpeed = 0;
           }
           if (moveCamera) {
               CameraMovementMethod ();
           }
       }
         private void CameraMovementMethod ()
       {
           lerpSpeed = Mathf.SmoothDamp (lerpSpeed, 1.0f, ref velocity, smoothTime);
           cam.transform.position = Vector3.Lerp (initialPosition, targetPosition, lerpSpeed);
           cam.transform.eulerAngles = new Vector3 (0, 0, Mathf.LerpAngle (initialZ, targetZ, lerpSpeed));
       }
   }
7. 为脚本中的Cam参数赋值(把Main Camera拖拽上去)


8. 使用安卓手机连接Profiler进行测试(如果不会的朋友,请观看手机 连接Profiler教程篇;如果真的很懒的话,那就直接播放,然后这在拖动Transfrom上的Position或者Rotation改变它的值即可)


9.选择Unity中canvas画布

10. 在Profiler里的Search中输入“Canvas”,你将会在Profiler中看到一些Canvas数据。

     
你可以在上图中看到,有许多与Canvas的函数都被调用了,特别是CanvasRender.OnTransformChanged调用的次数最多
每当相机移动或者旋转,与Canvas相关的函数就会被调用将近50次。
Note:Calls的数值取决于在Canvas里使用UI元素的数量
我们可以更好的理解下面这张GIF图:

如上图所示,在游戏场景中Canvas跟随相机一起移动。因此,这便导致在Canvas里的UI元素在Unity引擎中必须重新定位,所以UI元素越多,需要消耗的性能就越高。
那么解决方案是什么?
2Screen Space Overlay

现在,改变Canvas的渲染模式为 Screen Space Overlay,并且重复上面的步骤,然后在Profiler的Search中输入Canvas,注意数据的变化
注意Calls数据的变化,是否已经减少了?现在Calls显示的数据加起来差不多等于前面Screen Space Camera模式所显示的Calls数据的个位数。
哈哈,这么一来我们优化了大约90%的性能,是不是很神奇啊?

        看看上面的GIF图
   如上图所示,Canvas在Unity空间的位置保持不变,相机的移动不会影响Canvas及Canvas里的所有UI元素。(它能会静静的在那里装逼,动都不动了)
   因此,就不再需要为Canvas里的UI元素重新定位,这便减少了Calls的次数,优化了性能
   这样我们的优化任务算是完成了
3  World Space
  在World Space渲染模式下,Canvas渲染对于每一个视图必须手动的管理,这造成的Calls和Screen Space Camera模式所造成Calls数量差不多,因此不再详述。
总结:
  Screen Space Camera模式 和 World Space模式都会造成大量的Calls,所以还是建议大家使用Screen Space Overlay模式,这样有利于性能的优化,提高了游戏的可玩度。

转自:http://www.manew.com/thread-95049-1-1.html
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值