Unity常用特性(Attribute)用法

一.UnityEngine命名空间

1.[Header(string)]

inspector面板上给显示的字段上加一个描述

通常情况下,用于在 Inspector 窗口中创建字段的逻辑分组

public class AttributeTest : MonoBehaviour
{[Header("public_field_num")]public int num;
}

2.[Tooltip(string)]

在inspector面板上的该字段停留时会显示提示

public class AttributeTest : MonoBehaviour
{[Tooltip("show_num_tip")]public int num;
}

3.[Space(float)]

inspector面板中添加垂直空间,使得不同的属性组之间有明确的分隔,参数指定了间距的像素值

public class AttributeTest : MonoBehaviour
{[Space(20.0f)]public int num;
}

4.[Range(float min, float max)]

限制数值变量的取值范围并以滑动条显示在Inspector中

public class AttributeTest : MonoBehaviour
{[Range(1.0f, 5.0f)]public int num;
}

5.[Min(float)]

限制一个 float或int 类型的变量的最小值

public class AttributeTest : MonoBehaviour
{[Min(1)]public int num;
}

6.[AddComponentMenu(string]

用于自定义在 Unity 编辑器的 “Component” 菜单中显示的脚本的位置。
这个特性允许你将脚本添加到特定的菜单路径下,以便更好地组织你的自定义组件。
在 Unity 中,通常情况下,你创建的所有脚本将显示在 “Component/Scripts” 菜单中。这可能会导致菜单变得混乱不堪,尤其是在复杂的项目中。为了解决这个问题,你可以使用 AddComponentMenu特性来将脚本分类和组织。

[AddComponentMenu("Menu/AttributeTest")]
public class AttributeTest : MonoBehaviour
{public int num;
}

7.[ColorUsage(bool, bool)]

用于指定颜色字段的属性,以便在 Inspector 窗口中显示颜色拾取器,允许用户选择颜色。

ColorUsageAttribute 的参数有两个:

Show Alpha: 这是一个布尔值,用于指定是否显示颜色拾取器中的 Alpha 透明度通道。如果设置为 true,则颜色拾取器将包括 Alpha 透明度通道,允许用户选择带有透明度的颜色。

HDR: 一个布尔值,用于指定颜色是否使用高动态范围 (HDR)。如果设置为 true,颜色值将被视为 HDR 颜色,可以具有更高的亮度和对比度范围。

[AddComponentMenu("Menu/AttributeTest")]
public class AttributeTest : MonoBehaviour
{[ColorUsage(true, true)]public Color myColor;
}

8.[ContextMenu(string)]

用于在 Inspector 窗口中为组件或脚本添加上下文菜单

这个特性通常用于自定义编辑器扩展,以便提供额外的工具或便捷的功能。例如,你可以在脚本中的方法上添加一个上下文菜单项,当点击该菜单项时,会触发方法执行,用于执行特定任务。

public class AttributeTest : MonoBehaviour
{[ContextMenu("Do Something")]private void CustomMethod(){// 当在 Inspector 中的上下文菜单中选择 "Do Something" 时,将触发这个方法。Debug.Log("Doing something...");}
}

9.[ContextMenuItem(string, string)]

用于在 Inspector 窗口中为字段或属性添加自定义上下文菜单项

你可以在自定义的字段上应用这个特性,以便在 Unity 编辑器的 Inspector 窗口中为它们添加自定义的上下文菜单项。这些菜单项可以在编辑时执行特定的操作

public class AttributeTest : MonoBehaviour
{[ContextMenuItem("Reset Score", "ResetScore")]public int playerScore;private void ResetScore(){playerScore = 0;}
}

在这个示例中,[ContextMenuItem(“Reset Score”, “ResetScore”)] 特性被应用于 playerScore 字段。
这将为 Inspector 中的 playerScore 字段创建一个上下文菜单项,当在该字段上右击时显示为 “Reset Score”。
当用户在 Inspector 中选择这个菜单项时,将触发 ResetScore 方法,这个方法将 playerScore 重置为 0。

10.[CreateAssetMenu()]

用于在 Unity 编辑器中为脚本创建自定义资源菜单项

这个特性允许你在 “Assets” 菜单下创建新的自定义资源,例如脚本的实例或配置文件。
你可以将 CreateAssetMenuAttribute 特性应用于你的自定义脚本类,以便在 Unity 编辑器中方便地创建新的资源实例。这对于生成自定义配置文件、材质、纹理等非常有用。

[CreateAssetMenu(fileName = "fileName1", menuName = "menu1/menu2")]
public class AttributeTest : ScriptableObject
{}

11.[Delayed]

直到用户按 Enter 键或将焦点字段移开后,该字段才会返回新值。

public class AttributeTest : MonoBehaviour
{[Delayed]public float delayedValue = 0.0f;void Update(){Debug.Log("Delayed Value: " + delayedValue);}
}

12.[DisallowMultipleComponent]

当你将此特性添加到一个脚本类上时,Unity 将确保在同一 GameObject 上只能添加一个该脚本类型的组件

[DisallowMultipleComponent]
public class AttributeTest : MonoBehaviour
{
}

重复添加有该特性的脚本组件失败

13.[ExecuteInEditMode]

ExecuteInEditMode 特性用于标记在 Unity 中的脚本类,以确保它们在编辑模式下也会执行,而不仅仅在播放模式下执行。这对于那些需要在编辑器中进行实时交互和编辑的脚本非常有用

[ExecuteInEditMode]
public class AttributeTest : MonoBehaviour
{public Vector3 somePosition;private void Update(){// 这里的代码将在编辑器模式下执行transform.position = somePosition;}
}

14.[HelpURL(string)]

为类提供自定义文档 URL,按Ctrl键点击可跳转到链接。

[HelpURL("https://docs.unity3d.com/cn/2020.3/ScriptReference/HelpURLAttribute.html")]
public class AttributeTest : MonoBehaviour
{
}

15.[HideInInspector]

HideInInspector用于将字段隐藏在 Inspector 窗口中,即使它们是公共字段

public class AttributeTest : MonoBehaviour
{public int publicField; // 这个字段将显示在 Inspector 窗口中[HideInInspector]public int hiddenField; // 这个字段将被隐藏,不会在 Inspector 中显示
}

16.[Multiline(int)]

用于标记一个字符串字段,告诉 Inspector 窗口该字段可以显示多行文本输入框。

public class AttributeTest : MonoBehaviour
{[Multiline(4)] // 将该字段标记为多行文本输入,显示 4 行文本输入框public string description;
}

17.[RequireComponent(Type)]

用于确保特定类型的组件在同一 GameObject 上一起存在,通常用于协助开发人员避免在 GameObject 上忘记添加必需的组件。

GameObject 上附加了该脚本类,但缺少指定的组件,Play模式下,Unity 将自动添加这些必需的组件,以确保 GameObject 具有正确的组件配置。

[RequireComponent(typeof(Rigidbody))]
public class AttributeTest : MonoBehaviour
{}

18.[RuntimeInitializeOnLoadMethod]

用于标记静态方法,在 Unity 运行时初始化时自动调用。

public class AttributeTest : MonoBehaviour
{[RuntimeInitializeOnLoadMethod]static void testInitializeOnLoad(){// 在游戏启动时执行的初始化逻辑Debug.Log("Game is starting, performing initialization...");}
}

19.[SerializeField]

当将该特性应用于一个字段或属性时,它将允许访问并编辑它,而不需要将字段标记为 public。

public class AttributeTest : MonoBehaviour
{[SerializeField]private int myField;
}

二.System命名空间

1.[Serializable]

用于标记脚本的自定义类,使它们可以在 Inspector 中显示并且可以序列化。

自定义类被标记为 SerializableAttribute,这意味着你可以在 Unity 的 Inspector 窗口中创建一个 PlayerSettings 类型的字段,然后设置其属性

public class AttributeTest : MonoBehaviour
{[Serializable]public class PlayerSettings{public string playerName;public int playerScore;public float playerHealth;}public PlayerSettings playerSettings;
}

2.[NonSerialized]

用于标记字段,以指示这些字段不应该被序列化,并且不会在Inspector面板上出现。
在 Unity 中,这通常用于在脚本中引用引用对象或在脚本中执行一些不希望在场景序列化时保存的操作。

public class AttributeTest : MonoBehaviour
{// 这个字段将不被序列化[NonSerialized]public int myInt;public float myFloat;
}

三.UnityEditor命名空间

1.[MenuItem(string]

用于在 Unity 编辑器的菜单栏中添加自定义菜单项。
这允许开发人员创建自定义的编辑器工具、快捷方式或功能,并将它们集成到 Unity 编辑器中,以提高工作效率。

MenuItem 特性能够将任何静态函数转变为菜单命令。仅静态函数可使用 MenuItem 特性。

public class AttributeTest : MonoBehaviour
{// Add a menu item named "Do Something" to MyMenu in the menu bar.[MenuItem("MyMenu/Do Something")]static void DoSomething(){Debug.Log("Doing Something...");}
}

2.[InitializeOnLoadMethod]

重新编译项目中的脚本时,会调用带有此特性的静态方法。

在 Unity 首次加载项目时、在 Unity 检测到脚本修改时,以及当进入运行模式时,会进行此调用.

public class AttributeTest : MonoBehaviour
{[InitializeOnLoadMethod]static void Initialize(){// 在指定的时刻执行初始化代码Debug.Log("Initialization method has been called12.");}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/67978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue项目的创建

运行第一个vue-cli应用程序 创建一个基于webpack模板的vue应用程序 vue init webpack 项目名根据自己需求选择 创建好之后如下 运行 cd vue01npm run dev运行之后如下 复制访问地址 : http://localhost:8080 停止服务 两次ctrlC 或者 一次ctrlc然后y idea中使用…

【技术杂谈】Arcgis调用天地图和卫星影像

Arcgis调用天地图和卫星影像 Arcgis调用天地图 1.注册用户官网地址:https://www.tianditu.gov.cn/在官网右上角找到“注册”,输入账号信息完成注册。 2.申请车成为天地图开发者在首页往下滑,找到开发资源下的成为开发者,填写好…

【ROS】RViz2源码分析(四):初始化、启动

【ROS】郭老二博文之:ROS目录 1、简述 RViz2在main函数中,首先注册日志处理函数; 将 RCLCPP_DEBUG 等日志记录函数,通过 rviz_common::set_logging_handlers() 注册到 rviz_common 中。然后,创建界面类 rviz_common::VisualizerApp,并执行初始化 vapp.init(argc, argv)…

【CS61A 2024秋】Python入门课,全过程记录P3(Week5 Sequences开始,更新于2025/1/23)

文章目录 关于基本介绍👋新的问题Week5Mon Sequences阅读材料 关于 个人博客,里面偶尔更新,最近比较忙。发一些总结的帖子和思考。 江湖有缘相见🤝。如果读者想和我交个朋友可以加我好友(见主页or个人博客&#xff0…

android手机应用连接热点后无法进行tcp连接

你在WifiNetworkSpecifer连接回调onavaliable里,再次调用bindProcessToNetwork试试,我这边模拟了一下,是可以建立tcp连接的 你的那个应用我一直没编译成功,你试试吧,应该这样是可以的 另一个同事找到了类似的方法&…

【华为路由的arp配置】

华为路由的arp配置 ARP:IP地址与MAC地址的映射。 R1: g0/0/0:10.1.1.254/24 g0/0/1:10.1.2.254/24 PC1: 10.1.1.1/16 PC2: 10.1.1.2/16 PC3: 10.1.2.3/16 动态ARP 查看PC1的arp表,可以看到,列表为空。 查看R1的arp表 在PC3上ping命令测…

SPDK vhost介绍

目录 1. vhost技术的背景与动机Virtio 介绍virtio-blk数据路径为例 2. vhost技术的核心原理2.1 vhost-kernel2.2 vhost-user举例 2.3 SPDK vhostvhost的优势IO请求处理数据传输控制链路调整 3. SPDK vhost的实现与配置3.1 环境准备3.2 启动SPDK vhost服务3.3 创建虚拟块设备3.4…

GPU 编程系列:内核网格与多维数据处理

GPU 编程系列:内核网格与多维数据处理 大家好,欢迎来到 GPU 编程系列的第三集!在这一集中,我们将深入探讨内核网格的概念,并展示如何利用多维网格来处理复杂的数据结构。 3 内核网格的基础 在上期节目中,…

电容的一些常用数值

如果是滤高频信号的小电容一般采用100nF 如果是滤低频信号的大电容一般采用10uF(10000nF) 比如这个LDO降压 两个一起用滤波效果会更好 如果想要供电引脚悬空,按理不能悬空,所以应该接大电阻接地,一般采用5.1KΩ 比如这个6Pin USB-TypeC的…

Apache Flink 概述学习笔记

一、引言 在大数据处理领域,Apache Flink 是一个极具影响力的开源流批一体化计算框架,它以其独特的架构和强大的功能,为大规模数据处理提供了高效、灵活的解决方案。 二、基本概念 Flink 是什么:Flink 是一个分布式流批处理框架…

Java面向对象专题

面向过程和面向对象的区别 面向过程:当事件比较简单的时候,利用面向过程,注重的是事件的具体的步骤/过程,注重的是过程中的具体的行为,以函数为最小单位,考虑怎么做。 面向对象:注重找“参与者”,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑…

业余无线电 对讲机常用频率使用

我自己的总结是,基本可以无忧使用: 144.035-145.800 146.000-148.000 430.000-431.900 432.240-435.000 438.000-439.000 50Mhz一般手台不支持,暂不记录。 以下为附录可以自行阅读,本文内容如有错误请留言指正。 特定波段…

linux 扩容

tmpfs tmpfs 82M 0 82M 0% /run/user/1002 tmpfs tmpfs 82M 0 82M 0% /run/user/0 [输入命令]# fdisk -lu Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors Units: sectors of 1 * 512 512 bytes Sector size (logi…

一个基于Python+Appium的手机自动化项目~~

本项目通过PythonAppium实现了抖音手机店铺的自动化询价,可以直接输出excel,并带有详细的LOG输出。 1.excel输出效果: 2. LOG效果: 具体文件内容见GitCode: 项目首页 - douyingoods:一个基于Pythonappium的手机自动化项目,实现了…

VMware虚拟机迁移到阿里云

VMware虚拟机迁移到阿里云是一个涉及多个步骤的过程,具体如下: 使用阿里云的服务器迁移中心(SMC)进行P2V或V2V迁移。如果是小型应用,可以通过制作镜像文件然后上传至阿里云OSS,并基于该镜像创建ECS实例。对…

(回溯分割)leetcode93 复原IP地址

#include<iostream> #include<vector> #include<string> #include<algorithm> using namespace std; //卡尔的图不是按照程序执行过程而是直接画程序会执行的过程 // 实际执行是&#xff1a;n个字符&#xff0c;递推n1后&#xff08;叶子节点&#xff…

张一鸣从创业之初到现在的231句话

1.人常会不自觉地记下对自己有利的部分&#xff0c;这是形成委屈的重要原因。 2.延迟满足感程度在不同量级的人是没法有效讨论问题的&#xff0c;因为他们愿意触探停留的深度不一样。 3.做不好的就别做了&#xff0c;要做就必须做到非常好。 4.当感到沟通困难的时候&#xf…

2025年1月23日-知道自己在哪儿,知道自己在路上

在哪里&#xff1f;在路上&#xff1f; 想写一写的时候&#xff0c;就突然想写一写。 一些事情&#xff0c;一些在路上的事情&#xff0c;一些知道自己在路上的事情。 元旦过后&#xff0c;市场一路阴跌&#xff1b;牛市多长阴&#xff0c;一根大阴线配合小反弹&#xff0c;…

分子动力学模拟里的术语:leap-frog蛙跳算法和‌Velocity-Verlet算法

分子动力学模拟&#xff08;Molecular Dynamics Simulation&#xff0c;简称MD&#xff09;是一种基于经典力学原理的计算物理方法&#xff0c;用于模拟原子和分子在给定时间内的运动和相互作用‌。以下是关于分子动力学模拟的一些核心术语和概念&#xff1a; ‌定义系统‌&am…

JS-Web API -day03

一、事件流 1.1 事件流与两个阶段说明 事件流 指的是事件完整执行过程中的流动路径 假设页面有个div标签&#xff0c;当触发事件时&#xff0c;会经历两个阶段&#xff0c;分别是捕获阶段、冒泡阶段 捕获阶段&#xff1a;Document - Element html - Elementbody - Element div…