游戏UI原型框架
上一个文章搞了一个原型框架,基于DoozyUI
这里记录下基础用法
搜先还要说一下1)“商业化”,2)”开源“ 这两个东西分开都已经是大坑,2者一融合变成巨坑,如果没有破釜沉舟的勇气,就不要入坑了
就不多解释了,直接看用法
实际开发过程中真很坑,并没有下面说的使用方法那么爽,那么顺畅,最后面会补充各种坑的解决方法
UIPopup
Keyi可以参考我之前的文章
下面部分代码参数没粘贴出来,请自行补充
if (mPopup == null)
{
mPopup = UIPopupManager.GetPopup("popLuan");
//阅读代码后发现,无论UIPopupManager,还是UIPopup->GetPopup()后会克隆一份,所以必须通过模组级别变量持有,
//否则,一直New Popup对象,都是全新的,并不是我们真正需要的那一个Popup实例
//也就是下面代码都没什么卵用
//popup = UIPopup.GetPopup("popLuan");
//UICanvas canvas = popup.GetTargetCanvas();
//popup.Container.RectTransform = canvas.RectTransform;
//popup.Overlay.RectTransform = popup.Container.RectTransform;
//UIPopupManager.AddToQueue(popup);
}
UICanvas canvas = mPopup.GetTargetCanvas();
mPopup.Container.RectTransform = canvas.RectTransform;
mPopup.Overlay.RectTransform = mPopup.Container.RectTransform;
/ 还特喵的需要补上这一句(才能Show和Hide安全调用)//
if (canvas.gameObject.activeSelf == false)
canvas.gameObject.SetActive(true);
mPopup.Show();
UIView
国内某些手游开发者不喜欢多一个View层,就是觉得Window + Dialog就行了,这也是国内造了多个轮子之后的最佳实践,进可快速换皮,退可做代码扩展,到底怎么做才好貌似并没有公论
但DoozyUI这个框架就是比较“西化”,所有动画都基于UIView(绑定有点死),好处就是提供类似Widget的功能。我们也只能这么用了1个Canvas + 多个View
其中一个必须注意的点就是必须勾选
When UIView is hidden diable :1) GameObject
圆形按钮
其实很简单就是改按钮的Image,还可以调色
DoozyUI这框架还提供了很多基础Shape,圆形三角形都有,空心实心的很多
View管理
错误删除了一个空Category就狂出错
这个问题没办法避免的,其他Unity插件更甚,DoozyUI已经算做的很好了(Debug Toggle,Debug Log,可视动画,出错Inspector又红色,等等的提示,可以说已经用尽一切方法帮助使用者(我们),程序员能懂其用心)
解决方法:懒得贴的,也是必须阅读开源源码
之后又碰到,view显示不出问题,
主要是“可视乎”界面,对接的字写错了,还是,通过阅读开源源码可定位
* UIView的命名必须对上
另外,千万不要按Reset;
因为你真的不知道他这个Reset按钮干了啥;
你也不知道你同事干了啥,要是项目已经开展一个月,国内的996,你再按Reset,原地爆炸
巨坑
这么多坑,搞得定才有鬼,其实真正工作中不会用到,那些做教学的良心不会痛吗
DoozyUI这个框架最让人配合的确实是他的动画和UI的优雅
它本身的插件功能,Nody Graphy Control等都做了很多动画,这是其他插件所没有的,国内团队很欠缺的,也是让我对它的团队极度有信息;
起码项目经理知道自己想要什么,并推动做成产品,做的很成功。虽然很多坑。
它的团队本身就明显擅长UI动画和过程管理,所以做的这个DoozyUI插件也是有保障
诚然,难道会是我们一群理工科的工程师能做出这样的产品
不过我们还是得从理性分析得角度说说他的坑
UIView需手动注册
UIView必须默认不能inActive,必须整个场景加载时,可以搜索的到,然后再把view隐藏,触发时再调用Show方法
我%……¥……%!¥&!@%*!&@@@
public UIView[] views;
void Start () {
没什么作用的代码。。。。。。。。
UIPopupManager.A
//UICanvas canvas = UICanvas.CreateUICanvas("MyNewCanvas");
//currSceneName = "Base";
//TODO:UIView 暂时隐藏所有,一开始加载还是慢的, 最终还是要优化
foreach (var v in views) {
v.gameObject.SetActive(false);
}
}
Animation的实现一点不省
Move,Rotate,Scale,Fadeout,不管你有没设数值,代码操作一遍;非手游你就随便作是吧?
代码就不贴了
太多Behviour看上去不错,实际上你懂的,满满都是坑