Unity开启篇(十九) —— Unity UI简介(六)

版本记录

版本号 时间
V1.0 2019.01.30 星期三

前言

Unity是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity类似于Director,Blender game engine, Virtools 或 Torque Game Builder等利用交互的图型化开发环境为首要方式的软件。其编辑器运行在Windows 和Mac OS X下,可发布游戏至WindowsMacWiiiPhoneWebGL(需要HTML5)、Windows phone 8和Android平台。也可以利用Unity web player插件发布网页游戏,支持Mac和Windows的网页浏览。它的网页播放器也被Mac 所支持。网页游戏 坦克英雄和手机游戏王者荣耀都是基于它的开发。
下面我们就一起开启Unity之旅。感兴趣的看下面几篇文章。
1. Unity开启篇(一) —— Unity界面及创建第一个简单的游戏 (一)
2. Unity开启篇(二) —— Unity界面及创建第一个简单的游戏 (二)
3. Unity开启篇(三) —— 一款简单射击游戏示例 (一)
4. Unity开启篇(四) —— 一款简单射击游戏示例 (二)
5. Unity开启篇(五) —— 一款简单射击游戏示例 (三)
6. Unity开启篇(六) —— Unity动画简介 (一)
7. Unity开启篇(七) —— Unity动画简介 (二)
8. Unity开启篇(八) —— Unity声音简介(一)
9. Unity开启篇(九) —— Unity声音简介(二)
10. Unity开启篇(十) —— Unity粒子系统简介(一)
11. Unity开启篇(十一) —— Unity粒子系统简介(二)
12. Unity开启篇(十二) —— Unity脚本简介(一)
13. Unity开启篇(十三) —— Unity脚本简介(二)
14. Unity开启篇(十四) —— Unity UI简介(一)
15. Unity开启篇(十五) —— Unity UI简介(二)
16. Unity开启篇(十六) —— Unity UI简介(三)
17. Unity开启篇(十七) —— Unity UI简介(四)
18. Unity开启篇(十八) —— Unity UI简介(五)

Adding a Rotating Gear Icon

有什么没做的,你不觉得吗? 哦,当然! 打开按钮本身上的旋转齿轮图标 - 在此部分开头的动画GIF图像中显示的图标。

1. Adding the Gear Image

您的第一步是将图像添加为btn_slide的子对象,并在菜单打开和关闭动画期间为其设置动画。

选择GameObject \ UI \ Image以创建新图像。 将其拖动到层次结构中的Btn_Slide上,将其添加为子对象。

