23.其他

  1. 23.NGUI进阶-其他
    1. 23.1 知识点
      1. NGUI 事件响应 播放音效
        1. 选中对象,在NGUI下拉框添加PlaySound脚本。
        2. PlaySound脚本关联切片文件。
      2. NGUI控件和键盘按键绑定
        1. 选中对象,在NGUI下拉框添加KeyBinding脚本。
        2. KeyBinding脚本选择关联和键盘绑定哪个键,这样按下键盘也能有按下对应按钮的效果。下面有组合按键和激活方式的选项,一般不改他。
      3. PC端 tab键快捷切换选中
        1. 选中对象,在NGUI下拉框添加KeyNavigation脚本。
        2. 这个脚本大概作用就是按tab可以切换选择的组件,关联的对象都要加上碰撞器和KeyNavigation脚本并关联关系,了解即可。
      4. 语言本地化
        1. 在Resources下创建一个txt文件,命名必须为Localization。
        2. 配置文件,第一行是key和不同语言通过逗号隔开,下面通过Key关联不同语言的文字,也通过逗号隔开。
        3. 给想要切换多语言文字的Label对象下挂载Localize脚本,关联Key。直接运行会默认显示第一个关联语言的key。
        4. 创建下拉列表PopUpList(一个Sprite一个Label添加PopUpList脚本和碰撞器,添加值改变时文本改变关联,注意字体选择Unity字体,不然可能显示不出来),给用于切换语言的下拉列表下添加脚本LanguageSelection,运行时点击下拉框可以切换多语言了。
        5. 也可以用于图片不同选项下的切换,添加keyValue是图片名字,给Sprite添加Localize脚本选择key。这样切换多语言下拉框时也会切换图片。
    2. 23.2 知识点代码
    3. 23.3 练习题
      1. 在NGUI缓动的练习题基础上了,请用现在所学知识,制作一个这样的功能,所有按钮上的中文可以和英文进行语言切换,通过Toggle单选框切换语言,所有按钮点击加上音效,空格键和攻击按钮关联
        1. 给开火按钮添加KeyBinding脚本,绑定空格键Space
        2. 给背包按钮添加PlaySound脚本关联音效切片文件
        3. 给Resource下的Localization文本文件添加key,给开火按钮文本和改名按钮文本添加Localize脚本关联对应的Key
        4. 创建单选框中文和英文,把两个设置为同一组,开始时不要同时选中
        5. 在GamePanel脚本创建单选框对象并在场景中关联,添加监听事件。查看LanguageSelection发现他切换语言是通过监听传入字符串的。我们添加监听事件也传入对应语言的字符串Key。实在不行DebugLanguageSelection看看传入的是什么。
    4. 23.4 练习题代码

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

×

喜欢就点赞,疼爱就打赏