写在前面,现在UI都不需要咱们写代码来做自适应了,但是咱们的UI界面里含有模型特效,简单的说就是3
d物体在UI界面做自适应,这些是怎么做自适应的,今天这里介绍两个解决方案,这些是怎么做自适应的,今天这里介绍两个解决方案,两种方案的区别就是是否使用单独相机渲染。这里我们使用王者荣耀其中的一些画面来做解析。使用的UGUI,unity版本是5.4.3f1。Canvas的渲染模式是相机渲染。
大厅中有一个有特效的按键,这里咱们不知道他这个特效是用什么做的,我们就假设他用的骨骼动画与粒子系统。这样一个界面是不属于UI的。
这是展示一个3d人物模型。在游戏中经常会有这样的而操作。
第一种不使用单独摄像机
原理
通过UI自适应的改变的rect大小,计算出rect变化的比例,然后修改游戏物体的scale的小大。具体的编写的代码在这里。
用法
需要把要自适应的物体新建一个空的游戏物体命名为FxAutoSize把框住。如下图。
然后再把这个FxAutoSize的锚点设置成自适应,添加AutoSize脚本。
点击“设置原始大小参照物”按钮,会生成一个OriginalSize参照空物体。再把需要自适应的物体赋值给OriginalTrans即可。
这里可以设置每一帧自适应与开始自适应。
第二种使用单独摄像机
原理
这个方式真的是厉害了,不需要写一句代码。
跟游戏中小地图的做法一个原理,使用的RenderTexture,使用RawImage把RenderTexture呈现出来,就作为一个UI来做自适应了。
用法
新建一个摄像机,把相机的Size调整到游戏物体适合大小。
新建一个RenderTexture,把RenderTexture赋值给TargetTexture。
新建一个GameObject,增加一个RawImage组件,把RenderTexture赋值给RawImage。设置自适应锚点即可。
总结
很明显第二种要好一些。简单一些。这些游戏物体会有粒子系统,不能让粒子满屏幕跑,所以需要做一个遮罩,这个时候用第二种方式就可以很简单的控制摄像机的size来达到这个效果。当然第一种方式也可以使用shader来实现,但是这个就会更加的繁琐。不好控制。
就先写这么多吧。