|
using System; |
|
using System.Collections.Generic; |
|
using System.IO; |
|
using Unity.MLAgents.CommunicatorObjects; |
|
using UnityEditor; |
|
using UnityEngine; |
|
#if UNITY_2020_2_OR_NEWER |
|
using UnityEditor.AssetImporters; |
|
#else |
|
using UnityEditor.Experimental.AssetImporters; |
|
#endif |
|
using Unity.MLAgents.Demonstrations; |
|
|
|
namespace Unity.MLAgents.Editor |
|
{ |
|
|
|
|
|
|
|
[ScriptedImporter(1, new[] { "demo" })] |
|
internal class DemonstrationImporter : ScriptedImporter |
|
{ |
|
const string k_IconPath = "Packages/com.unity.ml-agents/Editor/Icons/DemoIcon.png"; |
|
|
|
public override void OnImportAsset(AssetImportContext ctx) |
|
{ |
|
var inputType = Path.GetExtension(ctx.assetPath); |
|
if (inputType == null) |
|
{ |
|
throw new Exception("Demonstration import error."); |
|
} |
|
|
|
try |
|
{ |
|
|
|
Stream reader = File.OpenRead(ctx.assetPath); |
|
|
|
var metaDataProto = DemonstrationMetaProto.Parser.ParseDelimitedFrom(reader); |
|
var metaData = metaDataProto.ToDemonstrationMetaData(); |
|
|
|
reader.Seek(DemonstrationWriter.MetaDataBytes + 1, 0); |
|
var brainParamsProto = BrainParametersProto.Parser.ParseDelimitedFrom(reader); |
|
var brainParameters = brainParamsProto.ToBrainParameters(); |
|
|
|
|
|
List<ObservationSummary> observationSummaries; |
|
try |
|
{ |
|
var agentInfoActionPairProto = AgentInfoActionPairProto.Parser.ParseDelimitedFrom(reader); |
|
observationSummaries = agentInfoActionPairProto.GetObservationSummaries(); |
|
} |
|
catch |
|
{ |
|
|
|
observationSummaries = new List<ObservationSummary>(); |
|
} |
|
|
|
reader.Close(); |
|
|
|
var demonstrationSummary = ScriptableObject.CreateInstance<DemonstrationSummary>(); |
|
demonstrationSummary.Initialize(brainParameters, metaData, observationSummaries); |
|
userData = demonstrationSummary.ToString(); |
|
|
|
var texture = (Texture2D) |
|
AssetDatabase.LoadAssetAtPath(k_IconPath, typeof(Texture2D)); |
|
|
|
ctx.AddObjectToAsset(ctx.assetPath, demonstrationSummary, texture); |
|
ctx.SetMainObject(demonstrationSummary); |
|
} |
|
catch |
|
{ |
|
|
|
} |
|
} |
|
} |
|
} |
|
|