iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
Software Development

Unity黑科技揭秘:30個專業遊戲開發者必知的開發技巧系列 第 5

Unity 語法糖 2 - 讓我來製作你的Attribute!

  • 分享至 

  • xImage
  •  

自定義屬性

你可以創建自己的屬性來添加特定的元數據或行為。創建自定義屬性需要繼承 System.Attribute 並使用 [AttributeUsage] 指定屬性可以應用到哪些目標。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyCustomAttribute : Attribute
{
    public string Description { get; }

    public MyCustomAttribute(string description)
    {
        Description = description;
    }
}

如何自製作自己的 Attribute:

  1. 宣告需要用到的Header
using System;
using System.Reflection;
using UnityEngine;
  1. 自義一個新的Attribute
public class DataNameAttribute : Attribute
{
public string PropName;
}
  1. 宣告一個 Model Class

在需要更換名字的變數上加入DataName的Attribute,
複寫ToString的函式

public class Character
{
    [DataName(PropName = "LifePoint")]
    public int Hp { get; set; }

    [DataName]
    public int Mp { get; set; }

    public override string ToString()
    {

        string str = "";

        foreach (PropertyInfo info in GetType().GetProperties())
        {
            foreach (Attribute attr in Attribute.GetCustomAttributes(info))
            {
                if (attr.GetType() == typeof(DataNameAttribute))
                {
                    var propName = ((DataNameAttribute)attr).PropName;
                    if (propName != null)
                        str += ((DataNameAttribute)attr).PropName + ":" + info.GetValue(this) + " ";
                    else
                        str += info.Name + ":" + info.GetValue(this) + " ";
                }
            }
        }
        return str;
    }
}
  1. 使用方法
public class CharacterData : MonoBehaviour
{
    private void Start()
    {
        Character character = new Character();
        character.Hp = 100;
        character.Mp = 200;

        Debug.Log(character);

    }
}

5.顯示結果:
https://ithelp.ithome.com.tw/upload/images/20240817/20119470iQwLO5DqWC.png


上一篇
Unity 語法糖 - 請注意你的 [Attribute]!
下一篇
Unity Unit Test - 你就是不寫測試,才會沒時間!
系列文
Unity黑科技揭秘:30個專業遊戲開發者必知的開發技巧25
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言