天天看點

Unity 簡單使用System.Reflection對ScriptableObject資料進行初始化指派

1、ScriptableObject 資料打包Asset請看博文:http://blog.csdn.net/u014076894/article/details/39935787

2、建立ScriptableObject資料腳本(注意初始化方法反射的簡單使用)

using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;

public class TestData : ScriptableObject {
    
    // 注意變量名的命名對應關系(變量名命名規範可自行定義),後面反射會用到
    [RangeAttribute(0,1)]
    public float longth;
    public AudioClip clip;
    public List<int> datas;

    public static float Longth;
    public static AudioClip Clip;
    public static List<int> Datas;

    public static void Init() {
        TestData data = Resources.Load<TestData>("TestAssets");
        if(data != null) {
            Type t = typeof(TestData);

            foreach(var v in t.GetFields(BindingFlags.Public|BindingFlags.Static)) {
                string fileName = char.ToLower(v.Name[0]) + v.Name.Substring(1);
                var f = t.InvokeMember(fileName,BindingFlags.GetField,null,data,null);
                t.InvokeMember(v.Name, BindingFlags.SetField, null, null, new System.Object[] { f});
            }
        }
    }
}
           

這裡備注一下Unity版本5.3.4

3、簡單用例;

調用這個資料類型時,可直接調用靜态變量使用

TestData.Init();
        Debug.Log(TestData.Longth);
           

如有雷同,純屬巧合!

如有不足,歡迎指正!

繼續閱讀