// 导出ExportAudioTrack private int ExportAudioTrack(AudioTrack audioTrack, JSONObject trackListArr, JSONObject clipListArr) { JSONObject trackJSON = GenerateBaseTrack(audioTrack, PlaybaleTrackTypeMap["AudioTrack"]); #if UNITY_2019_1_OR_NEWER UnityEditor.SerializedObject serializedObject = new UnityEditor.SerializedObject(audioTrack); UnityEditor.SerializedProperty propertiesserializedObject = serializedObject.FindProperty("m_TrackProperties"); float volume = propertiesserializedObject.FindPropertyRelative("volume").floatValue; float stereoPan = propertiesserializedObject.FindPropertyRelative("stereoPan").floatValue; float spatialBlend = propertiesserializedObject.FindPropertyRelative("spatialBlend").floatValue; trackJSON.AddField("volume", volume); trackJSON.AddField("stereoPan", stereoPan); trackJSON.AddField("spatialBlend", spatialBlend); #else trackJSON.AddField("volume", 1); trackJSON.AddField("stereoPan", 0); trackJSON.AddField("spatialBlend", 0); #endif JSONObject clipsIndexArr = trackJSON.GetField("clips"); IEnumerable <TimelineClip> timelineClipList = audioTrack.GetClips(); int num = 0; foreach (TimelineClip timelineClip in timelineClipList) { JSONObject clipJSON = GenerateBaseTimelineClip(timelineClip, PlaybaleClipTypeMap["Audio"]); JSONObject clipData = new JSONObject(JSONObject.Type.OBJECT); clipJSON.AddField("data", clipData); AudioPlayableAsset asset = (AudioPlayableAsset)timelineClip.asset; if ((UnityEngine.Object)asset.clip != (UnityEngine.Object)null) { WXAudioClip converter = new WXAudioClip(asset.clip, gameObject); string clipPath = AddDependencies(converter); clipData.AddField("clip", clipPath); } else { clipData.AddField("clip", JSONObject.nullJO); } // clipData.AddField("clipCaps", ClipCapsMap.ContainsKey(timelineClip.clipCaps) ? ClipCapsMap[timelineClip.clipCaps] : ClipCapsMap[ClipCaps.None]); // clipData.AddField("duration", (float)asset.duration); // 兼容2017没有loop UnityEditor.SerializedObject assetSerializedObject = new UnityEditor.SerializedObject(asset); bool loop = assetSerializedObject.FindProperty("m_Loop").boolValue; clipData.AddField("loop", loop); #if UNITY_2019_1_OR_NEWER UnityEditor.SerializedProperty clipProperties = assetSerializedObject.FindProperty("m_ClipProperties"); float clipVolume = clipProperties.FindPropertyRelative("volume").floatValue; clipData.AddField("volume", clipVolume); #else clipData.AddField("volume", 1); #endif clipsIndexArr.Add(ExportTimelineClip(clipJSON, clipListArr)); num++; } return(ExportTrack(trackJSON, trackListArr)); }