ARPG游戏实战之UI框架应用篇

svn repo:http://code.taobao.org/svn/ARPGProject/

项目已开源。

还是不太适合用git,开源项目也没在本机架设服务器,省的机器24小时不关。

这个项目可以做为一个协同项目来做。因为框架把整个游戏都分工的很明确的。

准备先做UI和数据这块,战斗系统到底是是以什么形式去做还没想好。

版本7之前是框架的部署。版本11做了两个界面,一个MainUI和一个settingUI。

整体采用的是UGUI,这个之前是讲过的。


未运行前的框架示意图

ARPG游戏实战之UI框架应用篇_第1张图片


运行后的框架示意图

ARPG游戏实战之UI框架应用篇_第2张图片

每一个界面都新建一个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.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 listName, Transform tran, ref List 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,展望下未来!







你可能感兴趣的:(Unity实战项目)