一坐标系统
(1)坐标原点
FairyGUI是以屏幕
左上角为原点
,Unity的屏幕坐标是以
左下角为原点
,如果需要转换
//Unity的屏幕坐标系,以左下角为原点
Vector2 pos = Input.mousePosition;
//转换为FairyGUI的屏幕坐标
pos.y = Screen.height - pos.y;
(2)坐标转换
1.
获取本地坐标点 以及全局坐标和本地坐标之间的转换关系
//GObject里的x/y/position值都是局部坐标
_backBtn = _mainView.GetChild("btn_Back");
//_backBtn.x
// _backBtn.y
// _backBtn.position
//_backBtn.xy
//获取_backBtn在这个FairyGUI 的屏幕坐标
Vector2 screenPos = aObject.LocalToGlobal(_backBtn.xy);
//获取屏幕坐标在_backBtn里的局部坐标
Vector2 localPos = aObject.GlobalToLocal(screenPos);
-
适配问题导致的逻辑坐标(GRoot内的坐标 )和物理坐标的不一直
本地坐标和屏幕坐标的转换,逻辑屏幕就是FairyGUI显示区域的大小
//物理屏幕坐标转换为逻辑屏幕坐标
Vector2 logicScreenPos = GRoot.inst.GlobalToLocal(screenPos);
//UI元件坐标与逻辑屏幕坐标之间的转换
aObject.LocalToRoot(pos);
aObject.RootToLocal(pos);
//想知道aObject里的(10,10) 在bObject里的位置 可以使用TransformPoint方法
Vector2 posInB = aObject.TransformPoint(new Vector2(10,10), bObject);
(2)与世界空间坐标转换
1.如果要转换
世界空间的坐标到UI里
的坐标,需要先将世界空间的坐标转换为屏幕坐标,再继续转换
Vector3 screenPos = Camera.main.WorldToScreenPoint(worldPos);
screenPos.y = Screen.height - screenPos.y;
Vector2 pt = GRoot.inst.GlobalToLocal(screenPos);
2.如果要转换
UI里的坐标到世界空间的坐标
,需要先将UI里的坐标转换为屏幕坐标,再继续转换
Vector2 screenPos = GRoot.inst.LocalToGlobal(pos);
//原点位置转换
screenPos.y = Screen.height - screenPos.y;
一般情况下,还需要提供距离摄像机视野正前方distance长度的参数作为screenPos.z(如果需要,将screenPos改为Vector3类型)
Vector3 worldPos = Camera.main.ScreenToWorldPoint(screenPos);
二 字体的处理
(1)使用动态字体
//设置全局字体:
UIConfig.defaultFont = "Droid Sans Fallback, LTHYSZK, Helvetica-Bold, Microsoft YaHei, SimHei";
注意
:
多个字体名称用逗号隔开。Unity会自动使用第一个能识别的字体名称。但必须有一个是能识别的。能识别的意思是,必须是在系统环境中存在的字体,且字体名称一定要正确。假设你设置了“微软雅黑”,那手机上肯定是没有的,显示效果就达不到期望。
(2)使用TTF字体
//font1.ttf已经放置放置在Resources目录:
UIConfig.defaultFont = "font1";
//如果需要将字体打包到AssetBundle,那么需要自行加载并注册字体
Font myFont = myBundle.LoadAsset<Font>(name);
FontManager.RegisterFont(new DynamicFont("字体名称", myFont),"字体名称");
(3)字体映射
这里用到了”黑体”这个名字的字体,
但”黑体”未必能被Unity识别
,更加不能在手机上生效。我们需要建立一个这种字体到已知字体的映射。假设我们已经按照上述方法,准备好一个TTF字体HeiTi.ttf
//RegisterFont的第二个参数对应编辑器里使用的字体名称;第一个参数,就是Unity能识别的字体名称,参考上面的“使用动态字体”和“使用TTF字体”。
FontManager.RegisterFont(FontManager.GetFont("HeiTi"), "黑体");
(4)字体设置
//设置粗体
FontManager.GetFont("字体名称").customBold = true;
//粗斜
FontManager.GetFont("字体名称").customBoldAndItalic = true;
//描边
FontManager.GetFont("字体名称").customOutline=true
版权声明:本文为qq_39873732原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。