Allen Kashiwa Blog

羁旅红尘不曾醉,笑歌年少且长行。

专注游戏开发与设计


唯佳人与游戏不可辜负

UGUI动态加载对话框

这是一篇关于使用Unity新的UI系统制作对话框并实现动态加载的教程。

#1.准备工作

##1.1新建一个Unity项目(Unity版本需要4.6以上),2D项目3D项目均可。

##1.2如图设置Game窗口的Aspect为1920 x 1080

game_aspect.png

##1.3将Scene窗口调整为2D查看模式。

##1.4在Project窗口中新建Scenes,Scripts,Resources/Prefabs等文件夹,保存当前场景至Scenes文件夹。

#2.编辑UI对象

##2.1创建UIRoot 如图使用菜单新建一个Panel

new_panel.png

此时会在Hierarchy自动生成一个Canvas对象及其子对象Panel,一个EventSystem对象,如图:

hierarchy.png

将Canvas重命名为UIRoot,并设置其Tag为UIRoot。

##2.2创建对话框及其他组件 ###2.2.1创建对话框 将Panel对象重命名为Dialog。如图设置将其Rect Transform的Anchor Preset设置为middle - center,将其width设置为300,height设置为150。

dialog_set.png

###2.2.2创建其他组件 如上方法使用创建UI对象菜单依次为Dialog对象添加一个Text子对象,一个Button子对象。此时Hierarchy窗口如图所示:

final_hierarchy.png

将Text对象及Button对象的Rect Transform设置为如图所示: Text:

text.png Button:

button.png

其中这两个对象的文字部分设置为自己喜欢的即可。 这是完成后的Game窗口:

final_game.png

##2.3将编辑好的UI对象存成Prefab 将Dialog对象选中并拖动到Resources/Prefabs文件夹中,并删除Hierarchy下的Dialog对象,为动态加载做准备。

#3.动态加载

##3.1编辑脚本

在Scripts文件夹中新建C#脚本LoadDialog.cs,并修改其Start函数:

    void Start()
    {
        GameObject UIRoot = GameObject.FindWithTag("UIRoot");
        if (UIRoot != null)
        {
            Object dialogPrefab = Resources.Load("Prefabs/Dialog") as Object;
            if (dialogPrefab != null)
            {
                GameObject dialog = Instantiate(dialogPrefab) as GameObject;
                dialog.transform.SetParent(UIRoot.transform, false);
                dialog.transform.SetAsLastSibling();
            }
            else
            {
                Debug.Log("Failed to load prefab file");
            }
        }
        else
        {
            Debug.LogError("There is not a GameObject with tag UIRoot");
        }
    }

##3.2设置脚本

在MainCamera中添加LoadDialog脚本。

最后运行程序,查看效果。

我已将我的工程文件上传至github以供参考,运行UGUIDialog.unity即可。

用支付宝请我喝咖啡

用微信请我吃辣条

最近的文章

Unity3d开发中的特殊文件夹

AssetsAssets文件夹是unity项目中放置游戏资源的主文件夹。该文件夹中的内容将直接反应在编辑器的Project视口中。许多系统API基于该文件夹。与脚本编译顺序相关的文件夹在unity开发中,我们可以为自己的项目随意命名文件夹以管理游戏资源,包括代码资源。但unity保留了一些特殊文件夹用来做特殊用途,例如编译顺序。unity的脚本编译有4个阶段(phase),脚本处在哪个编译阶段取决于脚本所在的文件夹。如果你的一些脚本需要引用一些别的文件夹中定义的类,则需要关心他们的编译顺序...…

继续阅读
更早的文章

游戏开发者之路

从事游戏开发近一年时间,学到很多,也知道还有很多要学。在这里做一点小小总结,一是规划自己以后的路,二是让那些想做游戏开发的后来者少走弯路。注:本文主要针对游戏程序部分,但不限于此。如果你是喜欢看书的类型,那么clayman长期维护的这篇文章可能比较适合你:游戏程序员养成计划。计算机基础计算机基础的知识在大学阶段基本能够完成。有遗漏的,可以参考网易云课堂的计算机专业课程。但是参加工作后可能没有那么多集中的时间可以再夯实基础,只能在工作之余尽量补上了。其中,计算机组成原理,操作系统,计算机系统...…

继续阅读