IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity脚本开发常用特性 -> 正文阅读

[游戏开发]Unity脚本开发常用特性

菜单项

???????大前提:如果引用了unityEditor的命名空间或者继承自Editor类的话,需要把该脚本放在Editor目录下,该目录可以在Asset根目录下,也可以在其子目录下。还有几个重载就不再验证了。

[MenuItem]

???????必须为静态方法,一般用于插件开发,平时无卵用。

using UnityEditor;
using UnityEngine;

public class Menu : MonoBehaviour
{
    [MenuItem("Menu/Menu1")]
    public static void MenuList()
    {
        Debug.Log("Menu");
    }
}

出现菜单选项
???????还可以添加快捷键
???????[MenuItem("Menu/Menu1 _W")]直接按W触发,无大小写限制
在这里插入图片描述
???????[MenuItem("Menu/Menu1 #w")]#表示shift+快捷键触发
???????[MenuItem("Menu/Menu1 %w")]%表示ctrl+快捷键触发
???????[MenuItem("Menu/Menu1 &w")]&表示alt+快捷键触发

[AddComponentMenu]

???????向Inspector组件菜单中添加目录索引,如果目录已经存在了则不会再次创建。

using UnityEngine;

[AddComponentMenu("Audio/ComponentTest")]
public class ComponentTest : MonoBehaviour
{
    
}

在这里插入图片描述
???????就算改为已有脚本名字[AddComponentMenu("Audio/UIViewer")],也是添加的当前脚本,并不冲突。
在这里插入图片描述

[ContextMenu]

???????还是上面的脚本,新添加一个方法,访问权限与返回值任意,必须为实例方法。

using UnityEngine;

[AddComponentMenu("Audio/ComponentTest")]
public class ComponentTest : MonoBehaviour
{
    [ContextMenu("DoSomething")]
    private void DoSomething()
    {

    }
}

???????右键刚才添加的脚本就显示了。
在这里插入图片描述

[RequireComponent]

using UnityEngine;

[RequireComponent(typeof(Audio.AudioManager))]
[AddComponentMenu("Audio/UIViewer")]
public class ComponentTest : MonoBehaviour
{
    [ContextMenu("DoSomething")]
    private void DoSomething()
    {

    }
}

在这里插入图片描述
???????此特性即添加此组件时,同时添加其依附组件,在未移除此组件时不可以移除依附组件,不光插件开发可以用到,平时也可以用。

Inspector界面

???????声明public字段时,可以在Inspector面板显示,其他访问权限的字段则不显示,这几个特性即与显示和数值有关。序列化我也是似懂非懂,可以参照下这篇文章——序列化理解起来很简单

[HideInInspector]和[NonSerialized]

???????HideInInspector单纯的在面板中隐藏,还是会序列化。
???????NonSerialized不仅在面板中隐藏,而且会阻止该字段序列化。
???????先声明三个普通的公有字段,不加特性,在Inspector面板把三个值都改为2。然后添加特性后在代码处修改并打印。

using System;
using UnityEngine;

public class InspectorTest : MonoBehaviour
{
    public int a = 3;
    [HideInInspector] public int b = 3;
    [NonSerialized] public int c = 3;

    private void Awake()
    {
        Debug.Log("a" + a + " " + "b" + b + " " + "c" + c);
    }
}

结果为
在这里插入图片描述
???????面板里也只出现了A的值,BC都被隐藏。B的值仍然是Inspector面板里赋予的初值,而C的值却可以被改变。

[Serializable]

???????可以把公有引用字段显示在面板上。

using System;
using UnityEngine;

public class InspectorTest : MonoBehaviour
{
    public AnimatorTest animatorTest;
}

[Serializable]
public class AnimatorTest
{
    public Animator animator;
    public AnimationClip animationClip;
    public Color color;
}

在这里插入图片描述

[SerializeField]

???????加在非公有字段前面,可以把非公有的字段显示在面板上,同时对其序列化。
???????同样声明赋予初值没用,会取用面板赋予的值。

自定义操作界面

???????

[CustomEditor]

???????自定义Inspector面板里数据的显示、排序等,这里只写简单使用。同样也是数据类,四个字段。

using System;
using UnityEngine;

public class InspectorTest : MonoBehaviour
{
    public int a;
    public float b;
    public string c;
    public DataBase d;
}
[Serializable]
public class DataBase
{
    public int a;
    public float b;
}
using UnityEditor;

[CustomEditor(typeof(InspectorTest))]
public class InspectorEditor : Editor
{
    public SerializedObject inspectorTest;
    public SerializedProperty aInteger;
    public SerializedProperty bFloat;
    public SerializedProperty cString;
    public SerializedProperty dDataBase;

    private void OnEnable()
    {
        inspectorTest = new SerializedObject(target);
        aInteger = inspectorTest.FindProperty("a");
        bFloat = inspectorTest.FindProperty("b");
        cString = inspectorTest.FindProperty("c");
        dDataBase = inspectorTest.FindProperty("d");
    }

    public override void OnInspectorGUI()
    {
        base.OnInspectorGUI();
        EditorGUILayout.PropertyField(aInteger);
        EditorGUILayout.PropertyField(cString);
        EditorGUILayout.PropertyField(bFloat);
        EditorGUILayout.PropertyField(dDataBase);
        inspectorTest.Update();
    }
}

在这里插入图片描述

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-01-04 13:45:22  更:2022-01-04 13:45:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:50:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码