之后,请按照下列步骤操作:

  • 1) 将图像重命名为Img_Gear
  • 2) 将Anchors设置为middle-center
  • 3) 将Pos XPos Y都设置为0。
  • 4) 在“项目”窗口中打开Menu文件夹,然后将slide_menu_gear图像拖到Inspector中的Source Image`。
  • 5) 单击Set Native Size

2. Animating the Gear Image

到目前为止,创建两个动画状态和在它们之间切换的参数的技术应该是第二天性。 因此,您应该能够创建左旋转齿轮并反转动画以自行制作右旋转齿轮。

以下是需要了解的详细信息:

  • 1) Animation duration应该与滑动面板动画相同,这很容易,因为本教程中的所有动画都只有1秒长。
  • 2) 齿轮应绕Z轴旋转360度(旋转Z)。
  • 3) 对参数名称使用相同名称isHidden,并将其默认值设置为true
  • 4) 请记住禁用循环和Animator组件。

如果您需要帮助,请参考下面:

Hierarchy中选择Img_Gear并打开Animation视图。 单击Create按钮创建一个新剪辑,并将其命名为gear_rotate_up。 将其保存在Animations文件夹中。

然后单击时间轴中的1:00标记。 之后,在Inspector中,将Rotation Z更改为360。

单击带有红色圆圈的按钮停止录制。

现在打开Project窗口中的Animations文件夹,然后选择gear_rotate_up。 在Inspector中,取消选中Loop Time

现在,是时候建立状态了。 在层次结构中选择Img_Gear,打开Animator视图,然后按照下列步骤操作:

1) 右键单击Animator,选择Create State,然后选择Empty
2) 在Inspector中,将状态命名为gear_idle
3) 右键单击gear_idle并选择Set as Layer Default State
4) 通过复制和粘贴来复制gear_rotate_up状态。
5) 将副本重命名为gear_rotate_down,并在检查器中将其Speed更改为-1。
6) 添加名为isHidden的新Bool参数,并将其默认值设置为true
7) 在状态之间创建两个转换。 在条件下,对于从gear_rotate_upgear_rotate_down的转换,将isHidden设置为true,对于反向转换,将isHidden设置为false
8) 创建从gear_idlegear_rotate_up的转换。 将isHidden条件设置为false

3. Triggering the Gear Animation from Code

要完成滑动菜单控制,您需要从代码中触发齿轮动画,但您只需要写几行。

在代码编辑器中打开UIManagerScript并添加以下实例变量:

public Animator gearImage;

然后向下滚动并找到ToggleMenu方法。 将以下内容添加到方法主体的底部:

public void ToggleMenu() 
{
    //..skipped..

    gearImage.SetBool("isHidden", !isHidden);
}

这将启用Animator组件并将其isHidden参数设置为与内容面板的Animator isHidden参数相同的值。

保存脚本文件并切换回Unity

在Unity中,在层次结构中选择UIManager。 将Img_Gear拖动到检查器中的Gear Image字段。

保存场景您的工作并运行场景,享受您喜欢的旋转齿轮图标。

做得好! 滑动菜单已完成,您的场景即将到来。

你不打算处理菜单中按钮的点击,因为你应该已经熟悉处理UI事件。 相反,您将更新旧的基于GUIRocketMouse场景,以便它使用新的GUI系统。


Updating the RocketMouse Scene to use Unity’s UI

RocketMouse游戏中,一些UI元素使用旧的GUI方法来显示:得分和重启游戏的按钮。 您将使用新的文本和图像UI元素替换它们,以及允许您重新启动游戏或退出主菜单的对话框。

1. Adding the Points Label

切换到RocketMouse场景并在“项目”窗口中打开Scenes文件夹。 双击RocketMouse场景将其打开。

选择GameObject \ UI \ Text以创建新的Text UI元素。 当你在这里时,你也将使用CanvasEventSystem

在“层次结构”中选择Text,然后在Inspector中进行以下更改:

  • 1) 将其重命名为Txt_Points
  • 2) 将Anchors设置为左上角。
  • 3) 将Pivot设置为(0,0.5)。
  • 4) 将Pos X设置为50,将Pos Y设置为-30。
  • 5) 将Text更改为0,因为播放器以零点开始。
  • 6) 在“项目”窗口中打开Fonts文件夹,然后将TitanOne-Regular拖动到Inspector中的Fonts字段。
  • 7) 将字体大小设置为24。
  • 8) 将Horizontal Overflow设置为Overflow以确保标签甚至可以显示最令人发指的分数。

另外,不要忘记将文本的颜色更改为白色。

2. Adding a Points Icon

如今,仅仅显示文字来显示这些点是不够的。你需要确保从玩家的眼睛看到它的那一刻起,这个文本的含义是非常清楚的。

是的,即使是最简单的应用程序,玩家现在也被令人印象深刻的UI所破坏,因此您需要添加一个图标,以使得分非常清晰,清晰且定义明确。

选择GameObject \ UI \ Image以创建新图像。在层次结构中选择它,然后按照下列步骤操作:

  • 1) 将其重命名为Img_Points
  • 2) 将其拖到Txt_Points上以将其添加为子项,这样当您移动标签时图标也会移动。
  • 3) 将Anchors设置为middle-left
  • 4) 将Pivot设置为(1,0.5)
  • 5) 将WidthHeight都设置为32。
  • 6) 将Pos X设置为-5,将Pos Y设置为0。
  • 7) 在“项目”窗口中打开Sprites文件夹,然后将coin图像拖到Inspector中的Source Image字段中。

注意:这次你没有点击Set Native Size,因为你将重复使用图像作为游戏中的coins,这将比图标大一点。

3. Updating the Points Label

游戏的大多数代码都存在于MouseController.cs脚本中,因此您将编辑此脚本以更新点标签(points label)。 实际上,在本教程结束之前,您只能使用此脚本。

注意:通常情况下,我会将这个巨大的脚本分成几个较小的块,但我不希望你把时间浪费在内务处理上,特别是因为重构需要花费更多时间,并且需要对现有代码有深刻的理解。

最好在一个大块中使用它,这样你就可以进行必要的小改动,继续你的生活。

Project窗口中打开Scripts文件夹,然后双击MouseController脚本以在代码编辑器中打开它。

加载脚本时,查找并删除使用旧GUI系统的以下方法:

  • onGUI
  • DisplayCoinsCount
  • DisplayRestartButton

添加以下using指令:

using UnityEngine.UI;

之后,添加以下实例变量以包含对标签的引用:

public Text coinsLabel;

最后,在CollectCoin()的末尾添加以下行,每次鼠标收集硬币时都会调用它。

coinsLabel.text = coins.ToString();

保存脚本文件并切换回Unity

Unity中,在“层次结构”中选择mouse,然后将Txt_Points拖动到“检查器”中的Coins Label字段。

Run the scene并将鼠标移出以收集几个硬币。 收集硬币时,您应该看到标签更新。

一切都很好看,但你可能已经注意到一个相当尴尬的问题。 当您删除旧的onGUI方法时,您还删除了鼠标死亡时显示的按钮,让玩家无法重新启动游戏。


Adding a Restart Dialog

我认为你已经很好地处理了新的GUI系统,并且可以创建这个对话框而不需要我的一些刺激。 因此,创建一个带有标签和两个按钮的面板,如下所示:

将它放在画布的中心。

当你完成后回来 - 你自己可以完成!

如果您想要帮助,只需参考下面:

1) 使用GameObject \ UI \ Panel创建一个Panel,并将其重命名为Dlg_Restart
2) 将锚点设置为middle-center
3) 将WidthHeight均设置为200,将Pos XPos Y都设置为0。
4) 使用Menu文件夹中的settings_panel_bg_9slice图像作为面板的Source Image
5) 双击检查器中的Color字段,并将A设置为255以删除透明度。

6) 通过选择GameObject \ UI \ Text创建一个Text元素,并将其重命名为Lbl_YouLose
7) 将Lbl_YouLose拖到Dlg_Restart上以将其添加为子元素。
8) 将其锚点设置为top-center,将Pos X设置为0,将Pos Y设置为-40。
9) 使用Fonts文件夹中的DCC-Dreamer字体。 将Font Size设置为30。
10) 将Alignment设置为Center Align,将Horizontal Overflow设置为Overflow
11) 更改TextYou Lose
12) 将文本颜色设置为完全白色(无透明度)。

13) 使用GameObject \ UI \ Button创建一个新Button,并将其重命名为Btn_Restart
14) 将其拖到Dlg_Restart上以将其添加为子项。
15) 将其锚点设置为top-center,将Pos X设置为0,将Pos Y设置为-100。
16) 将其Width设置为135,将Height设置为45。
17) 使用btn_9slice_normal作为Source Image

18) 选择嵌套的Text元素并将其Font设置为TitanOne-Regular,将Font Size设置为18,将Color设置为完全白色(无透明度)。 将Inspector中的Text字段的值设置为Restart

19) 要创建第二个按钮,只需右键单击Btn_Restart并选择Duplicate。 将其命名为Btn_Exit。 将其Pos Y设置为-160。 然后选择嵌套的文本元素并将其Text更改为Exit

1. Displaying the Restart Dialog

您不会为对话框的外观设置动画。 相反,你只需在开始时隐藏对话框并在玩家输掉游戏时显示它。

在代码编辑器中打开MouseController脚本并添加以下实例变量:

public GameObject restartDialog; 

然后将以下代码行添加到Start()以在开头隐藏对话框:

restartDialog.SetActive(false);

向下滚动并将以下行添加到HitByLaser()的末尾:

restartDialog.SetActive(true);

正如您可能猜到的,当鼠标死亡时会调用HitByLaser()。 因此,它是显示重启对话框的理想场所。

添加以下两种方法来重新启动并退出游戏:

public void RestartGame() 
{
    Application.LoadLevel (Application.loadedLevelName);
}
    
public void ExitToMenu() 
{
    Application.LoadLevel ("MenuScene");
}

您马上将它们链接到相应的按钮。

保存脚本文件并切换回Unity

在Unity中,在层次结构中选择Mouse,然后将Dlg_Restart拖到检查器中的Restart Dialog字段中。

然后在层次结构中选择Btn_Restart并向下滚动到On Click (Button)列表。

单击+以添加新项目。 之后,将Mouse从层次结构拖动到新项目。 在函数选择下拉列表中,选择MouseController \ RestartGame()

现在,选择Btn_Exit,并重复该过程,但这次选择MouseController \ ExitToMenu()函数。

Save the scene以保存您的工作然后run the scene并将鼠标发送到激光的火线。 你应该看到他死后立即出现一个对话框。 如果按Restart,则会重新启动游戏。 如果按Exit,您将返回主菜单。

后记

本篇主要讲述了Unity UI简介,感兴趣的给个赞或者关注~~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容