Unity—UGUI
2015-08-26 17:53
441 查看
UGUI在处理自适应Canvas Scaler。
我们要做的就是3DCamera的自适应。把下面这个脚本挂在Main Camera上即可。
在UGUI中想设置一张全屏的背景图,但是直接设置 screen.width和screen.height后发现在有些分辨率下还是不能全屏。
rectTransform.sizeDelta
=
new
Vector2(Screen.width,Screen.height);
把如下脚本挂在需要全屏的Image对象上即可。
using
UnityEngine;
using
System.Collections;
public
class
UIMaskLayer
:
MonoBehaviour
{
void
Start()
{
int
width
=
Screen.width;
int
height
=
Screen.height;
int
designWidth
=
960;//开发时分辨率宽
int
designHeight
=
640;//开发时分辨率高
float
s1
=
(float)designWidth
/
(float)designHeight;
float
s2
=
(float)width
/
(float)height;
if(s1
<
s2)
{
designWidth
=
(int)Mathf.FloorToInt(designHeight
*
s2);
}
else
if(s1
>
s2)
{
designHeight
=
(int)Mathf.FloorToInt(designWidth
/
s2);
}
float
contentScale
=
(float)designWidth/(float)width;
RectTransform
rectTransform
=
this.transform
as
RectTransform;
if(rectTransform
!=
null){
rectTransform.sizeDelta
=
new
Vector2(designWidth,designHeight);
}
}
}
我们要做的就是3DCamera的自适应。把下面这个脚本挂在Main Camera上即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | using UnityEngine; using System.Collections; using UnityEngine.UI; public class CameraScale : MonoBehaviour { void Start () { int ManualWidth = 960; int ManualHeight = 640; int manualHeight; if (System.Convert.ToSingle(Screen.height) / Screen.width > System.Convert.ToSingle(ManualHeight) / ManualWidth) manualHeight = Mathf.RoundToInt(System.Convert.ToSingle(ManualWidth) / Screen.width * Screen.height); else manualHeight = ManualHeight; Camera camera = GetComponent<Camera>(); float scale =System.Convert.ToSingle(manualHeight / 640f); camera.fieldOfView*= scale; } } |
rectTransform.sizeDelta
=
new
Vector2(Screen.width,Screen.height);
把如下脚本挂在需要全屏的Image对象上即可。
using
UnityEngine;
using
System.Collections;
public
class
UIMaskLayer
:
MonoBehaviour
{
void
Start()
{
int
width
=
Screen.width;
int
height
=
Screen.height;
int
designWidth
=
960;//开发时分辨率宽
int
designHeight
=
640;//开发时分辨率高
float
s1
=
(float)designWidth
/
(float)designHeight;
float
s2
=
(float)width
/
(float)height;
if(s1
<
s2)
{
designWidth
=
(int)Mathf.FloorToInt(designHeight
*
s2);
}
else
if(s1
>
s2)
{
designHeight
=
(int)Mathf.FloorToInt(designWidth
/
s2);
}
float
contentScale
=
(float)designWidth/(float)width;
RectTransform
rectTransform
=
this.transform
as
RectTransform;
if(rectTransform
!=
null){
rectTransform.sizeDelta
=
new
Vector2(designWidth,designHeight);
}
}
}
相关文章推荐
- unity调用 安卓相册
- Unity Jonit(关节)
- Unity3d获得android和ios设备的唯一标识
- 【跟随】Kirill Muzykov大神 Unity UGUI(1)
- Unity接入移动MM支付(Android)
- Unity笔记 2D ROGUELIKE 实例详解
- Unity3D热更新全书-何谓热更新,为何热更新,如何热更新
- Unity Bug 修复系列
- Unity物体上下反复漂浮效果
- unity Kinect v2 with MS-SDK20绿屏抠像shader修改 透明背景
- 如果在 unity中滚动 3D 骰子
- Unity Game Programming AI(1)人工智能导论
- Unity3D圣典学习【2】之CharacterController
- Unity Notes调制粒子系统的颗粒的最大数目
- Unity 热更新之AssetBundle
- Unity3d动画脚本 Animation Scripting(深入了解游戏引擎中的动画处理原理)
- Unity3D官方案例--太空射击游戏总结
- Unity之弹床(蹦床效果)
- Unity3D中引用Spine2D动画研究学习(一)
- Unity使用Animator实现人物头部朝向鼠标