ARPG游戏实战之UI框架应用篇
2016-01-04 13:39
609 查看
svn repo:http://code.taobao.org/svn/ARPGProject/
项目已开源。
还是不太适合用git,开源项目也没在本机架设服务器,省的机器24小时不关。
这个项目可以做为一个协同项目来做。因为框架把整个游戏都分工的很明确的。
准备先做UI和数据这块,战斗系统到底是是以什么形式去做还没想好。
版本7之前是框架的部署。版本11做了两个界面,一个MainUI和一个settingUI。
整体采用的是UGUI,这个之前是讲过的。
未运行前的框架示意图
运行后的框架示意图
每一个界面都新建一个Canvas,做好适应。
TableDataMgr作为读表的管理类,也作为完成读表后 ,回调显示第一个界面的加载。
AppMgr作为公共属性的管理。譬如在设置里面保存声音的大小。
关于事件的响应机制,这里我是用了EventTrigger,是真的好用。
在遍历整个list过程中,首先检索Btn,获取其EventTrigger,然后用(拉么哒)表达式,在OnBtnclick中判断gameobject.name来判断是哪个组件。
再次说,炒鸡好用。
这里还要说下遍历子节点的函数,用到了递归。
UI管理的核心是用命令行去管理的,每一帧调用一条命令,可以参见ComUtil这个类。
整个工程文件,自行下载查看。
版本11之前都是只有比较基础的两个界面,以刚接触unity的新手都能做出来,但是,用框架整个管理会让协作开发更便利。
之后会写主界面的一些UI和数据。
可能会更新整体框架的更细节的部分。
2016,展望下未来!
项目已开源。
还是不太适合用git,开源项目也没在本机架设服务器,省的机器24小时不关。
这个项目可以做为一个协同项目来做。因为框架把整个游戏都分工的很明确的。
准备先做UI和数据这块,战斗系统到底是是以什么形式去做还没想好。
版本7之前是框架的部署。版本11做了两个界面,一个MainUI和一个settingUI。
整体采用的是UGUI,这个之前是讲过的。
未运行前的框架示意图
运行后的框架示意图
每一个界面都新建一个Canvas,做好适应。
TableDataMgr作为读表的管理类,也作为完成读表后 ,回调显示第一个界面的加载。
AppMgr作为公共属性的管理。譬如在设置里面保存声音的大小。
#region 音乐音效大小 private const string MusicValueKey = "MusicValueKey"; private const string SoundValueKey ="SoundValueKey"; public float MusicValue { get { return PlayerPrefs.GetFloat(MusicValueKey, 1.0f); } set { float f = value > 1 ? 1 : value; f = value < 0 ? 0 : value; PlayerPrefs.SetFloat(MusicValueKey, f); } } public float SoundValue { get { return PlayerPrefs.GetFloat(SoundValueKey, 1.0f); } set { float f = value > 1 ? 1 : value; f = value < 0 ? 0 : value; PlayerPrefs.SetFloat(SoundValueKey, f); } } #endregion然后在去组件的回调函数里面直接去调用。
关于事件的响应机制,这里我是用了EventTrigger,是真的好用。
if (findTrans[i].name.StartsWith("Btn")) { EventTrigger btn = findTrans[i].GetComponent<EventTrigger>(); EventTrigger.Entry ev = new EventTrigger.Entry(); ev.callback.AddListener((BaseEventData arg0) => { OnBtnclick(btn.gameObject); }); ev.eventID = EventTriggerType.PointerClick; btn.triggers.Add(ev); }
在遍历整个list过程中,首先检索Btn,获取其EventTrigger,然后用(拉么哒)表达式,在OnBtnclick中判断gameobject.name来判断是哪个组件。
再次说,炒鸡好用。
这里还要说下遍历子节点的函数,用到了递归。
public static void GetTransformInChild(List<string> listName, Transform tran, ref List<Transform> trans) { if (listName.Contains(tran.name)) { trans.Add(tran); } if (trans.Count == listName.Count) { return; } for (int i = 0; i < tran.childCount; i++) { GetTransformInChild(listName, tran.GetChild(i), ref trans); } }开始在用这个函数的时候惊为天人,我以为会有几十行代码,然而就这么几行做了我想做的事情。点赞。
UI管理的核心是用命令行去管理的,每一帧调用一条命令,可以参见ComUtil这个类。
整个工程文件,自行下载查看。
版本11之前都是只有比较基础的两个界面,以刚接触unity的新手都能做出来,但是,用框架整个管理会让协作开发更便利。
之后会写主界面的一些UI和数据。
可能会更新整体框架的更细节的部分。
2016,展望下未来!
相关文章推荐
- 使用removeItemWidget时, UI不刷新的问题
- Queue on Bus Stop
- UINavigationController以及UITabBarController背景图片和文字的设置
- easyui 日期控件清空值
- 王立平-- ContentValues , HashTable , HashMap差别
- UIView
- iOS UIScrollView的属性
- Invalid result location value/parameter 解决办法
- Android开发学习之路-使用Handler和Message更新UI
- Ext Combobox 显示valueField值 不显示displayField问题
- iOS UI-表格控制器(UITableView)-基本使用
- iOS中UITableView性能优化
- 在UITableView或UICollectionView的自定义的cell里添加手势或button,响应方法时如何传参数
- iOS 中一个带尖角并且尖角指向固定点的UILabel
- 连接数据库超时设置autoReconnect=true
- UITabBarController使用
- 让ThreadPoolExecutor的workQueue占满时自动阻塞submit()方法
- Build Action
- UITextField 光标的缩进问题
- getContextPath、getServletPath、getRequestURI的区别