Unity中 标记属性、类、方法等的特性的 “[ ]“ 的使用

这篇具有很好参考价值的文章主要介绍了Unity中 标记属性、类、方法等的特性的 “[ ]“ 的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.[RequireComponent(typeof(...))]

当某个脚本必须依赖其他脚本或者组件共同使用时,为了避免人为添加过程的操作失误,可以在代码中使用RequireComponent,它的作用就是添加该脚本时,会自动将所依赖的各个组件添加至gameobject上,避免人为操作的失误。
具体使用方法如下:

1)新建一个GameObject对象,同时新建C#脚本,例如test1.cs
2)编辑test1.cs脚本,将编辑好后的test1拖至GameObject对象上

using System.Collections;
using System.Collections.Generic;
[RequireComponent(typeof(Rigidbody),typeof(test2))]
public class test1 : MonoBehaviour 
{
    ...
}

或:

using System.Collections;
using System.Collections.Generic;
[RequireComponent(typeof(Rigidbody))]
[RequireComponent(typeof(test2))]
public class test1 : MonoBehaviour 
{
    ...
}

(也可以分开写,效果一样。同时可根据实际项目需求,修改[RequireComponent(typeof(Rigidbody))] 中的组件类型)

3)此时若手动删除Rigidbody对象,会有如下提示

unity serializefield 标签,unity,游戏引擎,c#,开发语言

因此,RequireComponent的使用可以很好的避免项目中因为相互依赖的组件缺失而导致不必要的错误。

2.[Header("...")]

Unity引擎的属性标签,用于在Inspector窗口中为脚本的某个字段或属性添加一个头部标签,以提高代码的可读性。

unity serializefield 标签,unity,游戏引擎,c#,开发语言unity serializefield 标签,unity,游戏引擎,c#,开发语言

3.[Range(minValue, maxValue)]

这个特性常常用于在Inspector窗口中调整脚本中的公共字段,以确保它们的值在合理的范围内。

unity serializefield 标签,unity,游戏引擎,c#,开发语言unity serializefield 标签,unity,游戏引擎,c#,开发语言

4.[SerializeField]

[SerializeField] 是Unity引擎中的特性(Attribute),用于标记私有字段或变量,并使其在Inspector窗口中可见和可编辑。通常情况下,私有字段是在脚本内部使用的,但如果希望在Unity编辑器中可以调整它们的值,就需要使用 [SerializeField] 特性。

unity serializefield 标签,unity,游戏引擎,c#,开发语言

unity serializefield 标签,unity,游戏引擎,c#,开发语言unity serializefield 标签,unity,游戏引擎,c#,开发语言

5. [CreateAssetMenu()]

[CreateAssetMenu] 是Unity引擎中的特性(Attribute),用于在Unity编辑器中创建自定义Asset(资源)菜单项,并使其能够通过右键菜单或"Assets"菜单中的"Create"子菜单创建相应的ScriptableObject。

这个特性通常用于创建可配置的资源,如配置文件、数据文件等。以下是一个简单的例子:

using UnityEngine;

// 在ScriptableObject的类上使用[CreateAssetMenu]特性
[CreateAssetMenu(fileName = "NewData", menuName = "CustomData/NewData", order = 1)]
public class CustomData : ScriptableObject
{
    public int dataValue;
}

解释:

  • [CreateAssetMenu] 特性被用于标记一个继承自 ScriptableObject 的类,表示这个类可以通过菜单创建相应的资源。
  • fileName 参数表示创建资源时的默认文件名。
  • menuName 参数表示资源在菜单中的路径。在这个例子中,资源将出现在 "Assets/Create/CustomData" 下,并命名为 "NewData"。
  • order 参数表示资源在菜单中的排序顺序。

使用这个特性后,可以在Unity编辑器中通过右键菜单或"Assets"菜单中的"Create"子菜单找到并创建这个 ScriptableObject 类型的资源。这种方法使得资源的创建更加直观和方便。

6.[System.Serializable]

[System.Serializable]的作用呢。可以让一个类也序列化。就是说有[System.Serializable] 属性的类,可以当做普通变量一样在inspector面板显示编辑了。当然不同的是显示和修改的是该类的成员。

在 C# 中,[Serializable] 是一个特性(Attribute),用于标记一个类,指示该类的实例可以被序列化。序列化是将对象转换为可存储或传输的格式的过程,以便稍后能够还原为原始对象。

在 Unity 中,这个特性经常用于脚本类,以便在编辑器中对其进行序列化,使其属性和字段可以在Inspector窗口中显示,并能够保存在场景文件或Asset文件中。

unity serializefield 标签,unity,游戏引擎,c#,开发语言unity serializefield 标签,unity,游戏引擎,c#,开发语言

下面是删掉[System.Serializable]的情况。

unity serializefield 标签,unity,游戏引擎,c#,开发语言unity serializefield 标签,unity,游戏引擎,c#,开发语言

7.[MenuItem(".../...")]

需要引入UnityEditor命名空间

