博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UGUI案例之 选项卡效果
阅读量:7097 次
发布时间:2019-06-28

本文共 3778 字,大约阅读时间需要 12 分钟。

选项卡的逻辑

  选项卡是由两部分组成,“卡”和“内容”,二者之间是一一对应的关系,比如:
  5 张卡对应 5 个内容区域。当我们选择了某个卡,对应的内容就会展现,其余的
  内容全部隐藏。

注意事项:

  UI 元素在创建的时候,要进行名称排序,且从 1 开始。

  如Tab1,Tab2,,,,,,

 

上图上代码

 

using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;/// /// 总控制类/// public class TabPanelContrller : MonoBehaviour {    //字段    private Transform mmTransform;    private Transform mTabsTransform;    private Transform mContenTransform;    //数组形式for遍历貌似并不太友好,换成foreach+集合试试    private Image[] tabsImages;    private Image[] contentsImages;    //集合    private List
mTabTransformsList; private List
mContentsTransformsList; //属性 //开始事件 Awake(),Start() void Start () { //基本引用 FindInt(); //RestTabByList(1); RestTabByArray(1); } //方法 ///
/// 基本引用 /// private void FindInt() { //基本引用 mmTransform = gameObject.GetComponent
(); mTabsTransform = mmTransform.Find("PanelBG/Tabs").GetComponent
(); mContenTransform = mmTransform.Find("PanelBG/Contents").GetComponent
(); //子物体 tabsImages = mTabsTransform.GetComponentsInChildren
(); contentsImages = mContenTransform.GetComponentsInChildren
(); //查找子物体存储在数组后遍历角标要从1开始,0是父物体本身,用不到 } ///
/// 数组方式 /// ///
private void RestTabByArray(int index) { for (int i = 1; i < contentsImages.Length; i++) { contentsImages[i].gameObject.SetActive(false); tabsImages[i].color = Color.white; } contentsImages[index].gameObject.SetActive(true); tabsImages[index].color = Color.magenta; } ///
/// 集合方式 /// ///
private void RestTabByList(int index) { mTabTransformsList = new List
(); mContentsTransformsList = new List
(); //遍历 foreach (Transform VARIABLE in mTabsTransform) { VARIABLE.GetComponent
().color=Color.white; mTabTransformsList.Add(VARIABLE); } //foreach遍历的好处是只遍历子物体,不会去遍历孙子辈 foreach (Transform VARIABLE in mContenTransform) { VARIABLE.gameObject.SetActive(false); mContentsTransformsList.Add(VARIABLE); } //foreach出来的不包括父物体,角标0就是第一个子物体, //所以,传过来的参数要-1,因为子物体名称是从1开始命名的,Substring 截取到的也是从1开始 mContentsTransformsList[index-1].gameObject.SetActive(true); mTabTransformsList[index-1].GetComponent
().color=Color.green; }}

选项卡按钮身上的代码,

using UnityEngine;using UnityEngine.UI;public class ItemTabsContrller : MonoBehaviour {    //字段    private Transform mmTransform;    private Button mmButton;    //注释掉的是查找引用脚本组件的方式,繁锁    //private TabPanelContrller mmTabPanelContrller;    private int index;    //属性    //开始事件 Awake(),Start()    void Start ()    {        mmTransform = gameObject.GetComponent
(); mmButton = mmTransform.GetComponent

向父物体发送消息

SendMessageUpwards("RestTabByArray", index); //(方法名,参数), 

截取游戏物体名称中最后一个字符:

gameObject.name.Substring(gameObject.name.Length - 1, 1)

 

碉堡了,写完才发现, 用数组+for其实是最简单的,

查找子物体引用的时候只要查找带Button组件的就好了,没有这个组件的就不会被查找到。

也就是说,想要查找某类子物体,可以通过查找唯一组件的方式,排除一些不必要的干扰。

 

转载于:https://www.cnblogs.com/madinglin/p/8504238.html

你可能感兴趣的文章
随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比...
查看>>
Android 使用JSON格式与服务器交互 中文乱码问题解决
查看>>
_DataStructure_C_Impl:链串
查看>>
openvas
查看>>
SecureCRT同时向多个终端发送命令
查看>>
【IntelliJ】IntelliJ IDEA常用设置及快捷键以及自定义Live templates
查看>>
indexOf 和 lastIndexOf 的区别
查看>>
spring boot整合activemq消息中间件
查看>>
Spark:java api实现word count统计
查看>>
mqtt-jmeter
查看>>
PyTorch保存模型与加载模型+Finetune预训练模型使用
查看>>
js 获取当前日期时间 格式为 yyyy-mm-dd hh:MM:ss
查看>>
解决TextBox中, JS方法(DatePicker)改变Text内容后, 无法触发OnTextChanged事件的问题
查看>>
什么是lua?
查看>>
JSON与JAVA数据的转换
查看>>
装饰模式(Decorator Pattern)--结构型
查看>>
Winform动态显示图片,数据流方式
查看>>
Android上的蓝牙通信功能的开发:BluetoothChat例程分析
查看>>
POJ 2244
查看>>
IOS各种文件描述
查看>>