unity开发之原创开关小部件
来源:互联网 发布:002174游族网络雪球 编辑:程序博客网 时间:2024/05/19 20:46
一直在使用ngui做ui,不过发现尽然没有一个开关部件。开关应该算是比较常用的部件了,尽然没有,感觉有点小不科学,于是自己写了一个简单开关小部件。哎,现在还不会写插件,等自己功力长进了,就自己改ngui的代码,在widget里加入swtch开关好了。
现在的话,就只能用最原始的方法创建一个开关咯。创建一个空的gameobject,并命名为Switch,然后需要加上我自己写的UISwitch组件(下面会有uiswitch的代码)。然后以Switch为父节点,加上两个sprite,分别作为开关打开和关闭时显示的sprite。这两个sprite最好命名为OffSprite和OnSprite,因为我的代码是按照这两个名字来查找的,如果不想拘泥于命名,也可以直接手动拖拽引用到UISwitch组件上。
如图为层级窗口。
下面详述了uiswitch代码,实现了一点简单的功能,基本够用。
using UnityEngine;using System.Collections;public class UISwitch : MonoBehaviour{ //默认状态是开还是关 public bool isOn = false; //会自动将sprite的位置移动到原点 public bool isAutoAdjustSpritePosition = true; //会自动调整sprite的缩放比例 public bool isAutoAdjustSpriteScale = true; //是否自动调整boxcollider:依据图片调整collider的大小 public bool isAutoAdjustCollider = true; //开关关掉时的Sprite public GameObject offSprite; //开关打开时的时间接收者 public GameObject onSprite; //开关关掉的事件接收者 public GameObject offEventReceiver; //开关打开的事件接收者 public GameObject onEventReceiver; //开关关掉的事件的方法名 public string offFunctionName = "OnSwitchOff"; //开关打开的时间的方法名 public string onFunctionName = "OnSwitchOn"; private Vector3 averageScale; // Use this for initialization void Start() { //如果没有手动引用,会自动寻找 if (offSprite == null) offSprite = transform.FindChild("OffSprite").gameObject; if (onSprite == null) onSprite = transform.FindChild("OnSprite").gameObject; if (isAutoAdjustSpritePosition) adjustSpritePosition(); if (isAutoAdjustSpriteScale) adjustSpriteScale(); if (isAutoAdjustCollider) adjustCollider(); updateSprite(); } //将开关图片的localscale平均一下~ void adjustSpriteScale() { averageScale = (offSprite.transform.localScale + onSprite.transform.localScale) / 2f; offSprite.transform.localScale = onSprite.transform.localScale = averageScale; } //调整到正中间 void adjustSpritePosition() { offSprite.transform.localPosition = Vector3.zero; onSprite.transform.localPosition = Vector3.zero; } //如果没有boxcollider组件,会自动添加一个 //另外,将center设置为正中间,size设置为图片的平均localscale void adjustCollider() { if(GetComponent<BoxCollider>()==null) { this.gameObject.AddComponent<BoxCollider>(); } GetComponent<BoxCollider>().center = Vector3.zero; GetComponent<BoxCollider>().size = averageScale; } void OnClick() { isOn = !isOn; if (isOn) { OnSwitchOn(); } else { OnSwitchOff(); } updateSprite(); } //切换一下开关图片 void updateSprite() { offSprite.SetActive(!isOn); onSprite.SetActive(isOn); } void OnSwitchOn() { if (onEventReceiver != null) { onEventReceiver.SendMessage(onFunctionName); } } void OnSwitchOff() { if (offEventReceiver != null) { offEventReceiver.SendMessage(offFunctionName); } }}
好啦,设置好了之后,开关就可以使用了。
0 0
- unity开发之原创开关小部件
- unity开发之原创MessageBox小部件
- 【Unity3D自学记录】Unity3D开发之原创开关小部件
- Android之AppWidget桌面小部件开发
- android widget简单开发一之创建一个小部件
- Android之小部件AppWidget
- 使用 Dojo 开发 HTML 小部件
- 用 Yahoo! Blueprint 开发移动小部件
- Android开发指南-窗口小部件
- Android 开发一个天气预报桌面小部件
- android开发 - Widgets窗口小部件
- 桌面小部件的简单开发步骤
- 安卓开发入门之小部件Widgets(翻译)附源码
- Android 之 App Widegets(窗口小部件)
- Android 之窗口小部件详解
- Android 之窗口小部件详解
- Android 之窗口小部件(Widget)详解
- Android 之窗口小部件详解--AppWidget
- 我们团队招聘新伙计!上海的职位
- Oracle 分区表 总结
- Android 测试
- js 判断两字符串是否相等, 不区分大小写
- 网站更新需要注意的几个问题
- unity开发之原创开关小部件
- Ubuntu下升级Mono-3.4.0
- Android中的动画详解系列【2】——飞舞的蝴蝶
- Java内部类总结
- gdb 版本release notes
- TKStudio内置51编译器SDCC对C语言的扩展(1)
- _variant_t 数据类型 注释 vt类型
- iOS 中捕获程序崩溃日志
- 蓝牙4.0芯片nrf51822资料