コード例 #1
0
ファイル: TableImporter.cs プロジェクト: XinHeCS/ResearchGate
 static void GetTableAttrInfo(System.Reflection.Assembly assembly)
 {
     foreach (var type in assembly.GetTypes())
     {
         var entityAttrs = type.GetCustomAttributes <TableEntityAttribute>(false);
         foreach (var attr in entityAttrs)
         {
             var entityInfo = new TableEntityInfo
             {
                 EntityType = type,
                 Attribute  = attr
             };
             cachedEntityInfos.Add(entityInfo);
         }
         var assetAttrs = type.GetCustomAttributes <TableAssetAttribute>(false);
         foreach (var attr in assetAttrs)
         {
             var assetInfo = new TableAssetInfo
             {
                 AssetType = type,
                 Attribute = attr
             };
             cachedAssetInfos.Add(assetInfo);
         }
     }
 }
コード例 #2
0
ファイル: TableImporter.cs プロジェクト: XinHeCS/ResearchGate
    static void LoadTableData(TableAssetInfo info)
    {
        string assetPath = "";
        string assetName = info.AssetType.Name + ".asset";

        assetPath = Path.Combine(info.Attribute.AssetPath, assetName);

        UnityEngine.Object asset = LoadOrCreateAsset(assetPath, info.AssetType);

        var assetFields = info.AssetType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);

        IWorkbook book = LoadBook(info.Attribute.ExcelPath);

        // Get filed and type infomation
        Type fieldType = assetFields[0].FieldType;

        if (!fieldType.IsGenericType || (fieldType.GetGenericTypeDefinition() != typeof(List <>)))
        {
            return;
        }
        Type       entityType    = fieldType.GetGenericArguments()[0];
        Type       listType      = typeof(List <>).MakeGenericType(entityType);
        MethodInfo listAddMethod = listType.GetMethod("Add", new Type[] { entityType });

        // Read data from table
        object list = Activator.CreateInstance(listType);

        for (int i = 0; i < book.NumberOfSheets; ++i)
        {
            ISheet sheet = book.GetSheetAt(i);
            if (sheet == null)
            {
                continue;
            }

            GetEntityListFromSheet(sheet, entityType, list, listAddMethod);
        }
        assetFields[0].SetValue(asset, list);

        if (info.Attribute.LogOnImport)
        {
            Debug.Log(string.Format("Imported {0} sheets form {1}.", book.NumberOfSheets, info.Attribute.ExcelPath));
        }

        EditorUtility.SetDirty(asset);
    }