您的位置:首页 > 产品设计 > UI/UE

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作为公共属性的管理。譬如在设置里面保存声音的大小。

#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,展望下未来!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: