Unity3d开发(十六) 重写UGUI组件
来源:互联网 发布:中文.商城域名骗局 编辑:程序博客网 时间:2024/05/19 15:19
作为Unity3d新版本的UI系统,UGUI以其易用性,逐渐被多数团队所接纳。但随着应用的深入,团队中总有需要自定义一套UI系统的需求。所幸UGUI是一个开源项目,可以在Unity3d的官方的Bitbucket代码库中找到源码。有了源码当然我们可以采用一劳永逸的办法,重编DLL库,并替换掉Unity\Editor\Data\UnityExtensions\Unity\GUISystem\UnityEngine.UI.dll
,实现重写。但我还是不太推荐这样,因为一旦如此做,就无法跟随Unity3d版本升级了。因此本文主要介绍如何通过子类实现重写.
整体思路
首先推荐去官网下载一份代码。总体上看来大概分为以下几个部分:
UnityEngine.UI/UI/Core/DefaultControls
是创建具体控件的层级与属性设置。UnityEditor.UI/UI/MenuOptions
是具体创建控件的包装方法。UnityEditor.UI/UI
和UnityEngine.UI/UI/Core
这两部分是对应的控件实现。
因此整体上重写的思路为:
- 为每个控件包装一个子类
- 创建时更改创建的脚本设置
- 重定向点击菜单按钮的生成
更改文字组件
下面以Text
为例,重写一个组件。首先要创建一个子类:
using UnityEngine;using System.Collections;using UnityEngine.UI;public class MyText : Text{}
弄个空的就好了。
然后更改MenuOption类,由于这个类是Inner的,没有办法重写。所以我就将源码复制了一份。由于Unity会优先编译DLL后编译代码,所以复写public static
的菜单注册函数也不会有问题。
最后创建一个DefaultControls的复写类,将源码中创建Text的逻辑复制出来。
public class MenuOptionOverwrite{ //... [MenuItem("GameObject/UI/Text", false, 2000)] static public void AddText(MenuCommand menuCommand) { GameObject go = DefaultControlsOverwrite.CreateText(GetStandardResources()); PlaceUIElementRoot(go, menuCommand); } //...}public static class DefaultControlsOverwrite { //... public static GameObject CreateText(DefaultControls.Resources resources) { GameObject obj2 = CreateUIElementRoot("Text", s_ThickElementSize); Text lbl = obj2.AddComponent<MyText>(); lbl.text = "New Text"; SetDefaultTextValues(lbl); lbl.raycastTarget = false; return obj2; } //...}
经过这样更改在Hierarchy中创建UI组件时,就会直接创建名为MyText的组件。至于直接把DefaultControls
里面的代码复制出来,有利有弊,直接复制出来改起来比较方便,但如果Unity3d升级之后,代码更改可能会遗漏。反过来,先调用DefaultControls
的接口,回头再将脚本换掉也可以,但这样就涉及到组件的赋值,写起来可能会特别傻 其中利弊大家自己衡量吧
创建效果
右键创建Text就直接是这个效果,而且可以自定义属性,比如这里我们就默认将Raycast勾掉啦
如果你觉得这篇文章对你有帮助,可以顺手点个顶,不但不会喜当爹,还能让更多人能看到它...
- Unity3d开发(十六) 重写UGUI组件
- 【Unity3D】UGUI组件的监听
- Unity3D开发小贴士(十六)SVN插件
- Unity3D-UGUI的Text组件渐变效果
- Htc Vive Sdk(OpenVR),Unity3d 开发,UGUI界面响应
- Unity3d开发(十七)UGUI 事件体系分析
- unity3D(基于UGUI)网络游戏正在开发中 <一>"最近用UGUI做人物血条"
- 2DSprite添加Light照射(Unity3D开发之十六)
- UGUI内核大探究(十六)InputField
- Unity3D的UGUI里Text 组件怎么输入换行符的一个小技巧(新人)
- 重写UGUI按钮组件button的点击、选中事件
- Unity3D开发小贴士(十五)状态机组件
- Unity3D 基于UGUI的图文混排组件
- [Unity3D]UGUI分辨率自适应的组件和方法
- Unity3D UGUI组件的Inspector属性探究(一)--RectTransform
- Unity3D 官方文档 UGUI总览 可互动组件的介绍
- Unity3D 官方文档 UGUI总览 自动布局组件的介绍
- 【Unity3D】UGUI向导式界面和组件复用
- flipsnap 控件学习
- display : table table-row rable-cell
- html控件中设置两个样式渲染
- odoo之Qweb的一些参数
- CSS:span元素margin-top无效的根源
- Unity3d开发(十六) 重写UGUI组件
- 经典的01背包问题
- ASCII码排序
- 宏定义(#define)和常量(const)的区别
- Firefox中元素获取焦点函数focus不起作用的解决方法
- ANT批量执行Jmeter脚本
- debug 加载程序原理
- iOS 如何自定义控件组件
- Rxjava 理解