You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

DemonstrationImporter.cs 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System;
  2. using System.IO;
  3. using MLAgents.CommunicatorObjects;
  4. using UnityEditor;
  5. using UnityEngine;
  6. using UnityEditor.Experimental.AssetImporters;
  7. namespace MLAgents
  8. {
  9. /// <summary>
  10. /// Asset Importer used to parse demonstration files.
  11. /// </summary>
  12. [ScriptedImporter(1, new[] {"demo"})]
  13. public class DemonstrationImporter : ScriptedImporter
  14. {
  15. private const string IconPath = "Assets/ML-Agents/Resources/DemoIcon.png";
  16. public override void OnImportAsset(AssetImportContext ctx)
  17. {
  18. var inputType = Path.GetExtension(ctx.assetPath);
  19. if (inputType == null)
  20. {
  21. throw new Exception("Demonstration import error.");
  22. }
  23. try
  24. {
  25. // Read first two proto objects containing metadata and brain parameters.
  26. Stream reader = File.OpenRead(ctx.assetPath);
  27. var metaDataProto = DemonstrationMetaProto.Parser.ParseDelimitedFrom(reader);
  28. var metaData = new DemonstrationMetaData(metaDataProto);
  29. reader.Seek(DemonstrationStore.MetaDataBytes + 1, 0);
  30. var brainParamsProto = BrainParametersProto.Parser.ParseDelimitedFrom(reader);
  31. var brainParameters = new BrainParameters(brainParamsProto);
  32. reader.Close();
  33. var demonstration = ScriptableObject.CreateInstance<Demonstration>();
  34. demonstration.Initialize(brainParameters, metaData);
  35. userData = demonstration.ToString();
  36. Texture2D texture = (Texture2D)
  37. AssetDatabase.LoadAssetAtPath(IconPath, typeof(Texture2D));
  38. #if UNITY_2017_3_OR_NEWER
  39. ctx.AddObjectToAsset(ctx.assetPath, demonstration, texture);
  40. ctx.SetMainObject(demonstration);
  41. #else
  42. ctx.SetMainAsset(ctx.assetPath, model);
  43. #endif
  44. }
  45. catch
  46. {
  47. return;
  48. }
  49. }
  50. }
  51. }