【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用)

这篇具有很好参考价值的文章主要介绍了【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏:UnityUI篇实战

⭐🅰️IMGUI封装实践【三】⭐




⭐前言⭐

【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI


🎶(A) 控件创建及其封装——标签


【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI
【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI

  • UML类图【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI

  • 封装代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:  标签的创建
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class Label : ControlFather 
{
   

    protected override void OffDrawStyle()
    {
        GUI.Label(ContorlPosition.LastPos ,ContorlContent );
    }

    protected override void OnDrawstyle()
    {
        GUI.Label(ContorlPosition.LastPos, ContorlContent ,ContorlStyle);
    }
}


🎶(B) 控件创建及其封装——按钮


【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI
【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI

  • 按钮封装代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 创建按钮
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class Button : ControlFather
{
    public event  UnityAction triggerEvent; 
                                            //事件的添加在此起到妙用
                                            //只要在外部给予响应函数                

    protected override void OffDrawStyle()
    {
        if(GUI.Button(ContorlPosition.LastPos ,ContorlContent))
        {
            triggerEvent?.Invoke();
        }
    }

    protected override void OnDrawstyle()
    {
       if(GUI.Button(ContorlPosition.LastPos, ContorlContent,ContorlStyle ) )
        {
           triggerEvent?.Invoke();
        }
    }
}


🎶(C) 控件创建及其封装——多选框


【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI
【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI

【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI

  • 封装代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 多选框功能的封装
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class ToggleM : ControlFather
{
    public  bool IsSwitch;
    private bool previousSwitch;
    public event UnityAction<bool> triggerEvent;

    protected override void OffDrawStyle()
    {
      IsSwitch = GUI.Toggle(ContorlPosition.LastPos, IsSwitch, ContorlContent);

      if(IsSwitch != previousSwitch )  //当上次开关状态 和 本次开关状态不一样时
        {
            triggerEvent?.Invoke( IsSwitch );
            previousSwitch = IsSwitch; //更新上一次的开关状态
        }
    }

    protected override void OnDrawstyle()
    {
        IsSwitch = GUI.Toggle(ContorlPosition.LastPos, IsSwitch, ContorlContent,ContorlStyle );
        if (IsSwitch != previousSwitch)  
        {
            triggerEvent?.Invoke(IsSwitch);
            previousSwitch = IsSwitch;  
        }
    }
}


🎶(D) 控件创建及其封装——单选框


【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI
【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI

  • UML类图
    【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI

  • 封装代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:    
//___________功能: 单选框功能的创建
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------

[ExecuteAlways ]
public class ToggleS : MonoBehaviour
{
    public ToggleM[] toggles;

    private ToggleM previousToggle;

    //此时只需放在start里面,而不需要放在持续帧的生命周期里的原因是,将方法放进事件中只需一次
    void Start()
    {
        if (toggles.Length == 0) return;

        foreach (ToggleM item1 in toggles )
        {
            item1.triggerEvent += (swtich) =>
            {
                //如果传入的开关是开的,那么其他全部都设为关
                if(swtich) 
                {
                    foreach (ToggleM item2 in toggles)
                    {
                        item2.IsSwitch = item2 != item1 ? false : true ;
                    }
                    previousToggle = item1;
                }
                //如果当前是开的其他全部是关的,就不允许它变成关(保证至少有一个开启)
                else if(item1 == previousToggle )
                {
                    item1.IsSwitch = true;
                }
            };

          
        }
        

        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}


🎶(E) 控件创建及其封装——输入框


【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI
【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI

  • 封装代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能:输入框控件的封装创建
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class InputFram : ControlFather
{
    public event UnityAction<string> triggerEvent; //和单选框控件一样

    private string previousText = "";

    protected override void OffDrawStyle()
    {
        ContorlContent.text = GUI.TextField(ContorlPosition .LastPos ,ContorlContent.text);
        if(previousText != ContorlContent.text )
        {
            triggerEvent?.Invoke(ContorlContent.text);
            previousText = ContorlContent.text;
        }
    }

    protected override void OnDrawstyle()
    {
        ContorlContent.text = GUI.TextField(ContorlPosition.LastPos, ContorlContent.text,ContorlStyle );
        if (previousText != ContorlContent.text)
        {
            triggerEvent?.Invoke(ContorlContent.text);
            previousText = ContorlContent.text;
        }
    }
}


🎶(F) 控件创建及其封装——拖动条


【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI
【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI

  • 封装代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 滚动条控件的封装创建
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------

public enum E_Diretioon //拖动条的方向
{
    Horizontal,
    Vertical
}

public class Slider : ControlFather
{
    public float MaxValue = 1 ;    //拖动条的最大值
    public float MinValue = 0 ;    //拖动条的最小值
    public float NowValue = 0.5f;  //拖动条的当前值
    public GUIStyle smallButton;   //小按钮自定义样式,当自定义样式打开后,拖动条要和小按钮的样式一同重载

    public  event UnityAction<float> triggerEvent; 
    public E_Diretioon sliderDirecion = E_Diretioon.Vertical; 
    private float previousValue;

    protected override void OffDrawStyle()
    {
        switch (sliderDirecion)
        {
            case E_Diretioon.Horizontal:
                NowValue = GUI.HorizontalSlider(ContorlPosition.LastPos,NowValue,MinValue ,MaxValue );
                break;
            case E_Diretioon.Vertical:
                NowValue = GUI.VerticalSlider(ContorlPosition.LastPos, NowValue, MinValue, MaxValue);
                break;
            default:
                break;
        }
        if(previousValue != NowValue )
        {
            triggerEvent?.Invoke(NowValue); 
        }
    }

