UGUI自动化–QImage、QRawImage

21 篇文章 0 订阅
9 篇文章 0 订阅

UGUI自动化–QImage、QRawImage

今天接着介绍UGUI自动化中的Image和RawImage控件,为什么要放在一起介绍呢?主要是封装的功能和代码都差不多。QImage继承自UGUI的Image组件,QRawImage继承自UGUI的RawImage组件。两个Image组件都是增加了一个多语言KEY的显示。图片也需要多语言,因此通过一个string类型的KEY,根据不同语言动态设置即可。

QImage

在这里插入图片描述

QRawImage

在这里插入图片描述

图QImage组件和QRawImage组件都使用一个KEY用来统一处理多语言图片的显示。将Image进行封装也是为了后面为Image的默认值的修改可以统一设置,便于管理,下面看如何实现。

QImage组件

新建一个QImage.cs代码如下

/**
*   Author:onelei
*   Copyright © 2019 - 2020 ONELEI. All Rights Reserved
*/
using UnityEngine;
using UnityEngine.UI;

namespace Lemon.UI
{
    [AddComponentMenu("UI/QImage")]
    public class QImage : Image
    {
        [HideInInspector]
        public bool bInit = false;
        /// <summary>
        /// 多语言key
        /// </summary>
        public string key = string.Empty;

        private GameObject _CacheGameObject = null;
        public GameObject CacheGameObject { get { if (_CacheGameObject == null) { _CacheGameObject = gameObject; } return _CacheGameObject; } }

        private Transform _CacheTransform = null;
        public Transform CacheTransform { get { if (_CacheTransform == null) { _CacheTransform = transform; } return _CacheTransform; } }
    }
}

QImage组件继承自Unity的Image组件,这点应该都知道。主要是多了如下两个变量

        [HideInInspector]
        public bool bInit = false;
        /// <summary>
        /// 多语言key
        /// </summary>
        public string key = string.Empty;

第一个bInit是用来初始化变量用的,第二个key就是用于多语言处理的KEY。

接着我们新建一个QImageEditor.cs的脚本,将其放入Editor文件夹下。代码如下

/**
*   Author:onelei
*   Copyright © 2019 - 2020 ONELEI. All Rights Reserved
*/
using UnityEditor;
using UnityEngine;

namespace Lemon.UI
{
    [CustomEditor(typeof(QImage), true)]
    public class QImageEditor : UnityEditor.UI.ImageEditor
    {
        [MenuItem("GameObject/UI/QImage", false, UtilEditor.Priority_QImage)]
        public static QImage AddComponent()
        {
            QImage component = UtilEditor.ExtensionComponentWhenCreate<QImage>(typeof(QImage).Name.ToString());
            //设置默认值
            SetDefaultValue(component);
            return component;
        }

        QImage component;
        public override void OnInspectorGUI()
        {
            component = (QImage)target;
            base.OnInspectorGUI();
            component.key = EditorGUILayout.TextField("KEY", component.key);
            if (!component.bInit)
            {
                component.bInit = true;
                SetDefaultValue(component);
            }
        }

        private static void SetDefaultValue(QImage component)
        {
            if (component == null)
                return;
            component.raycastTarget = false;
        }
    }
}

QImage通过重写OnInspectorGUI函数,来重新绘制组件的显示。先调用

base.OnInspectorGUI();

优先绘制Image组件,然后绘制一个ImageField用来显示多语言所需要的KEY。

然后我们通过SetDefaultValue函数来重写Image组件里面的参数。同样的道理用来封装RawImage。

QRawImge组件

新建一个QRawImage.cs代码如下

 /**
*   Author:onelei
*   Copyright © 2019 - 2020 ONELEI. All Rights Reserved
*/
using UnityEngine;
using UnityEngine.UI;

namespace Lemon.UI
{
    [AddComponentMenu("UI/QRawImage")]
    public class QRawImage : RawImage
    {
        [HideInInspector]
        public bool bInit = false;
        /// <summary>
        /// 多语言key
        /// </summary>
        public string key = string.Empty;

        private GameObject _CacheGameObject = null;
        public GameObject CacheGameObject { get { if (_CacheGameObject == null) { _CacheGameObject = gameObject; } return _CacheGameObject; } }

        private Transform _CacheTransform = null;
        public Transform CacheTransform { get { if (_CacheTransform == null) { _CacheTransform = transform; } return _CacheTransform; } }
    }
}

接着我们新建一个QRawImageEditor.cs的脚本,将其放入Editor文件夹下。代码如下

 /**
*   Author:onelei
*   Copyright © 2019 - 2020 ONELEI. All Rights Reserved
*/
using UnityEditor;
using UnityEngine;

namespace Lemon.UI
{
    [CustomEditor(typeof(QRawImage), true)]
    public class QRawImageEditor : UnityEditor.UI.RawImageEditor
    {
        [MenuItem("GameObject/UI/QRawImage", false, UtilEditor.Priority_QRawImage)]
        public static QRawImage AddComponent()
        { 
            QRawImage component = UtilEditor.ExtensionComponentWhenCreate<QRawImage>(typeof(QRawImage).Name.ToString());
            //设置默认值
            SetDefaultValue(component);
            return component;
        }

        QRawImage component;
        public override void OnInspectorGUI()
        {
            component = (QRawImage)target;
            base.OnInspectorGUI();
            component.key = EditorGUILayout.TextField("KEY", component.key);
            if (!component.bInit)
            {
                component.bInit = true;
                SetDefaultValue(component);
            }
        }

        private static void SetDefaultValue(QRawImage component)
        {
            if (component == null)
                return;
            component.raycastTarget = false;
        } 
    }
}

详细代码参见:https://github.com/onelei/Lemon/tree/master/Assets/QGUI,欢迎Star。

欢迎关注微信公众号:Unity游戏开发笔记
在这里插入图片描述
QQ群:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值