Unity3D ugui 界面状态控制
2017-06-19 10:59
169 查看
在UI界面制作过程中,一些复杂的界面功能,常常会有不同状态和结果的展现。比如,选项卡,物品道具的状态信息,不同的描述信息和图片等。通常的处理方法,是用代码在不同的状态下,控制不同元素的可见性。但具体到Unity里,利用GameObject的可视化编辑,可以把不同的界面状态通过编辑器的配置来完成,这样代码只需要一句话状态切换就可以完成繁琐的界面元素控制。
思路是,GameObjectState 维护了一组状态集合,每个状态就是一个可以配置的State,里面包含了这个状态下,元素的可见性控制。通过设置name来切换State,从而得到不同状态下的界面呈现。
看一个使用的例子:
![](https://img-blog.csdn.net/20170619104944271?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG9tXzIyMXg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20170619105040695?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG9tXzIyMXg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
可以看到,列表元素的每一项,都有购买,拥有,使用三个状态。这里使用GameObjectState,针对每一个选项进行了配置,控制了这3个状态的元素可见性。这样,在代码中切换选项的状态,只需要一句话状态切换就可以达到目的。
在使用Spine骨骼动画工具的时候, 除了做动画,还可以用Spine来做UI。Spine工具有一个切换皮肤的功能,在使用的过程中,我发现利用切换皮肤的功能,就相当于维护了一个UI的状态。所以,利用切换皮肤,就完成了UI不同状态元素的显示切。其原理,和在Unity中的GameObjectState是一样的。
public class GameObjectState : MonoBehaviour { public State[] states; public void SetState(string stateName) { foreach (State state in this.states) { if (state.name == stateName) { foreach (GameObject go in state.activeTrueObjs) { go.SetActive(true); } foreach (GameObject go in state.activeFalseObjs) { go.SetActive(false); } break; } } } [Serializable] public class State { public string name; public GameObject[] activeTrueObjs; public GameObject[] activeFalseObjs; } }
思路是,GameObjectState 维护了一组状态集合,每个状态就是一个可以配置的State,里面包含了这个状态下,元素的可见性控制。通过设置name来切换State,从而得到不同状态下的界面呈现。
看一个使用的例子:
可以看到,列表元素的每一项,都有购买,拥有,使用三个状态。这里使用GameObjectState,针对每一个选项进行了配置,控制了这3个状态的元素可见性。这样,在代码中切换选项的状态,只需要一句话状态切换就可以达到目的。
if (item.index == ShopSaveData.instance.shopMountSelectId) { UIShopMountList.selectItem = item; item.GetComponent<GameObjectState>().SetState("Use"); continue; } if (ShopSaveData.instance.shopMountIds.Contains(i)) { item.GetComponent<GameObjectState>().SetState("Has"); } else { item.GetComponent<GameObjectState>().SetState("Buy"); }
在使用Spine骨骼动画工具的时候, 除了做动画,还可以用Spine来做UI。Spine工具有一个切换皮肤的功能,在使用的过程中,我发现利用切换皮肤的功能,就相当于维护了一个UI的状态。所以,利用切换皮肤,就完成了UI不同状态元素的显示切。其原理,和在Unity中的GameObjectState是一样的。
相关文章推荐
- UNITY3D中 快捷键控制Hierarchy面板中gameObject的激活状态
- Unity3d UGUI 界面适配 实例解析 三种适配方式
- Unity3d入门基础之UGUI-基本控件的学习-搭建界面的常规步骤
- unity3d编辑器界面扩展,编辑状态下显示选择对象的所有脚本组件代码内容
- Unity3D 动画状态简单控制核心代码
- EAS BOS 控制界面控件状态
- [Unity3D]简单的UGUI滑条控制物体移动
- 【Unity3d】将PSD直接导出成UGUI界面(二)
- 【Unity3d】将PSD直接导出成UGUI界面(一)
- EAS BOS 控制界面控件状态
- 射线检测UGUI的Button组件,控制Button四种状态状态
- EAS BOS 控制界面控件状态
- Unity3d UGUI 界面适配 实例解析 三种适配方式
- Unity3D UGUI学习笔记之界面适配的三种方式
- 写一个方法进行各种属性的更新,而不要每个界面设置改变都改变一个属性。就是点击应用或确定按钮时调用这个更新属性的方法,遍历所有(控制对象属性的)界面控件的状态(值),进行属性修改和刷新。
- Unity3d UGUI 控制Image的旋转
- Htc Vive Sdk(OpenVR),Unity3d 开发,UGUI界面响应
- Unity3D中UGUI控制渲染顺序
- 让我们克隆PokémonGO一样的游戏 - 2、利用uGUI图形接口,泛型状态控制
- Unity3D 学习笔记8 —— UGUI控制和按钮的监听系统