11.NGUI基础-组合控件-Toggle单选框多选框
11.1 知识点
Toggle单选框多选框的作用
- 单选框和多选框都可以使用它来制作。
Toggle单选框多选框
创建两个Sprite对象,一个父对象,一个子对象。
为Sprite父对象添加Toggle脚本。
为Sprite父对象添加NGUI的碰撞器。
Toggle单选框多选框组件参数
Group 多选框分组
- 修改多个多选框的Group旁边的值,相同的值代表这几个多选框为一组,这样这几个多选框只有一个框能被选中,就变成单选框。0代表不是多选框分组。
- State of None:这个框是单选框状态时是否允许不选中。
- 正常来说三个来说必须要有一个被选中。
- 勾选了这个按钮,选中一个框,再点击一下,可以让这个框不被选中,这样上三个框可以一个都不被选中。
Starting State 开始运行时的默认状态,勾选为选中,不勾选为不选中。
Sprite 选中时关联的Sprite图片
- 就是把Sprite子对象isActive给拖进来。
- 建立Sprite子对象联系后运行点击就可以切换是否选中单选框了。
Invert State 选中单选框反转状态
- 如果选中单选框不显示子对象,不选中单选框显示子对象,就勾选它。
Animator 状态变化时播放动画(新动画系统)
Animation 状态变化时播放动画(老动画系统)
Tween 状态变化时缓动
Transition 过渡模式
- 平滑过渡
- 瞬间过渡
OnValueChange 状态变化时响应脚本
监听Toggle单选框多选框选择改变事件的两种方式
拖脚本监听单选框多选框点击事件
- Inspector窗口拖代码的监听,一定要public。
public void Change1()
{
print("代码监听");
}
代码获取按钮监听
public UIToggle uIToggle;
public UIToggle uIToggle1;
public UIToggle uIToggle2;
public UIToggle uIToggle3;
void Start()
{
//代码进行监听添加
uIToggle1.onChange.Add(new EventDelegate(Change2));
uIToggle2.onChange.Add(new EventDelegate(Change2));
uIToggle3.onChange.Add(new EventDelegate(Change2));
}
//代码进行监听添加,建议private
private void Change2()
{
print("Toggle变化执行的内容");
//UIToggle的value变量可以判断单选框有没有被选中
if (uIToggle1.value)
{
print("tog1选中");
}
else if (uIToggle2.value)
{
print("tog2选中");
}
else if (uIToggle3.value)
{
print("tog3选中");
}
}
11.2 知识点代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson11_NGUI基础_组合控件_Toggle单选框多选框 : MonoBehaviour
{
public UIToggle uIToggle;
public UIToggle uIToggle1;
public UIToggle uIToggle2;
public UIToggle uIToggle3;
void Start()
{
#region 知识点一 Toggle用来干啥
//单选框 多选框都可以使用它来制作
#endregion
#region 知识点二 制作Toggle
//需要添加:
//1.两个Sprite对象 1父1子
//2.为Sprite父对象添加Toggle脚本
//3.为Sprite父对象添加NGUI的碰撞器
#endregion
#region 知识点三 Toggle参数相关
#endregion
#region 知识点四 监听事件的两种方式
//1.拖代码
//2.代码进行监听添加
uIToggle1.onChange.Add(new EventDelegate(Change2));
uIToggle2.onChange.Add(new EventDelegate(Change2));
uIToggle3.onChange.Add(new EventDelegate(Change2));
#endregion
}
//Inspector窗口拖代码的监听 一定要public
public void Change1()
{
print("代码监听");
}
//代码进行监听添加 建议private
private void Change2()
{
//UIToggle的value变量可以判断单选框有没有被选中
if (uIToggle1.value)
{
print("tog1选中");
}
else if (uIToggle2.value)
{
print("tog2选中");
}
else if (uIToggle3.value)
{
print("tog3选中");
}
}
}
11.3 练习题
在Button按钮的练习题基础上,请用现在所学知识,制作一个这样的功能,场景上坦克发射子弹有音效,通过用NGUI的Toggle开关 控制音效开关
把开火的音效资源放到Resource文件夹下
在坦克脚本的开火函数里添加播放音效的逻辑
public class TankObj : MonoBehaviour
{
// 此变量是一个引用类型,用于存储子弹发射的位置信息。
public Transform shootPos;
// 此变量是一个 AudioClip 实例,用于储存音效片段文件
private AudioClip clip;
// 此方法用于实现炮台开火功能
public void Fire()
{
// 播放一个音效
// 添加一个 Audio Source 组件以用于播放声音
AudioSource source = this.gameObject.AddComponent<AudioSource>();
// 设置音效片段文件
if (clip == null)
clip = Resources.Load<AudioClip>("Sound/CannonShoot");
source.clip = clip;
// 命令 Audio Source 组件开始播放音效
source.Play();
// 控制声音开关的代码
// 如果设置了静音,则将声音关闭
source.mute = !MusicData.isOpenSound;
// 为了避免组件过多,可以在一定时间后移除当前添加的组件
Destroy(source, 2);
// 发射子弹
// 1. 直接新建子弹 GameObject
// 2. 通过资源加载 API 动态加载预制体,并且进行实例化。
Instantiate(Resources.Load<GameObject>("Obj/Bullet"), shootPos.position, shootPos.rotation);
}
}
在GamePanel对象下添加一个Toggle,并且有一个音效文本
在GamePanel脚本里添加一个UIToggle音效变量,拖拽关联,添加点击回调
public class GamePanel : MonoBehaviour
{
// 此变量用于存储一个 UIButton 类型的引用
public UIButton btn;
// 此变量用于存储一个 TankObj 类型的引用,代表玩家对象
public TankObj player;
// 此变量用于存储一个 UIToggle 类型的引用,代表音效开关组件
public UIToggle togSound;
// Start 方法是 MonoBehaviour 生命周期启动的一部分,在第一帧渲染前执行。
void Start()
{
//注册按钮点击事件,并在回调函数中调用 player 的 Fire 方法
btn.onClick.Add(new EventDelegate(() =>
{
// 处理点击按钮后做的事情
player.Fire();
}));
// 注册音效开关事件,让静态的 MusicData.isOpenSound 与当前 UIToggle 组件中 value 值进行同步
togSound.onChange.Add(new EventDelegate(() =>
{
//将“是否打开声效”设置为 toggle 的值:如果它被选中,则为 true;否则为 false
MusicData.isOpenSound = togSound.value;
}));
}
}
创建一个音效数据管理类,创建一个静态变量设置音效的开关,这个静态的音效开关变量可以在坦克脚本的开火函数中设置开火是否开音效,也可以监听面板音效框是否选中的回调
public class MusicData
{
//音效开关
public static bool isOpenSound = true;
}
11.4 练习题代码
MusicData
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MusicData
{
//音效开关
public static bool isOpenSound = true;
}
TankObj
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TankObj : MonoBehaviour
{
// 此变量是一个引用类型,用于存储子弹发射的位置信息。
public Transform shootPos;
// 此变量是一个 AudioClip 实例,用于储存音效片段文件
private AudioClip clip;
// 此方法用于实现炮台开火功能
public void Fire()
{
// 播放一个音效
// 添加一个 Audio Source 组件以用于播放声音
AudioSource source = this.gameObject.AddComponent<AudioSource>();
// 设置音效片段文件
if (clip == null)
clip = Resources.Load<AudioClip>("Sound/CannonShoot");
source.clip = clip;
// 命令 Audio Source 组件开始播放音效
source.Play();
// 控制声音开关的代码
// 如果设置了静音,则将声音关闭
source.mute = !MusicData.isOpenSound;
// 为了避免组件过多,可以在一定时间后移除当前添加的组件
Destroy(source, 2);
// 发射子弹
// 1. 直接新建子弹 GameObject
// 2. 通过资源加载 API 动态加载预制体,并且进行实例化。
Instantiate(Resources.Load<GameObject>("Obj/Bullet"), shootPos.position, shootPos.rotation);
}
}
GamePanel
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GamePanel : MonoBehaviour
{
// 此变量用于存储一个 UIButton 类型的引用
public UIButton btn;
// 此变量用于存储一个 TankObj 类型的引用,代表玩家对象
public TankObj player;
// 此变量用于存储一个 UIToggle 类型的引用,代表音效开关组件
public UIToggle togSound;
// Start 方法是 MonoBehaviour 生命周期启动的一部分,在第一帧渲染前执行。
void Start()
{
//注册按钮点击事件,并在回调函数中调用 player 的 Fire 方法
btn.onClick.Add(new EventDelegate(() =>
{
// 处理点击按钮后做的事情
player.Fire();
}));
// 注册音效开关事件,让静态的 MusicData.isOpenSound 与当前 UIToggle 组件中 value 值进行同步
togSound.onChange.Add(new EventDelegate(() =>
{
//将“是否打开声效”设置为 toggle 的值:如果它被选中,则为 true;否则为 false
MusicData.isOpenSound = togSound.value;
}));
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com