Unity学会使用高级功能Attributes(特性),让您的程序如虎添翼

这篇具有很好参考价值的文章主要介绍了Unity学会使用高级功能Attributes(特性),让您的程序如虎添翼。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


在Unity中,Attributes用于增强类、字段、方法等程序元素的行为或元数据信息,这些信息可以在编辑器界面中或者通过代码反射来访问和使用。以下是如何在Unity中使用内置及自定义Attributes的示例说明:

使用内置Attributes例子

1. [SerializeField]

[SerializeField]
private int hiddenValue;

此Attribute允许将私有变量显示在Unity Inspector中,尽管它不是public。

2. [HideInInspector]

[HideInInspector]
public float hideInInspector;

使Inspector忽略该字段,不显示在编辑界面中。

3. [Range(min, max)]

[Range(0f, 1f)]
public float opacity;

对数值型字段添加范围限制,并在Inspector中以滑动条的形式呈现。

4. [Header(“Section Name”)]

[Header("Player Settings")]
public string playerName;
public int playerHealth;

在Inspector中为一系列属性创建标题分组。

5. [ExecuteInEditMode]

[ExecuteInEditMode]
public class CameraFollow : MonoBehaviour
{
    void Update()
    {
        // 这个脚本在编辑器非播放模式下也会执行Update方法
    }
}

标记一个MonoBehaviour使其在编辑器中的Edit Mode也能执行特定逻辑。

自定义并使用Attributes例子

示例1 自定义Attribute

首先,定义一个自定义Attribute:

using System;

public class CustomTagAttribute : PropertyAttribute
{
    public string TagName { get; set; }

    public CustomTagAttribute(string tagName)
    {
        TagName = tagName;
    }
}

然后,创建一个对应的PropertyDrawer以在Inspector中展示效果:

using UnityEngine;
using UnityEditor;

[CustomPropertyDrawer(typeof(CustomTagAttribute))]
public class CustomTagPropertyDrawer : PropertyDrawer
{
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        var tagAttr = attribute as CustomTagAttribute;
        EditorGUI.LabelField(position, $"{label.text} ({tagAttr.TagName})");
        // 根据需要实现自定义绘制逻辑
    }

    public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
    {
        return EditorGUI.GetPropertyHeight(property);
    }
}

最后,在Unity脚本中使用自定义Attribute:

public class MyScript : MonoBehaviour
{
    [CustomTag("Important Field")]
    public int myIntegerField;
}

现在,myIntegerField将在Inspector中显示时带有额外的信息“Important Field”。注意,对于这个自定义Attribute,我们还需要为其编写对应的PropertyDrawer来真正地改变Inspector中的显示方式。上述例子简化了PropertyDrawer的实现,实际应用中可能需要更复杂的操作来修改Inspector样式或行为。

示例2:创建一个自定义Attribute

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
public class CustomAuthorAttribute : Attribute
{
    public string AuthorName { get; set; }
    public string Version { get; set; }

    public CustomAuthorAttribute(string author, string ver)
    {
        AuthorName = author;
        Version = ver;
    }
}

上述代码定义了一个名为CustomAuthorAttribute的自定义Attribute,它可以应用于类或方法上,并带有作者名称和版本信息。

示例3:使用自定义Attribute

[CustomAuthor("John Doe", "1.0")]
public class MyClass
{
    // 类的成员...
}

[CustomAuthor("Jane Smith", "2.1")]
public void MyMethod()
{
    // 方法体...
}

这里,我们已经在MyClass类和MyMethod方法上应用了CustomAuthorAttribute,分别指定了作者和版本信息。

示例4:通过反射获取自定义Attribute信息

Type myType = typeof(MyClass);
var attributes = myType.GetCustomAttributes(typeof(CustomAuthorAttribute), true);

if (attributes.Length > 0)
{
    CustomAuthorAttribute attr = (CustomAuthorAttribute)attributes[0];
    Console.WriteLine($"Class '{myType.Name}' was authored by {attr.AuthorName}, version: {attr.Version}");
}

MethodInfo methodInfo = myType.GetMethod(nameof(MyMethod));
var methodAttributes = methodInfo.GetCustomAttributes(typeof(CustomAuthorAttribute), true);

if (methodAttributes.Length > 0)
{
    CustomAuthorAttribute methodAttr = (CustomAuthorAttribute)methodAttributes[0];
    Console.WriteLine($"Method 'MyMethod' was authored by {methodAttr.AuthorName}, version: {methodAttr.Version}");
}

这个示例展示了如何通过反射技术从类和方法中获取并打印出它们所关联的CustomAuthorAttribute属性值。

python推荐学习汇总连接:
50个开发必备的Python经典脚本(1-10)

50个开发必备的Python经典脚本(11-20)

50个开发必备的Python经典脚本(21-30)

50个开发必备的Python经典脚本(31-40)

50个开发必备的Python经典脚本(41-50)
————————————————

