Unity 使方法以按钮的形式在Inspector上

这篇具有很好参考价值的文章主要介绍了Unity 使方法以按钮的形式在Inspector上。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

先看结果

using UnityEngine;

public class Test : MonoBehaviour
{
    [InspectorButton("测试方法1")]
    public void Test1()
    {
        Debug.Log("Test1 Invoke!");
    }

    [InspectorButton]
    public int Test2()
    {
        Debug.Log("Test2 Invoke!");
        return 100;
    }
}

Unity 使方法以按钮的形式在Inspector上

 Unity 使方法以按钮的形式在Inspector上

目录结构(置于非Editor文件夹中)

Unity 使方法以按钮的形式在Inspector上

InspectorButtonAttribute.cs

using UnityEngine;

[System.AttributeUsage(System.AttributeTargets.Method)]
public class InspectorButtonAttribute : PropertyAttribute
{
    public readonly string Name;

    public InspectorButtonAttribute()
    {
    }

    public InspectorButtonAttribute(string name)
    {
        Name = name;
    }
}

InspectorButton.cs

using System;
using System.Collections;
using System.Linq;
using System.Reflection;
using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(MonoBehaviour), true)]
[CanEditMultipleObjects]
public class InspectorButton : Editor
{
    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();

        var mono = target as MonoBehaviour;
        if (mono == null)
            return;

        var methods = mono.GetType()
            .GetMethods(
                BindingFlags.Public | BindingFlags.NonPublic |
                BindingFlags.Instance | BindingFlags.Static
            ).Where(method =>
                Attribute.IsDefined(method, typeof(InspectorButtonAttribute))
            ).ToArray();

        foreach (var method in methods)
        {
            var attr = method.GetCustomAttribute<InspectorButtonAttribute>();
            DrawButton(method, attr.Name);
        }
    }

    private void DrawButton(MethodInfo methodInfo, string methodName)
    {
        if (string.IsNullOrEmpty(methodName))
            methodName = methodInfo.Name;

        EditorGUILayout.BeginHorizontal();

        if (GUILayout.Button(
            methodName,
            GUILayout.ExpandWidth(true)
        ))
        {
            foreach (var targetObj in targets)
            {
                var mono = targetObj as MonoBehaviour;
                if (mono == null)
                    continue;

                var val = methodInfo.Invoke(mono, new object[] { });
                if (val is IEnumerator coroutine)
                    mono.StartCoroutine(coroutine);
                else if (val != null)
                    Debug.Log($"{methodName}调用结果: {val}");
            }
        }

        EditorGUILayout.EndHorizontal();
    }
}

 

 文章来源地址https://www.toymoban.com/news/detail-512693.html

到了这里,关于Unity 使方法以按钮的形式在Inspector上的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Unity界面介绍:Inspector属性窗口

    Unity 中的游戏是由多个GameObjects(游戏物体)构成,这些游戏物体可以是多边形物体,脚本,声音,或其它图形元素如Lights等。Ispectror视窗会显示当前选择物体的详细信息,包括物体上当前连接的所有Componens(组件)和它们的属性。用户就是使用Componens(组件)来扩展当前场景中游戏

    2024年02月11日
    浏览(42)
  • Unity Editor Inspector界面编辑

    一、继承MonoBehaviour 1、[Header(\\\" \\\")] 标题 2、[Tooltip(\\\" \\\")] 如果鼠标光标是在字段上,显示的说明文本 3、[Range(0, 5)] 将int、float变量限制在特定范围内,滑动条 4、[Multiline] 字符串多行文本显示 5、[TextArea(2, 5)] 字符串多行文本显示,可以设置可现实的最大值和最小值的行数

    2024年02月08日
    浏览(42)
  • 【Unity编辑器】拓展Inspector视图

    目录 1、拓展源生组件 2、拓展继承组件 3、组件不可编辑 4、Context菜单 摄像机就是典型的源生组件。它的局限性就是拓展组件只能加在源生组件的最上面或者最下面,不能插在中间,不过这样也就够了 CustomEditor()表示自定义哪个组件,OnInspectorGUI()可以对它进行重新绘制,b

    2024年02月07日
    浏览(65)
  • unity初级——Inspector检视器面板开发

    目录 一、背景知识: 1、C#特性: 2、Unity中特殊目录: 3、*注意: 二、编辑器检视面板扩展属性 二、通过Editor脚本扩展组件(检视器外挂式开发) 三、检视器窗口开发 四、完成点击生成方块的工具 Resources:存储资源目录。 Plugins:需要跨语言条用的逻辑代码目录,三方插件,

    2024年02月09日
    浏览(35)
  • 【Unity】 基础交互入门(按钮点击事件的三种方法)

    1、在资源面板创建C#脚本 2、创建点击事件需要执行的代码(这里以loadMain为例),新增一个叫OnStartButtonClick的Public方法。 可以选择生成或者调试,从VS更新代码到Unity。 3、场景中创建Button和empty(生成空的GameObject) 4、将代码挂在刚刚的GameObject上(这里将GameObject重命名为

    2024年02月09日
    浏览(49)
  • Unity3D:专属 Inspector

    推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 专属 Inspector 是专门用于特定游戏对象、Unity 组件或资源的 Inspector 窗口。 它始终显示为其打开的项目的属性,即使您在场景或项目中选择了其他内容。 专属 Inspector 的工作方式与常规 Inspector 一样,但有

    2024年02月12日
    浏览(39)
  • unity | EventTrigger(实现鼠标/按钮按下、抬起等时执行的方法)

    一、类比常用按钮 按钮组件一般只有当点击时,执行的方法。 点击:需要按下再起来 二、按钮的其他用法 但有时候,我们可能只需要按下的时候执行,或者抬起的时候执行,这时需要在加入EventTrigger组件  一、EventTrigger组件 当点击时Add New Event Type时,可以选择这个按钮响

    2024年02月09日
    浏览(36)
  • 【Unity编辑器扩展】| Inspector监视器面板扩展

    前言 前面我们介绍了Unity中编辑器扩展的一些基本概念及基础知识,还有编辑器扩展中用到的相关特性Attribute介绍。 后面就来针对Uniity编辑器扩展中比较常用的模块进行学习介绍。 本文就来详细介绍一下Unity编辑器扩展中关于 Inspector面板 扩展功能学习。

    2024年02月08日
    浏览(61)
  • Unity编辑器扩展插件 Odin Inspector 全特性介绍

    简介 Odin已经可以说是非常出名了,深受广大开发者喜爱,AssetStore上买的也挺多的,非常好用的Unity编辑器拓展插件,它的很多特性可以使我们的Inspector面板变得更加直观易用。 本次介绍的时Odin的3.0.8.0版本,也就是最新版本的所有特性的功能。 1.AssetsOnly / SceneObjectsOnly 标记

    2024年02月03日
    浏览(57)
  • Mybatis 中如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?

    在Mybatis中,可以通过配置映射文件来将SQL执行结果封装为目标对象并返回。 一种映射形式是使用resultType属性,将查询结果映射为指定的目标对象。例如: 另一种映射形式是使用resultMap属性,通过定义映射关系来将查询结果映射为目标对象。例如: 除了以上两种形式,还可

    2024年02月07日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包