    protected override void OnDrawstyle()
    {
        switch (sliderDirecion)
        {
            case E_Diretioon.Horizontal:
                NowValue = GUI.HorizontalSlider(ContorlPosition.LastPos, NowValue, MinValue, MaxValue,ContorlStyle,smallButton );
                break;
            case E_Diretioon.Vertical:        //没有单个拖动条自定义样式的重载,要和小按钮的一起重载
                NowValue = GUI.VerticalSlider(ContorlPosition.LastPos, NowValue, MinValue, MaxValue,ContorlStyle,smallButton  );
                break;
            default:
                break;
        }
        if (previousValue != NowValue)
        {
            triggerEvent?.Invoke(NowValue);
        }
    }
}


🎶(G) 控件创建及其封装——图片


【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI

【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI

  • GUI.DrawTextrrue 没有自定义样式的重载

  • 封装代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:       ______________
//___________功能: 图片空间的封装创建
//___________创建者:秩沅_______________
//_____________________________________
//-------------------------------------
public class TextureIMGUI : ControlFather
{
    
    public ScaleMode scaleMode = ScaleMode.StretchToFill; //保持比例
    protected override void OffDrawStyle()
    {
        GUI.DrawTexture(ContorlPosition.LastPos,ContorlContent .image ,scaleMode);
    }

    protected override void OnDrawstyle()
    {
        GUI.DrawTexture(ContorlPosition.LastPos, ContorlContent.image, scaleMode);
    }
}


⭐🅰️⭐

【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI

缺点1:无法在编译过程进行可视化调整
缺点2:无法分辨率自适应

【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用),# UnityGUI篇,# unity实战基础,unity,游戏引擎,IMGUI,UI文章来源地址https://www.toymoban.com/news/detail-560860.html


到了这里,关于【Unity之IMGUI脚本封装】—自定义常用控件的封装(即拿即用)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity之IMGUI】—位置信息类和控件基类的封装

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : 缺点1:无法在编译过程进行可视化调整 缺点2:无法分辨率自适应 作用:让控件根据调整对齐 最终代码 特点: 类是抽象类:原因基类

    2024年02月12日
    浏览(24)
  • uniapp 微信小程序保存图片到系统相册(包括获取手机相册权限)即拿即用

    1. 代码,即拿即用 2. 介绍使用到的方法 1. uni.getSetting uniapp官网链接: https://uniapp.dcloud.io/api/other/setting.html#getsetting 2. uni.authorize 链接:https://uniapp.dcloud.io/api/other/authorize.html#authorize 3. uni.saveImageToPhotosAlbum 链接: https://uniapp.dcloud.io/api/media/image.html#saveimagetophotosalbum 4. uni.openSe

    2024年02月11日
    浏览(50)
  • Unity 用脚本操作常用UI控件(上)

    控件介绍: 在界面系统的术语中,将一个具有独立状态、外观和操作的对象称为控件。例如,常用的交互控件有按钮、输入框、滑动条等,常见的非交互式控件有文本标签、图片等。 Unity采用了父子物体和组件的设计思想,其每个界面控件,往往也是由游戏物体挂载组件,以

    2024年02月09日
    浏览(29)
  • 【unity之IMGUI实践】敌方逻辑封装实现【六】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤实现 1.炮台的行为逻辑封装:旋转,触发检测,发射炮弹及特效 2.检测玩家后自动瞄准攻击 3.玩家扣

    2024年02月15日
    浏览(35)
  • 【unity之IMGUI实践】游戏结束流程封装实现【七】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤实现 1.坐标三个转化 2.GUI的原点和屏幕的原点 3.结构体的特点回顾——涉及Rect_结构体类型 4.血条的

    2024年02月14日
    浏览(33)
  • 【unity之IMGUI实践】通用API实现抽象行为封装【五】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤 1.添加道具预制体(随机生成武器) 2.封装道具基类 3.封装武器道具逻辑 1.封装道具基类 封装武器道具

    2024年02月15日
    浏览(30)
  • 【Qt】6.QTableWidget控件、其他控件、自定义控件封装、鼠标事件

    目录 QTableWidget控件 代码 widget.cpp 结果 其他控件 stackWidget栈控件 下拉框 代码 widget.cpp 结果 自定义控件封装 代码 smallwidget.h smallwidget.cpp widget.cpp 结果 鼠标事件 代码 mylabel.h mylabel.cpp 结果 设置列数setColumnCount 添加水平头setHorizontalHeaderLabels 设置行数setRowCount 设置正文setItem(行号

    2024年02月07日
    浏览(38)
  • qt自定义控件的封装

    刚学了一个很有意思的东西,前面学了list,Tree,Table三大控件和一部分常用基础控件,但感觉没啥意思,就是用别人的直接用,刚学了一个自定义控件的封装,流程如下:   想把两个不相关的组件封装在一块,直接用ui不行,所以先新添加了qt设计师页面,新添加了一个SmallWidget *ui 在smallw

    2024年01月23日
    浏览(26)
  • winform 封装unity web player 用户控件

    VS2015 Unity 5.3.6f1 (64-bit) Unity官方提供的UnityWebPlayer控件在嵌入Winform时要求读取的.unity3d文件路径(Src)必须是绝对路径 ,如果移动代码到另一台电脑,需要重新修改src。于是考虑使用winform用户控件来进行封装,以实现读取存放在工程文件夹下的.unity3d文件的效果。 WinForm内嵌

    2024年02月12日
    浏览(30)
  • Unity 操作常用控件(下)

    按钮是常用的交互UI组件,Unity的按钮组件主要属性介绍如下: Intractable(是否可交互) Transititon(外观状态切换),每个按钮都有蒲绒、高亮、按下、禁用4种状态,这四种状态下外观应该表现出区别。Unity提供了几种方式来定义外观的变化,稍后进行说明     Navigation(导航

    2024年02月10日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包