​最后我们放松一下眼睛
Unity学会使用高级功能Attributes(特性),让您的程序如虎添翼,unity,java,游戏引擎文章来源地址https://www.toymoban.com/news/detail-790615.html

到了这里,关于Unity学会使用高级功能Attributes(特性),让您的程序如虎添翼的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 让您的Nginx支持Http 3.0 协议

    Http 3.0 其实从最开设到正式的使用,已经过去了不少时间了,这块也是关系到我们现在数据安全一块很重要的发展,后续我们应该不在会有明文加密的协议的存在了吧,只是在加密的基础上,不断的升级现在的加密方法与技术升级,从而更高的保障我们的数据传输的高效与安

    2024年02月10日
    浏览(46)
  • Marked.js让您的文档编辑更加轻松自如

    ​ 低代码应用平台——kintone既可以保留更改记录,也有流程管理的功能,在公司内部分享会议记录啊、wiki等文档或学习资料等时非常的便利。 kintone还有丰富的文本编辑框,可以对内容进行编辑提高易读性。但是还是有不少人觉得如果能够使用Markdown编辑,将更加轻松,文本

    2024年02月03日
    浏览(36)
  • 免费SSL证书:JoySSL让您的网站更安全

    在今天的数字化时代,保护网站和用户信息的安全至关重要。SSL(Secure Sockets Layer)证书通过加密网站与用户之间的通信,确保数据传输的安全性。让您拥有一个SSL加密的网站是至关重要的,但您可能会担心高昂的费用。不过,您不必为此担忧,因为有一些免费的SSL证书可供

    2024年02月06日
    浏览(64)
  • 掌握SEO优化:让您的网站在搜索引擎中脱颖而出

    导言: 在当今数字化的时代,搜索引擎成为了人们获取信息的主要途径。作为网站拥有者,如何让您的网站在搜索引擎结果中排名靠前,成为用户首选,就显得尤为重要。这就需要掌握搜索引擎优化(SEO)的技巧。本文将为您介绍一些关键的SEO优化方法,帮助您提升网站在搜

    2024年02月11日
    浏览(94)
  • 智能生成的登录、注册和找回密码界面,让您的网站更加便捷和高效

    恰饭广告 GPT镜像站 本文介绍了一种基于GPT的智能生成技术,用于生成登录、注册和找回密码界面。我们使用了自然语言处理和机器学习技术,训练了一个GPT模型,可以根据用户的需求和网站的特点,自动生成符合要求的登录、注册和找回密码界面。我们的方法可以大大减少

    2024年02月08日
    浏览(43)
  • 将Apache服务与内网穿透结合,让您的网站可以公网访问

    Apache作为全球使用较高的Web服务器软件,它可以在几乎所有常见的计算机平台上运行。由于其卓越的跨平台性和高级安全性,又兼具快速、可靠且易于通过简单的API扩展而闻名,被广泛应用于Web服务器领域。本文主要分享一下在Windows系统如何安装与配置Apache服务,并结合内网

    2024年02月09日
    浏览(65)
  • 坚固可靠的多合一轨道交通天线让您的赏秋路途不再枯燥

    今年的法定节假日余额已清零,虽然国庆已过,但秋天正是出游的大好时节。在出游计划中,首先面临的就是交通工具的选择这个大难题,到底是选择自由度更高的自驾前往?还是更省心的公共交通?高铁上的信号质量依旧令人头疼,而一个可靠的轨道交通通信连接方案,能

    2024年02月08日
    浏览(56)
  • FonePaw iOS Transfer for Mac: 让您的IOS设备数据无忧传输

    在数字世界里,随着我们的生活与科技越来越紧密,数据传输成为了我们日常生活中的重要部分。尤其对于广大的苹果用户来说,如何方便、快速地传输数据成为了他们关注的焦点。今天,我要为大家介绍一款专门为Mac用户设计的IOS数据传输工具——FonePaw iOS Transfer for Mac。

    2024年02月04日
    浏览(61)
  • 8款优秀的AI绘画工具,让您的绘画创作发挥无限想象力

    今天为大家推荐8款优秀的AI绘画工具,帮助您在绘画创作中发挥无限想象力。这些工具结合了人工智能技术和艺术创作,能够帮助您实现更高水平的绘画作品。无论您是专业画家还是刚刚入门的爱好者,这些AI绘画工具都能为您提供灵感和支持。让我们一起探索这些令人惊叹

    2024年02月05日
    浏览(85)
  • 【JWT】解密JWT:让您的Web应用程序更安全、更高效的神秘令牌

    接下来看看由辉辉所写的关于JWT+ElementUI的相关操作吧 目录 🥳🥳Welcome Huihui\\\'s Code World ! !🥳🥳 一.JWT是什么 JWT工作原理 JWT验证过程 JWT刷新 二.为什么要使用JWT 三.JWT如何使用【工具类】 四.案例演示【JWT的强大】  1.没有用jwt 2.用了jwt web.xml 过滤器(跨域问题) JWT验证过滤器

    2024年02月08日
    浏览(60)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包