用于创建自定义菜单项。通过使用这个特性,可以在 Unity 编辑器的菜单栏中添加自定义的菜单项,以执行特定的功能或命令,方法必须是静态方法,可以有返回值。

unity serializefield 标签,unity,游戏引擎,c#,开发语言

unity serializefield 标签,unity,游戏引擎,c#,开发语言

引号里面必须写明主菜单和子菜单,如果不写子菜单则会出现以下情况

unity serializefield 标签,unity,游戏引擎,c#,开发语言

unity serializefield 标签,unity,游戏引擎,c#,开发语言

8.[HideInInspector]

会将inspector中的对应的调整框隐藏

这样很方便可以管理一些变量,但是呢:比如有一些变量,咱们需要把它公开(比如别的类需要用到),但是又不想在inspector显示怎么办?
那么[HideInInspector]很好的解决了这个问题:

unity serializefield 标签,unity,游戏引擎,c#,开发语言unity serializefield 标签,unity,游戏引擎,c#,开发语言
一般来说:Public的变量。不添加[HideInInspector]默认会在inspector窗口中生成调整窗口。需要隐藏,则在Public修饰前加[HideInInspector]即可。文章来源地址https://www.toymoban.com/news/detail-825975.html

到了这里,关于Unity中 标记属性、类、方法等的特性的 “[ ]“ 的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Unity实现在3D模型标记

    Canvas 模式是UI与3D混合模式(Render model=Screen space-Camera) 实现在3D模型标记,旋转跟随是UI不在3D物体下 代码:

    2024年02月14日
    浏览(22)
  • Unity学会使用高级功能Attributes(特性),让您的程序如虎添翼

    在Unity中,Attributes用于增强类、字段、方法等程序元素的行为或元数据信息,这些信息可以在编辑器界面中或者通过代码反射来访问和使用。以下是如何在Unity中使用内置及自定义Attributes的示例说明: 此Attribute允许将私有变量显示在Unity Inspector中,尽管它不是public。 使Insp

    2024年02月01日
    浏览(43)
  • 【unity每日一记】unity中常见的特性大全

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【Unityc#专题篇】之c#系统化大礼包】 ⭐【unity数据持久化】数据管理类_PlayerPrfs ⭐【unity本站最全系列】unity常用API大全

    2024年02月11日
    浏览(88)
  • 【Unity3D】button组件无法使用onclick与image组件无法改变属性(如fillAmount等)的解决办法

    如果你遇到了:    AssetsScriptsGame.cs(37,16): error CS0079: The event \\\'Button.onClick\\\' can only appear on the left hand side of += or -= ArgumentException: GetComponent requires that the requested component \\\'Button\\\' derives from MonoBehaviour or Component or is an interface. UnityEngine.GameObject.GetComponent[T] () 检查一下编译器是否给你

    2024年02月15日
    浏览(50)
  • Unity - MenuItem特性

    MenuItem(string itemName, bool isValidateFunction, int priority) 参数1:菜单名 参数2:是否使用自定义条件控制菜单项是否可点击,默认为false,一般不赋值,需要用的话需要定义两个MenuItem         MenuItem 1 : 自定义条件控制菜单是否可点击,函数需要返回bool值         MenuItem 2 : 点击回

    2024年02月11日
    浏览(27)
  • Unity——触摸方法的使用

            首先在start()中开启触摸方法的使用:         然后在每一帧中对触摸方式进行判断:

    2024年01月16日
    浏览(50)
  • Unity-C# (面向对象三大特性)

    传值调用和引用调用 输出:11 传值调用中形参为一个新的临时变量,赋值由实参拷贝而来,只是赋予了与实参一样的值所以在函数体内部修改并不会影响实参 输出:22 引用调用时,形参拷贝的是实参的地址,二者指向同一个堆空间,所以形参改变会对实参造成影响 输出:

    2024年04月09日
    浏览(62)
  • unity NGUI使用方法

    很多基本模块比如按钮、slider等都能从Prefab中直接拖拽到场景中实现,但都需要有一个Collider(Prefab已经自带) 因为不仅是UI,所有带有Collider的游戏物体都能接收到OnClick, OnPress这样的事件——前提是需要在Main Camera里面添加上event System组件,然后自定义脚本添加以下函数:

    2024年02月05日
    浏览(46)
  • Unity之ShaderGraph属性类型

    ShaderGraph是Unity引擎中的一个可视化着色器编辑器,它允许开发者使用节点和连接线的方式来创建自定义的着色器。使用ShaderGraph,开发者可以通过简单的拽和连接节点来创建复杂的着色器效果,而无需编写任何代码。 为了更好的学习ShaderGraph,我们先来学习一下它的属性类型

    2024年02月10日
    浏览(34)
  • Unity Shader 属性的定义

    人的衣服 决定材质跟灯光的作用 若是把shader看作class,那么Property就可以看成成员变量 属性定义的通用格式 Properites{ Property[Property…] } ep:定义一个int: name:变量的名字,正常以下划线开头 display name: 供外界使用的参考说明,显示在unity的属性页 number:表示默认值 颜色属性

    2024年01月20日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包