UG4L14——事件机制
UG4L14——事件机制
本章代码关键字
12eventContext.StopPropagation() //打断事件的冒泡传递eventContext.CaptureTouch() //按下后移动到对象外部抬起依然可以触发抬起
事件触发时的传递机制
举例说明:GRoot——>面板——>A——>B——>C
当C触发一个事件时,比如TouchBegin,该事件的触发会依次往上向父对象进行传递
C——>B——>A——>面板——>GRoot
它的事件触发的先后顺序也是如此,这种传递过程叫做冒泡传递机制
以面板右上角的按钮为例:
12345678910111213TeachPanel panel = UIManager.Instance.ShowPanel<TeachPanel>("teach");panel.m_btnTest.onTouchBegin.Add(() =>{ print("按钮按下");});pa ...
UG4L13——输入处理
UG4L13——输入处理
本章代码关键字
12345678910111213141516171819202122232425Stage.isTouchOnUI //判断是否点在了UI上GRoot.inst.touchTarget //获取指向的UI对象gObject.onTouchBegin.Add() //添加鼠标(左中右键)/手指按下的监听事件eventContext.inputEvent.button //获取按下的是哪个键gObject.onTouchMove.Add() //添加按下后移动的监听事件eventContext.inputEvent.x //获取移动的坐标x轴,是物理屏幕坐标,如果想使用UI坐标需要使用GRoot.inst.GlobalToLocal()转换eventContext.inputEvent.y //获取移动的坐标y轴,是物理屏幕坐标,如果想使用UI坐标需要使用GRoot.inst.G ...
UG4L12——坐标系统
UG4L12——坐标系统
本章代码关键字
123456gObject.LocalToGlobal() //输出元件在FGUI坐标系下的物理屏幕坐标gObject.GlobalToLocal() //获取物理屏幕坐标在UI元件上的局部坐标GRoot.inst.GlobalToLocal() //将元件在物理屏幕上的实际坐标转换为FGUI计算使用的逻辑屏幕坐标gObject.LocalToRoot() //将局部坐标转换为FGUI计算会使用的逻辑屏幕坐标(第二个参数必须传入GRoot.inst)gObject.RootToLocal() //逻辑屏幕坐标转换为相对于父元件的局部坐标(第二个参数必须传入GRoot.inst)gObject.TransformPoint() //计算相对于自己的某个位置相对于另一个元件的位置
FairyGUI的坐标原点
FairyGUI是以屏幕左上角为原点的,Unity的屏幕坐标是以左下角为原点
如果想转化屏幕坐标和UI坐标:
12345678910void Update(){ ...
UG4L11——分辨率自适应
UG4L11——分辨率自适应
本章代码关键字
1gObject.MakeFullScreen() //将组件大小填满屏幕
FairyGUI中的分辨率自适应
FairyGUI为手游开发提供了自动适应各种设备分辨率的UI适配策略
这意味着开发者只需要制作一套UI,就可以适配所有分辨率的设备
分辨率自适应具体步骤
制作UI时使用一套设计分辨率(以最大的全屏UI界面的大小为标准),比如:1136*640、1280*720、1920*1080等等
如何确定设计分辨率:
设计分辨率的确定主要按宽高比例设计 一般考虑市面上主流设备的分辨率比例,比如 16:9、19.5:9 等等
目前iphone主流机型分辨率比例为 19.5:9(2436*1125) 建议采用该比例设计 (选择较大比值)
采用该比例不是说就用2436*1125来做,因为分辨率越大,意味着图片越大,那么在使用时所占的内存就大
你可以根据自己游戏的实际情况来进行设计 比如 1950*900 也是 19.5:9
但是分辨率明显就小了,内存也就小了,当这个UI真正在2436*1125的屏幕上显示时,Fair ...
UG4L10——组件拓展类
UG4L10——组件拓展类
组件类拓展
FairyGUI提供了绑定一个类为组件的扩展类的功能,让我们可以更加面向对象的进行编程
回顾目前显示面板,处理面板逻辑的方式,目前我们的面板并没有声明一个类与之对应专门处理该面板的逻辑
这样的写法显然是不够面向对象的
通过view面板获取它的子对象 然后处理子对象 对应逻辑 初始化 或者 事件监听
组件类拓展就可以将某一个面板的逻辑封装到指定类当中
实现组件类拓展
创建自定义类继承 GComponent
123using FairyGUI;public class MyPanel : GComponent { }
重写 ConstructFromXML 方法,在其中初始化面板相关控件
12345678910111213141516171819202122using FairyGUI;using FairyGUI.Utils;using UnityEngine;public class MyPanel : GComponent{ public GTextInput inputTxt; pub ...
UEDL16——AssetImporter 和 AssetPostprocessor
UEDL16——AssetImporter 和 AssetPostprocessor
本章代码关键字
123456789101112131415AssetPostprocessor //主要用于处理资源导入时的通用逻辑,我们可以通过继承该类,并实现其中的一些回调方法来自定义处理资源assetPostprocessor.assetImporter //对应类型的资源导入器对象(AssetImporter类型),通过该属性来设置导入的资源assetPostprocessor.assetPath //导入资源的路径。该属性常用于导入资源时执行了回调函数后获取到导入资源的路径OnPreprocessTexture() { } //继承AssetPostprocessor的类声明该方法,导入纹理资源之前会调用,允许修改纹理的导入设置OnPostprocessTexture() { } //继承AssetPostprocessor的类声明该方法,导入纹理资源 ...
UEDL15——CompilationPipeline公共类
UEDL15——CompilationPipeline公共类
本章代码关键字
123CompilationPipeline //用于处理代码编译相关的操作和事件的公共类CompilationPipeline.assemblyCompilationFinished //当一个程序集编译结束会主动调用该回调函数CompilationPipeline.compilationFinished //当所有程序集编译结束会主动调用该回调函数
CompilationPipeline公共类
它是 Unity 编辑器中的一个公共类,用于处理代码编译相关的操作和事件的
对于我们来说,我们最常用的是利用它得知代码是否编译结束,比如动态生成脚本时,我们需要在编译结束后才能使用新的脚本
关于CompilationPipeline的更多内容:
Compilation.CompilationPipeline - Unity 脚本 API(中文文档,部分翻译缺失)
Unity - Scripting ...
UEDL14——EditorApplication公共类
UEDL14——EditorApplication公共类
本章代码关键字
123456789101112131415161718//监听编辑器事件EditorApplication.update //每帧更新事件,可以用于在编辑器中执行一些逻辑EditorApplication.hierarchyChanged //层级视图变化事件,当场景中的对象发生变化时触发EditorApplication.projectChanged //项目变化事件,当项目中的资源发生变化时触发EditorApplication.playModeStateChanged //编辑器播放状态变化时触发EditorApplication.pauseStateChanged //编辑器暂停状态变化时触发//管理编辑器生命周期相关EditorApplication.isPlaying //判断当前是否处于游戏运行状态。EditorApplication.isPau ...
UEDL13——PrefabUtility公共类
UEDL13——PrefabUtility公共类
本章代码关键字
123456PrefabUtility //提供用于处理 Prefab(预制体或称预设体)的方法的公共类PrefabUtility.SaveAsPrefabAsset() //动态创建预设体文件PrefabUtility.LoadPrefabContents() //加载预设体到内存内,可以用于深度修改预设体,如添加移除游戏对象或脚本,或者修改父子关系,使用完毕必须释放PrefabUtility.UnloadPrefabContents() //卸载加载到内存的预设体,LoadPrefabContents()调用后必须调用该方法PrefabUtility.SavePrefabAsset() //保存对预设体文件的修改,局限性较大PrefabUtility.InstantiatePrefab() //将预设体文件对象实例化到场景后上
PrefabUtility公共类
它是 Unity 编辑器中的一个公 ...
UM4L6——打包测试
UM4L6——打包测试
接入SDK后的打包
在接入SDK后,理论上来说,通过Unity打包或AndroidStudio打包都是可以的
只要我们保证Unity中导入了对应SDK会用到的第三方aar或jar
但是为了避免依赖的第三方库或系统库找不到,建议选择AndroidStudio打包
使用Android Studio打包
Android Studio打包具体可看:UM1L5——Android Studio打包安卓应用
如果遇到了问题(如出现两个图标等),请参考:UM3L5——Unity中嵌入Android内容 中的使用Android Studio打包相关内容
显示效果
安装后,点击获取定位按钮,效果如下:
注:如果你在真机尝试时定位不到,请先检查是否开启了定位权限,然后将测试真机拿到室外去尝试定位,否则可能无法返回正确消息