写在前面
这一篇我个人认为还是很常用的,一开始也是实习的时候学到的,所以我觉得实习真的是一个快速学习工程技巧的途径。
提醒:这篇教程比较复杂,如果你不熟悉NGUI、iTween、C#的回调函数机制,那么这篇文章可能对你比较有难度,当然你可以挑战自我。
言归正传,消息框,也就是Message Box,在Windows下很常见,如下图:
在游戏里,我们也会用到这样的消息框。例如用户按了返回按钮,一般都会弹出一个确认退出的按钮。用户在执行某些重要操作时,我们总是希望再一次确认以防用户的无意操作,以此来提高用户体验。这篇教程就会详细叙述Unity中消息框的一种实现。(由于见识有限,我相信肯定还有其他的方式,可能更简单易用,如有不足欢迎指出。)
准备工作
插件和工具
这篇教程还是有点复杂的,需要各个方面的力量帮助我们:
- 既然是界面,那么就离不开NGUI。确保你的项目里有NGUI插件,以及必要的图集来制作消息框的背景(为了省事你可以直接只用NGUI例子中的Atlas)。如果你需要中文显示,那么还需要用NGUI制作一个中文字体。网络上有很多教程。
- 单例脚本。这里需要单例模式主要是为了实现那种无需在面板中(指的是除消息框以外的其他对象)引用任何资源,这样你看起来就像是在VS2010下调用MessageBox.Show一样。
- iTween插件。这个插件是免费的,而且非常小巧。使用它主要是为了美化消息框的弹出效果,例如放大弹出、从上向下弹出等等。本例使用的是从上向下弹出。
准备好了这些工具后,我们需要制作本地化文字,这是为了定义消息框中的按钮文字以及弹出时显示的标题和内容文字,当然你可以略去这一步,但是这是非常不建议的,因为在真正的项目中管理好所有的文本是很重要的。本地化是NGUI的功能,经常被用于转换多种语言,例如中文、英文等。你可以在NGUI的例子中找到对应的场景和教程(Example 10 - Localization),涉及到的脚本主要是Localization.cs(统一管理所有的可用语言)、UILocalize.cs(指明一个UILabel显示的文字)。这里假设你知道这些脚本是干嘛的。
本地化文本
要实现一个本地化文本非常容易。只需要两步:
- 创建一个纯文本文件,例如cn.txt,里面将定义所有用到的字符串。
Confirm = 确定 Cancel = 取消 QuitConfirmTitle = 退出确认 QuitConfirmContent = 继续将退出游戏。\n确定退出?
对于我们的弹出框,只用到上述四个文本。等号左边的名字相当于这个字符串的ID,等号右边是内容。 - 制作一个Localization Prefab。这点和NGUI例子很相似,就是为了方便以后修改。对于我们的教程,如果你不制作成一个Prefab也是可以的,但是还是不建议,还是那句话,这种思维还是很重要的。制作好的prefab如下:
细心的你可能发现除了上述提到的脚本,还有一个脚本:DontDestroyOnLoad.cs。代码如下:using UnityEngine; using System.Collections; public class DontDestroyOnLoad : MonoBehaviour { // Use this for initialization void Start () { DontDestroyOnLoad(this.gameObject); } }
它的作用显而易见,就是为了不让我们的本地化文本在场景切换时被销毁。这样就不用每一个场景都实例化一个L