23.NGUI进阶-其他
23.1 知识点
NGUI 事件响应 播放音效
选中对象,在NGUI下拉框添加PlaySound脚本。
PlaySound脚本关联切片文件。
NGUI控件和键盘按键绑定
选中对象,在NGUI下拉框添加KeyBinding脚本。
KeyBinding脚本选择关联和键盘绑定哪个键,这样按下键盘也能有按下对应按钮的效果。下面有组合按键和激活方式的选项,一般不改他。
PC端 tab键快捷切换选中
选中对象,在NGUI下拉框添加KeyNavigation脚本。
这个脚本大概作用就是按tab可以切换选择的组件,关联的对象都要加上碰撞器和KeyNavigation脚本并关联关系,了解即可。
语言本地化
在Resources下创建一个txt文件,命名必须为Localization。
配置文件,第一行是key和不同语言通过逗号隔开,下面通过Key关联不同语言的文字,也通过逗号隔开。
给想要切换多语言文字的Label对象下挂载Localize脚本,关联Key。直接运行会默认显示第一个关联语言的key。
创建下拉列表PopUpList(一个Sprite一个Label添加PopUpList脚本和碰撞器,添加值改变时文本改变关联,注意字体选择Unity字体,不然可能显示不出来),给用于切换语言的下拉列表下添加脚本LanguageSelection,运行时点击下拉框可以切换多语言了。
也可以用于图片不同选项下的切换,添加keyValue是图片名字,给Sprite添加Localize脚本选择key。这样切换多语言下拉框时也会切换图片。
23.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson23_NGUI进阶_其他 : MonoBehaviour
{
void Start()
{
#region 知识点一 NGUI 事件响应 播放音效
//PlaySound 脚本
#endregion
#region 知识点二 NGUI控件和键盘按键绑定
//KeyBinding 脚本
#endregion
#region 知识点三 PC端 tab键快捷切换选中
//KeyNavigation 脚本
#endregion
#region 知识点四 语言本地化
//Localization脚本
//1.在Resources下创建一个txt文件 命名必须为Localization
//2.配置文件
//3.给想要切换文字的Label对象下挂载Localize 关联Key
//4.给用于切换语言的下拉列表下添加脚本LanguageSelection
#endregion
}
}
23.3 练习题
在NGUI缓动的练习题基础上了,请用现在所学知识,制作一个这样的功能,所有按钮上的中文可以和英文进行语言切换,通过Toggle单选框切换语言,所有按钮点击加上音效,空格键和攻击按钮关联
给开火按钮添加KeyBinding脚本,绑定空格键Space
给背包按钮添加PlaySound脚本关联音效切片文件
给Resource下的Localization文本文件添加key,给开火按钮文本和改名按钮文本添加Localize脚本关联对应的Key
创建单选框中文和英文,把两个设置为同一组,开始时不要同时选中
在GamePanel脚本创建单选框对象并在场景中关联,添加监听事件。查看LanguageSelection发现他切换语言是通过监听传入字符串的。我们添加监听事件也传入对应语言的字符串Key。实在不行DebugLanguageSelection看看传入的是什么。
public UIToggle togCN;
public UIToggle togEN;
togCN.onChange.Add(new EventDelegate(() => {
if(togCN.value) {
Localization.language = "简体中文";
}
}));
togEN.onChange.Add(new EventDelegate(() => {
if(togEN.value) {
Localization.language = "English";
}
}));
23.4 练习题代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GamePanel : MonoBehaviour
{
private static GamePanel instance;
public static GamePanel Instance => instance;
public UIButton btn;
public TankObj player;
public UIToggle togSound;
public UILabel labName;
public UIButton btnChangeName;
public UIButton btnBag;
#region Lesson13_NGUI基础_组合控件_PopupList下拉列表练习题
public UIPopupList list;
public Light lightObj;
#endregion
#region Lesson14_NGUI基础_组合控件_Slider滑动条练习题
public UISlider sliderSound;
#endregion
#region Lesson15_NGUI基础_组合控件_ScrollBar滚动条和ProgressBar进度条练习题
public UIProgressBar progressBar;
#endregion
#region Lesson18_NGUI进阶_EventListener和EventTrigger特殊事件监听相关练习题
public UISprite controller;
#endregion
#region Lesson23_NGUI进阶_其他练习题
public UIToggle togCN;
public UIToggle togEN;
#endregion
private void Awake()
{
instance = this;
}
void Start()
{
btn.onClick.Add(new EventDelegate(()=> {
//处理点击按钮 做什么
//命令玩家开火
player.Fire();
}));
togSound.onChange.Add(new EventDelegate(() =>
{
//点击音效开关的逻辑
//让音效静态bool值 等于 目前tog的 值 开启 就是true 关闭 就是false
MusicData.isOpenSound = togSound.value;
}));
btnChangeName.onClick.Add(new EventDelegate(() =>
{
//打开改名按钮
ChangeNamePanel.Instance.gameObject.SetActive(true);
}));
#region Lesson13_NGUI基础_组合控件_PopupList下拉列表练习题
list.onChange.Add(new EventDelegate(() => {
//选项变化时 天变化
switch (list.value)
{
case "白天":
lightObj.intensity = 1;
break;
case "黑夜":
lightObj.intensity = 0.2f;
break;
}
}));
#endregion
#region Lesson14_NGUI基础_组合控件_Slider滑动条练习题
sliderSound.onChange.Add(new EventDelegate(() =>
{
//音量大小
MusicData.soundValue = sliderSound.value;
}));
#endregion
#region Lesson15_NGUI基础_组合控件_ScrollBar滚动条和ProgressBar进度条练习题
HideHpPro();
#endregion
#region Lesson16_NGUI基础_组合控件_ScrollView滚动视图练习题
//点击背包按钮 打开背包
btnBag.onClick.Add(new EventDelegate(()=> {
BagPanel.Instance.gameObject.SetActive(true);
}));
#endregion
#region Lesson18_NGUI进阶_EventListener和EventTrigger特殊事件监听相关练习题
//获得事件监听UIEventListener脚本
UIEventListener listener = UIEventListener.Get(controller.gameObject);
//监听 拖曳 让图片跟着我动
listener.onDrag = (obj, vector) => {
//拖曳的时候 对象不停的去改变位置 加上位置的变量
controller.transform.localPosition += new Vector3(vector.x, vector.y, 0);
//判断极限位置 不能随便拖
if (controller.transform.localPosition.magnitude > 130)
controller.transform.localPosition = controller.transform.localPosition.normalized * 130;
//拖曳时让 玩家移动
//我们传入 摇杆的 方向向量 再内部 转换成世界坐标 xz平面上的向量
player.Move(controller.transform.localPosition.normalized);
};
//监听 拖曳结束 让图片回到原点
listener.onDragEnd = (obj) =>
{
controller.transform.localPosition = Vector3.zero;
//结束时 让玩家停止移动
player.StopMove();
};
#endregion
#region Lesson23_NGUI进阶_其他练习题
togCN.onChange.Add(new EventDelegate(() => {
if( togCN.value )
{
Localization.language = "简体中文";
}
}));
togEN.onChange.Add(new EventDelegate(() => {
if (togEN.value)
{
Localization.language = "English";
}
}));
#endregion
}
#region Lesson15_NGUI基础_组合控件_ScrollBar滚动条和ProgressBar进度条练习题
/// <summary>
/// 显示蓄能条
/// </summary>
public void ShowHpPro()
{
progressBar.gameObject.SetActive(true);
}
/// <summary>
/// 隐藏蓄能条
/// </summary>
public void HideHpPro()
{
progressBar.gameObject.SetActive(false);
}
/// <summary>
/// 更新蓄能条
/// </summary>
/// <param name="nowValue"></param>
/// <param name="maxValue"></param>
public void UpdatePro(float nowValue, float maxValue)
{
progressBar.value = nowValue / maxValue;
}
#endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com