diff --git a/Assets/02.InformationSave/Editor/CustomEditorBaseEditor.cs b/Assets/02.InformationSave/Editor/CustomEditorBaseEditor.cs new file mode 100644 index 0000000..65224ad --- /dev/null +++ b/Assets/02.InformationSave/Editor/CustomEditorBaseEditor.cs @@ -0,0 +1,27 @@ +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + [CustomEditor(typeof(CustomEditorBase), true)] + public class CustomEditorBaseEditor : UnityEditor.Editor + { + private CustomEditorBase _customEditorBase; + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + serializedObject.Update(); + _customEditorBase = target as CustomEditorBase; + _customEditorBase.Draw(); + //这个函数告诉引擎,相关对象所属于的Prefab已经发生了更改。方便,当我们更改了自定义对象的属性的时候,自动更新到所属的Prefab中 + if (GUI.changed && EditorApplication.isPlaying == false) + { + serializedObject.ApplyModifiedProperties(); + EditorUtility.SetDirty(_customEditorBase); + EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); + } + } + } +} \ No newline at end of file diff --git a/Assets/04.AudioCore/RunTime/GenericPool.cs.meta b/Assets/02.InformationSave/Editor/CustomEditorBaseEditor.cs.meta similarity index 83% rename from Assets/04.AudioCore/RunTime/GenericPool.cs.meta rename to Assets/02.InformationSave/Editor/CustomEditorBaseEditor.cs.meta index 79b55c4..cc331c7 100644 --- a/Assets/04.AudioCore/RunTime/GenericPool.cs.meta +++ b/Assets/02.InformationSave/Editor/CustomEditorBaseEditor.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b3c60c3d4c25c5c428dc3e5835b40ac5 +guid: 2da8df4f2ba04494a90eec6fda524a49 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/02.InformationSave/RunTime/Abstract.meta b/Assets/02.InformationSave/RunTime/Abstract.meta new file mode 100644 index 0000000..5645ab5 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Abstract.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3e0efc3ec4ae1fe458358558357e78fb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Abstract/AbstractInformation.cs b/Assets/02.InformationSave/RunTime/Abstract/AbstractInformation.cs new file mode 100644 index 0000000..d11c450 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Abstract/AbstractInformation.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using Stary.Evo.InformationSave.Data; +using Newtonsoft.Json; +using UnityEditor; +using UnityEngine; +using System.Linq; + +namespace Stary.Evo.InformationSave +{ + public abstract class AbstractInformation : CustomEditorBase where T : InformationBase, new() + { + [HideInInspector] public List _list = new List(); + + /// + /// 配置文件存储路径 + /// + string path = "Assets/02.InformationSave/RunTime/Data/ScriptObjectSaveData.asset"; + + public virtual void Add() + { + _list.Add(new T()); + Save(_list.Count - 1); + } + + public abstract void Save(int index); + public abstract void Switch(int index); + public virtual T GetTransform(string desc) + { + int index = _list.FindIndex(n => n.desc == desc); + if (index != -1) + { + return _list[index]; + } + else + { + Debug.LogError($"{typeof(T)}:不存在该信息:" + desc); + return default(T); + } + } + + public virtual void Delete(int index) + { + _list.RemoveAt(index); + } + + public virtual void Set(string desc) + { + int index = _list.FindIndex(n => n.desc == desc); + if (index != -1) Switch(index); + } + #region Editor + +#if UNITY_EDITOR + //更新 + public void UpdateInformation() + { + String sceneNmae = gameObject.scene.name; + ScriptObjectSave scriptObjectSaveData = AssetDatabase.LoadAssetAtPath(path); + if(scriptObjectSaveData == null) + { + Debug.LogError("ScriptObjectSaveData配置文件丢失"); + return; + } + + if (scriptObjectSaveData.dic.ContainsKey(sceneNmae + gameObject.name)) + { + _list.Clear(); + _list = scriptObjectSaveData.dic[sceneNmae + gameObject.name].OfType().ToList(); + } + else + { + Debug.LogError("ScriptObjectSaveData中未存储场景:"+ sceneNmae + " 中物体:" + gameObject.name + "的数据!!!"); + } + } + + //动态保存 + public bool PlayingSave() + { + //文件保存 + if (Application.isEditor) + { + String sceneNmae = gameObject.scene.name; + // 加载 ScriptObjectSaveData + ScriptObjectSave scriptObjectSaveData = AssetDatabase.LoadAssetAtPath(path); + if(scriptObjectSaveData != null) + { + if(scriptObjectSaveData.dic == null) + { + Debug.LogError("ScriptObjectSaveData的dic为空"); + return false; + } + // 检查是否已经存在相同的键 + if (scriptObjectSaveData.dic.ContainsKey(sceneNmae + gameObject.name)) + { + // 如果存在,选择是否替换原有的 List + if(UnityEditor.EditorUtility.DisplayDialog("提示", "数据集下已有相同名称的物体数据\n是否覆盖更新!!!\n"+ "场景名:"+ sceneNmae + "\n物体名:"+gameObject.name, "确定", "取消")) + { + scriptObjectSaveData.dic[sceneNmae + gameObject.name] = new List(_list); + } + else + { + return false; + } + + } + else + { + // 如果不存在,添加新的键值对 + scriptObjectSaveData.dic.Add(sceneNmae + gameObject.name, new List(_list)); + } + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + } + else + { + Debug.LogError("ScriptObjectSaveData配置文件丢失"); + return false; + } + + return true; + } + + return false; + } + + + //private int guidIndex; + + //private List strings = new List(); + + //绘制 + public override void Draw() + { + + int length = _list.Count; + int deleteIndex = -1; + for (int i = 0; i < length; i++) + { + GUILayout.BeginHorizontal(); + _list[i].desc = UnityEditor.EditorGUILayout.TextField(_list[i].desc); + if (GUILayout.Button("切换")) Switch(i); + if (GUILayout.Button("保存")) + { + Save(i); + if (PlayingSave()) Debug.Log("保存成功!"); + } + + if (GUILayout.Button("上移") && i > 0) + { + T temp = _list[i - 1]; + _list[i - 1] = _list[i]; + _list[i] = temp; + } + + if (GUILayout.Button("下移") && i < _list.Count - 1) + { + T temp = _list[i + 1]; + _list[i + 1] = _list[i]; + _list[i] = temp; + } + + if (GUILayout.Button("删除") && UnityEditor.EditorUtility.DisplayDialog("警告", "你确定要删除吗?", "确定", "取消")) + deleteIndex = i; + GUILayout.EndHorizontal(); + if (i != length - 1) GUILayout.Space(20); + } + + if (deleteIndex != -1) Delete(deleteIndex); + GUILayout.Space(30); + GUILayout.BeginHorizontal(); + if (GUILayout.Button("添加")) + { + Add(); + } + + if (GUILayout.Button("更新") && UnityEditor.EditorUtility.DisplayDialog("提示", "你确定要更新吗?", "确定", "取消")) + { + UpdateInformation(); + GUILayout.BeginHorizontal(); + } + + GUILayout.EndHorizontal(); + } + + +#else + public override void Draw(){} +#endif + } + + #endregion + + [System.Serializable] + public class InformationBase + { + public string desc = "初始"; + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Abstract/AbstractInformation.cs.meta b/Assets/02.InformationSave/RunTime/Abstract/AbstractInformation.cs.meta new file mode 100644 index 0000000..80af3b7 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Abstract/AbstractInformation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f5b94406351c9c4984472ef696d4888 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/AnchoredPosition.cs b/Assets/02.InformationSave/RunTime/AnchoredPosition.cs new file mode 100644 index 0000000..576118c --- /dev/null +++ b/Assets/02.InformationSave/RunTime/AnchoredPosition.cs @@ -0,0 +1,27 @@ +//======================================================= +// 作者:张铮 +// 描述: +//======================================================= +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public sealed class AnchoredPosition : AbstractInformation + { + public override void Save(int index) + { + _list[index].anchoredPosition =GetComponent().anchoredPosition.GetVector2Data() ; + } + + public override void Switch(int index) + { + GetComponent().anchoredPosition = _list[index].anchoredPosition.SetVector2Data(); + } + + [System.Serializable] + public sealed class Information : InformationBase + { + public Vector2Data anchoredPosition; + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/AnchoredPosition.cs.meta b/Assets/02.InformationSave/RunTime/AnchoredPosition.cs.meta new file mode 100644 index 0000000..3fdcc7c --- /dev/null +++ b/Assets/02.InformationSave/RunTime/AnchoredPosition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f5c3a514df208eb4cb4a15721b54f849 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Base.meta b/Assets/02.InformationSave/RunTime/Base.meta new file mode 100644 index 0000000..9461e40 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Base.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d8020e670de32754cb7e83d988b27bdd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Base/CustomEditorBase.cs b/Assets/02.InformationSave/RunTime/Base/CustomEditorBase.cs new file mode 100644 index 0000000..7d2901a --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Base/CustomEditorBase.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public abstract class CustomEditorBase : MonoBehaviour + { + public abstract void Draw(); + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Base/CustomEditorBase.cs.meta b/Assets/02.InformationSave/RunTime/Base/CustomEditorBase.cs.meta new file mode 100644 index 0000000..21d2148 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Base/CustomEditorBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00771a0cc2a1d7a42bb8d06ae6dce935 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/CameraInfo.cs b/Assets/02.InformationSave/RunTime/CameraInfo.cs new file mode 100644 index 0000000..3894cba --- /dev/null +++ b/Assets/02.InformationSave/RunTime/CameraInfo.cs @@ -0,0 +1,39 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public class CameraInfo : AbstractInformation + { + public override void Save(int index) + { + var c = GetComponent(); + var tf = transform; + _list[index].position = tf.position.GetVector3Data(); + _list[index].eulerAngles = tf.eulerAngles.GetVector3Data(); + _list[index].orthographic = c.orthographic; + _list[index].orthographicSize = c.orthographicSize; + _list[index].fieldofView = c.fieldOfView; + } + + public override void Switch(int index) + { + var c = GetComponent(); + var tf = transform; + tf.position = _list[index].position.SetVector3Data(); + tf.eulerAngles = _list[index].eulerAngles.SetVector3Data(); + c.orthographic = _list[index].orthographic; + c.orthographicSize = _list[index].orthographicSize; + c.fieldOfView = _list[index].fieldofView; + } + + [System.Serializable] + public sealed class Information : InformationBase + { + public Vector3Data position; + public Vector3Data eulerAngles; + public bool orthographic; + public float orthographicSize; + public float fieldofView; + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/CameraInfo.cs.meta b/Assets/02.InformationSave/RunTime/CameraInfo.cs.meta new file mode 100644 index 0000000..514146f --- /dev/null +++ b/Assets/02.InformationSave/RunTime/CameraInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3cf38f4aa9f11b54797838ea149b559d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Data.meta b/Assets/02.InformationSave/RunTime/Data.meta new file mode 100644 index 0000000..12f1bea --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Data.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6543baeed3e940268fc41b7eb6fa31a7 +timeCreated: 1735626715 \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Data/InformationSaveScriptObject.cs b/Assets/02.InformationSave/RunTime/Data/InformationSaveScriptObject.cs new file mode 100644 index 0000000..a489ea3 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Data/InformationSaveScriptObject.cs @@ -0,0 +1,25 @@ +using UnityEngine; +/**************************************************** + 文件:ScriptObjectTopicSave.cs + 作者:张铮 + 邮箱: + 日期:2022/3/10 16:21:54 + 功能: +*****************************************************/ +namespace Stary.Evo.InformationSave.Data +{ + [CreateAssetMenu(fileName = "InformationSaveScriptObject", menuName = "Point8/InformationSaveScriptObject")] + public class InformationSaveScriptObject : ScriptableObject + { + public string[] Urls; + // [Button] + // public void SavaJson(){ + // + // UnityWebRequestSystem.SaveJson(topics,"TopicJson"); + // } + } +} + + + + diff --git a/Assets/02.InformationSave/RunTime/Data/InformationSaveScriptObject.cs.meta b/Assets/02.InformationSave/RunTime/Data/InformationSaveScriptObject.cs.meta new file mode 100644 index 0000000..31dbd32 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Data/InformationSaveScriptObject.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8775212800004330b3958e498e4ac71f +timeCreated: 1735626740 \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Data/ScriptObjectSave.cs b/Assets/02.InformationSave/RunTime/Data/ScriptObjectSave.cs new file mode 100644 index 0000000..a633d6c --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Data/ScriptObjectSave.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Stary.Evo.InformationSave; +using UnityEditor; +using UnityEngine; +using Sirenix.OdinInspector; + +namespace Stary.Evo.InformationSave +{ + [CreateAssetMenu()] + public class ScriptObjectSave : SerializedScriptableObject + { + public Dictionary> dic = new Dictionary>(); + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Data/ScriptObjectSave.cs.meta b/Assets/02.InformationSave/RunTime/Data/ScriptObjectSave.cs.meta new file mode 100644 index 0000000..5c75a84 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Data/ScriptObjectSave.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a08c59ee0e6844441825e5b5427d1e4c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Data/ScriptObjectSaveData.asset b/Assets/02.InformationSave/RunTime/Data/ScriptObjectSaveData.asset new file mode 100644 index 0000000..bf306f0 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Data/ScriptObjectSaveData.asset @@ -0,0 +1,43 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a08c59ee0e6844441825e5b5427d1e4c, type: 3} + m_Name: ScriptObjectSaveData + m_EditorClassIdentifier: + serializationData: + SerializedFormat: 2 + SerializedBytes: + ReferencedUnityObjects: [] + SerializedBytesString: + Prefab: {fileID: 0} + PrefabModificationsReferencedUnityObjects: [] + PrefabModifications: [] + SerializationNodes: + - Name: dic + Entry: 7 + Data: 0|System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.List`1[[Stary.Evo.InformationSave.InformationBase, + Assembly-CSharp]], mscorlib]], mscorlib + - Name: comparer + Entry: 7 + Data: 1|System.Collections.Generic.GenericEqualityComparer`1[[System.String, + mscorlib]], mscorlib + - Name: + Entry: 8 + Data: + - Name: + Entry: 12 + Data: 0 + - Name: + Entry: 13 + Data: + - Name: + Entry: 8 + Data: diff --git a/Assets/02.InformationSave/RunTime/Data/ScriptObjectSaveData.asset.meta b/Assets/02.InformationSave/RunTime/Data/ScriptObjectSaveData.asset.meta new file mode 100644 index 0000000..87cf931 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Data/ScriptObjectSaveData.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8e2aa5a2cf392c145a1055e82ed08b6f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/EulerAngles.cs b/Assets/02.InformationSave/RunTime/EulerAngles.cs new file mode 100644 index 0000000..7e7280d --- /dev/null +++ b/Assets/02.InformationSave/RunTime/EulerAngles.cs @@ -0,0 +1,23 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public sealed class EulerAngles : AbstractInformation + { + public override void Save(int index) + { + _list[index].eulerAngles =transform.eulerAngles.GetVector3Data(); + } + + public override void Switch(int index) + { + transform.eulerAngles = _list[index].eulerAngles.SetVector3Data(); + } + + [System.Serializable] + public sealed class Information : InformationBase + { + public Vector3Data eulerAngles; + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/EulerAngles.cs.meta b/Assets/02.InformationSave/RunTime/EulerAngles.cs.meta new file mode 100644 index 0000000..e8d3819 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/EulerAngles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cf6220df9bf1ce147bfe973d851f167f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension.meta b/Assets/02.InformationSave/RunTime/Extension.meta new file mode 100644 index 0000000..d2aec37 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fc7186a56102e2f4d803fb53e2dcad09 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension/AnchoredPositionExtension.cs b/Assets/02.InformationSave/RunTime/Extension/AnchoredPositionExtension.cs new file mode 100644 index 0000000..cbc2feb --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/AnchoredPositionExtension.cs @@ -0,0 +1,41 @@ +//======================================================= +// 作者:王则昆 +// 描述: +//======================================================= +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public static class AnchoredPositionExtension + { + public static AnchoredPosition.Information GetAnchoredPositionInformation(this RectTransform tf, string desc) + { + return tf.GetComponent()._list.Find(n => n.desc == desc); + } + + public static Vector3 GetAnchoredPosition(this RectTransform tf, string desc) + { + return GetAnchoredPositionInformation(tf, desc).anchoredPosition.SetVector2Data(); + } + + public static void SetAnchoredPosition(this RectTransform tf, string desc) + { + tf.GetComponent().Set(desc); + } + + public static AnchoredPosition.Information GetAnchoredPositionInformation(this Transform tf, string desc) + { + return tf.GetComponent()._list.Find(n => n.desc == desc); + } + + public static Vector3 GetAnchoredPosition(this Transform tf, string desc) + { + return GetAnchoredPositionInformation(tf, desc).anchoredPosition.SetVector2Data(); + } + + public static void SetAnchoredPosition(this Transform tf, string desc) + { + tf.GetComponent().Set(desc); + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Extension/AnchoredPositionExtension.cs.meta b/Assets/02.InformationSave/RunTime/Extension/AnchoredPositionExtension.cs.meta new file mode 100644 index 0000000..24aefef --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/AnchoredPositionExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ccf4bfdd8fa15e4bb9f960a8fd8043e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension/CameraInfoExtension.cs b/Assets/02.InformationSave/RunTime/Extension/CameraInfoExtension.cs new file mode 100644 index 0000000..734db4d --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/CameraInfoExtension.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public static class CameraInfoExtension + { + public static CameraInfo.Information GetCameraInformation(this Transform tf, string desc) + { + return tf.GetComponent()._list.Find(n => n.desc == desc); + } + + public static void SetCameraInfo(this Transform tf, string desc) + { + tf.GetComponent().Set(desc); + } + + public static CameraInfo.Information GetCameraInformation(this Camera camera, string desc) + { + return camera.GetComponent()._list.Find(n => n.desc == desc); + } + + public static void SetCameraInfo(this Camera camera, string desc) + { + camera.GetComponent().Set(desc); + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Extension/CameraInfoExtension.cs.meta b/Assets/02.InformationSave/RunTime/Extension/CameraInfoExtension.cs.meta new file mode 100644 index 0000000..b079a11 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/CameraInfoExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 181681708c62fd746bad97c7c2466778 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension/EulerAnglesExtension.cs b/Assets/02.InformationSave/RunTime/Extension/EulerAnglesExtension.cs new file mode 100644 index 0000000..1e2519c --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/EulerAnglesExtension.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public static class EulerAnglesExtension + { + public static EulerAngles.Information GetEulerAnglesInformation(this Transform tf, string desc) + { + return tf.GetComponent()._list.Find(n => n.desc == desc); + } + + public static Vector3 GetEulerAngles(this Transform tf, string desc) + { + return GetEulerAnglesInformation(tf, desc).eulerAngles.SetVector3Data(); + } + + public static void SetEulerAngles(this Transform tf, string desc) + { + tf.GetComponent().Set(desc); + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Extension/EulerAnglesExtension.cs.meta b/Assets/02.InformationSave/RunTime/Extension/EulerAnglesExtension.cs.meta new file mode 100644 index 0000000..1e66a22 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/EulerAnglesExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44d0cc77fd362de4a9a3e49083ab4083 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension/JBoxColliderExtension.cs b/Assets/02.InformationSave/RunTime/Extension/JBoxColliderExtension.cs new file mode 100644 index 0000000..ddc9d28 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/JBoxColliderExtension.cs @@ -0,0 +1,17 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public static class JBoxColliderExtension + { + public static JBoxCollider.Information GetBoxColliderInformation(this Transform tf, string desc) + { + return tf.GetComponent()._list.Find(n => n.desc == desc); + } + + public static void SetBoxCollider(this Transform tf, string desc) + { + tf.GetComponent().Set(desc); + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Extension/JBoxColliderExtension.cs.meta b/Assets/02.InformationSave/RunTime/Extension/JBoxColliderExtension.cs.meta new file mode 100644 index 0000000..efe1438 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/JBoxColliderExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 06c219a2579145e41bb8abe74f529ca1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension/LocalCameraInfoExtension.cs b/Assets/02.InformationSave/RunTime/Extension/LocalCameraInfoExtension.cs new file mode 100644 index 0000000..4f1a899 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/LocalCameraInfoExtension.cs @@ -0,0 +1,27 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public static class LocalCameraInfoExtension + { + public static LocalCameraInfo.Information GetLocalCameraInformation(this Transform tf, string desc) + { + return tf.GetComponent()._list.Find(n => n.desc == desc); + } + + public static void SetLocalCameraInfo(this Transform tf, string desc) + { + tf.GetComponent().Set(desc); + } + + public static LocalCameraInfo.Information GetLocalCameraInformation(this Camera camera, string desc) + { + return camera.GetComponent()._list.Find(n => n.desc == desc); + } + + public static void SetLocalCameraInfo(this Camera camera, string desc) + { + camera.GetComponent().Set(desc); + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Extension/LocalCameraInfoExtension.cs.meta b/Assets/02.InformationSave/RunTime/Extension/LocalCameraInfoExtension.cs.meta new file mode 100644 index 0000000..e8b3618 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/LocalCameraInfoExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c1834ac1eb7bea34eaf1233d3fbe8b98 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension/LocalEulerAnglesExtension.cs b/Assets/02.InformationSave/RunTime/Extension/LocalEulerAnglesExtension.cs new file mode 100644 index 0000000..383e0ba --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/LocalEulerAnglesExtension.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public static class LocalEulerAnglesExtension + { + public static LocalEulerAngles.Information GetLocalEulerAnglesInformation(this Transform tf, string desc) + { + return tf.GetComponent()._list.Find(n => n.desc == desc); + } + + public static Vector3 GetLocalEulerAngles(this Transform tf, string desc) + { + return GetLocalEulerAnglesInformation(tf, desc).localEulerAngles.SetVector3Data(); + } + + public static void SetLocalEulerAngles(this Transform tf, string desc) + { + tf.GetComponent().Set(desc); + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Extension/LocalEulerAnglesExtension.cs.meta b/Assets/02.InformationSave/RunTime/Extension/LocalEulerAnglesExtension.cs.meta new file mode 100644 index 0000000..69e86aa --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/LocalEulerAnglesExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 557f7719d29961f489da4c917f107ed6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension/LocalPositionEulerAnglesExtension.cs b/Assets/02.InformationSave/RunTime/Extension/LocalPositionEulerAnglesExtension.cs new file mode 100644 index 0000000..41e150f --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/LocalPositionEulerAnglesExtension.cs @@ -0,0 +1,18 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public static class LocalPositionEulerAnglesExtension + { + public static LocalPositionEulerAngles.Information GetLocalPositionEulerAnglesInformation(this Transform tf, + string desc) + { + return tf.GetComponent()._list.Find(n => n.desc == desc); + } + + public static void SetLocalPositionEulerAngles(this Transform tf, string desc) + { + tf.GetComponent().Set(desc); + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Extension/LocalPositionEulerAnglesExtension.cs.meta b/Assets/02.InformationSave/RunTime/Extension/LocalPositionEulerAnglesExtension.cs.meta new file mode 100644 index 0000000..9509428 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/LocalPositionEulerAnglesExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f5fd207a730ab2459db6ab5cb61ac92 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension/LocalPositionExtension.cs b/Assets/02.InformationSave/RunTime/Extension/LocalPositionExtension.cs new file mode 100644 index 0000000..308f70d --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/LocalPositionExtension.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public static class LocalPositionExtension + { + public static LocalPosition.Information GetLocalPositionInformation(this Transform tf, string desc) + { + return tf.GetComponent()._list.Find(n => n.desc == desc); + } + + public static Vector3 GetLocalPosition(this Transform tf, string desc) + { + return GetLocalPositionInformation(tf, desc).localPosition.SetVector3Data(); + } + + public static void SetLocalPosition(this Transform tf, string desc) + { + tf.GetComponent().Set(desc); + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Extension/LocalPositionExtension.cs.meta b/Assets/02.InformationSave/RunTime/Extension/LocalPositionExtension.cs.meta new file mode 100644 index 0000000..7930b93 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/LocalPositionExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac0cb760733c70641b6b5b696c137dc9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension/LocalTransformInfoExtension.cs b/Assets/02.InformationSave/RunTime/Extension/LocalTransformInfoExtension.cs new file mode 100644 index 0000000..3694f9c --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/LocalTransformInfoExtension.cs @@ -0,0 +1,17 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public static class LocalTransformInfoExtension + { + public static LocalTransformInfo.Information GetLocalTransformInformation(this Transform tf, string desc) + { + return tf.GetComponent()._list.Find(n => n.desc == desc); + } + + public static void SetLocalTransformInfo(this Transform tf, string desc) + { + tf.GetComponent().Set(desc); + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Extension/LocalTransformInfoExtension.cs.meta b/Assets/02.InformationSave/RunTime/Extension/LocalTransformInfoExtension.cs.meta new file mode 100644 index 0000000..cc7d56a --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/LocalTransformInfoExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 26f9c07fe30c400479eea478f2e6557f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension/PositionEulerAnglesExtension.cs b/Assets/02.InformationSave/RunTime/Extension/PositionEulerAnglesExtension.cs new file mode 100644 index 0000000..a483e49 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/PositionEulerAnglesExtension.cs @@ -0,0 +1,17 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public static class PositionEulerAnglesExtension + { + public static PositionEulerAngles.Information GetPositionEulerAnglesInformation(this Transform tf, string desc) + { + return tf.GetComponent()._list.Find(n => n.desc == desc); + } + + public static void SetPositionEulerAngles(this Transform tf, string desc) + { + tf.GetComponent().Set(desc); + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Extension/PositionEulerAnglesExtension.cs.meta b/Assets/02.InformationSave/RunTime/Extension/PositionEulerAnglesExtension.cs.meta new file mode 100644 index 0000000..704cbb9 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/PositionEulerAnglesExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 158344c49f575164a825cf6b74670213 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension/PositionExtension.cs b/Assets/02.InformationSave/RunTime/Extension/PositionExtension.cs new file mode 100644 index 0000000..5434d56 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/PositionExtension.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public static class PositionExtension + { + public static Position.Information GetPositionInformation(this Transform tf, string desc) + { + return tf.GetComponent()._list.Find(n => n.desc == desc); + } + + public static Vector3 GetPosition(this Transform tf, string desc) + { + return GetPositionInformation(tf, desc).position.SetVector3Data(); + } + + public static void SetPosition(this Transform tf, string desc) + { + tf.GetComponent().Set(desc); + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Extension/PositionExtension.cs.meta b/Assets/02.InformationSave/RunTime/Extension/PositionExtension.cs.meta new file mode 100644 index 0000000..6c4dcd2 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/PositionExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6c5840afa5ec12245982ccbc14e3da68 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension/RectTransformInfoExtension.cs b/Assets/02.InformationSave/RunTime/Extension/RectTransformInfoExtension.cs new file mode 100644 index 0000000..5a3ced8 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/RectTransformInfoExtension.cs @@ -0,0 +1,18 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public static class RectTransformInfoExtension + { + public static RectTransformInfo.Information GetRectTransformInformation(this RectTransform rectTransform, + string desc) + { + return rectTransform.GetComponent()._list.Find(n => n.desc == desc); + } + + public static void SetRectTransformInfo(this RectTransform rectTransform, string desc) + { + rectTransform.GetComponent().Set(desc); + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Extension/RectTransformInfoExtension.cs.meta b/Assets/02.InformationSave/RunTime/Extension/RectTransformInfoExtension.cs.meta new file mode 100644 index 0000000..f0419d5 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/RectTransformInfoExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 513bbc7c53696644b84719b8dfe9d099 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension/ScaleExtension.cs b/Assets/02.InformationSave/RunTime/Extension/ScaleExtension.cs new file mode 100644 index 0000000..90312d5 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/ScaleExtension.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public static class ScaleExtension + { + public static Scale.Information GetScaleInformation(this Transform tf, string desc) + { + return tf.GetComponent()._list.Find(n => n.desc == desc); + } + + public static Vector3 GetScale(this Transform tf, string desc) + { + return GetScaleInformation(tf, desc).scale.SetVector3Data(); + } + + public static void SetScale(this Transform tf, string desc) + { + tf.GetComponent().Set(desc); + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Extension/ScaleExtension.cs.meta b/Assets/02.InformationSave/RunTime/Extension/ScaleExtension.cs.meta new file mode 100644 index 0000000..63de261 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/ScaleExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebbe17c6f3f553745b5172d3f99fa4f6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension/TrailRendererExtension.cs b/Assets/02.InformationSave/RunTime/Extension/TrailRendererExtension.cs new file mode 100644 index 0000000..c3a5976 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/TrailRendererExtension.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public static class TrailRendererExtension + { + public static TrailRendererInfo.Information GetTrailRendererInformation(this Transform tf, string desc) + { + return tf.GetComponent()._list.Find(n => n.desc == desc); + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Extension/TrailRendererExtension.cs.meta b/Assets/02.InformationSave/RunTime/Extension/TrailRendererExtension.cs.meta new file mode 100644 index 0000000..b1e726b --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/TrailRendererExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2409502855668eb4fa19a26c4675df0a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension/TransformInfoExtension.cs b/Assets/02.InformationSave/RunTime/Extension/TransformInfoExtension.cs new file mode 100644 index 0000000..d2422a0 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/TransformInfoExtension.cs @@ -0,0 +1,17 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public static class TransformInfoExtension + { + public static TransformInfo.Information GetTransformInformation(this Transform tf, string desc) + { + return tf.GetComponent()._list.Find(n => n.desc == desc); + } + + public static void SetTransformInfo(this Transform tf, string desc) + { + tf.GetComponent().Set(desc); + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Extension/TransformInfoExtension.cs.meta b/Assets/02.InformationSave/RunTime/Extension/TransformInfoExtension.cs.meta new file mode 100644 index 0000000..cc3f53f --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/TransformInfoExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 276444401c6e3554497746391a9ce0e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Extension/VectorExtension.cs b/Assets/02.InformationSave/RunTime/Extension/VectorExtension.cs new file mode 100644 index 0000000..6664e48 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/VectorExtension.cs @@ -0,0 +1,66 @@ +using System; +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public static class VectorExtension { + + + public static Vector3Data GetVector3Data(this Vector3 vector) + { + return new Vector3Data(vector); + } + + public static Vector3 SetVector3Data(this Vector3Data vector3Data) + { + return new Vector3(vector3Data.x, vector3Data.y, vector3Data.z); + } + + public static Vector2Data GetVector2Data( this Vector2 vector) + { + return new Vector2Data(vector); + } + + public static Vector2 SetVector2Data(this Vector2Data vector3Data) + { + return new Vector2(vector3Data.x, vector3Data.y); + } + + } + [Serializable] + public class Vector3Data + { + public float x; + public float y; + public float z; + + public Vector3Data() + { + + } + public Vector3Data(Vector3 vector) + { + x = vector.x; + y = vector.y; + z = vector.z; + } + public Vector3Data(float x, float y, float z) + { + this.x = x; + this.y = y; + this.z = z; + } + } + [Serializable] + public class Vector2Data + { + public float x; + public float y; + + public Vector2Data(Vector2 vector) + { + x = vector.x; + y = vector.y; + } + } + } diff --git a/Assets/02.InformationSave/RunTime/Extension/VectorExtension.cs.meta b/Assets/02.InformationSave/RunTime/Extension/VectorExtension.cs.meta new file mode 100644 index 0000000..ba2dec4 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Extension/VectorExtension.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a7ee1cfff85b47cb864e576a0253a648 +timeCreated: 1735197883 \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/JBoxCollider.cs b/Assets/02.InformationSave/RunTime/JBoxCollider.cs new file mode 100644 index 0000000..4e280a2 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/JBoxCollider.cs @@ -0,0 +1,28 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public class JBoxCollider : AbstractInformation + { + public override void Save(int index) + { + BoxCollider boxCollider = transform.GetComponent(); + _list[index].center =boxCollider.center.GetVector3Data(); + _list[index].size = boxCollider.size.GetVector3Data(); + } + + public override void Switch(int index) + { + BoxCollider boxCollider = transform.GetComponent(); + boxCollider.center =_list[index].center.SetVector3Data(); + boxCollider.size =_list[index].size.SetVector3Data(); + } + + [System.Serializable] + public sealed class Information : InformationBase + { + public Vector3Data center; + public Vector3Data size; + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/JBoxCollider.cs.meta b/Assets/02.InformationSave/RunTime/JBoxCollider.cs.meta new file mode 100644 index 0000000..02de51a --- /dev/null +++ b/Assets/02.InformationSave/RunTime/JBoxCollider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a9767f825c5c2f74e866f2ec5a79ec23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/LocalCameraInfo.cs b/Assets/02.InformationSave/RunTime/LocalCameraInfo.cs new file mode 100644 index 0000000..5646420 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/LocalCameraInfo.cs @@ -0,0 +1,39 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public class LocalCameraInfo : AbstractInformation + { + public override void Save(int index) + { + var c = GetComponent(); + var tf = transform; + _list[index].localPosition =tf.localPosition.GetVector3Data(); + _list[index].localEulerAngles = tf.localEulerAngles.GetVector3Data(); + _list[index].orthographic = c.orthographic; + _list[index].orthographicSize = c.orthographicSize; + _list[index].fieldofView = c.fieldOfView; + } + + public override void Switch(int index) + { + var c = GetComponent(); + var tf = transform; + tf.localPosition = _list[index].localPosition.SetVector3Data(); + tf.localEulerAngles = _list[index].localEulerAngles.SetVector3Data(); + c.orthographic = _list[index].orthographic; + c.orthographicSize = _list[index].orthographicSize; + c.fieldOfView = _list[index].fieldofView; + } + + [System.Serializable] + public sealed class Information : InformationBase + { + public Vector3Data localPosition; + public Vector3Data localEulerAngles; + public bool orthographic; + public float orthographicSize; + public float fieldofView; + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/LocalCameraInfo.cs.meta b/Assets/02.InformationSave/RunTime/LocalCameraInfo.cs.meta new file mode 100644 index 0000000..2eb8c76 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/LocalCameraInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38b8221364b888944b7aee29f7c57061 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/LocalEulerAngles.cs b/Assets/02.InformationSave/RunTime/LocalEulerAngles.cs new file mode 100644 index 0000000..c8363df --- /dev/null +++ b/Assets/02.InformationSave/RunTime/LocalEulerAngles.cs @@ -0,0 +1,23 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public sealed class LocalEulerAngles : AbstractInformation + { + public override void Save(int index) + { + _list[index].localEulerAngles =transform.localEulerAngles.GetVector3Data(); + } + + public override void Switch(int index) + { + transform.localEulerAngles =_list[index].localEulerAngles.SetVector3Data(); + } + + [System.Serializable] + public sealed class Information : InformationBase + { + public Vector3Data localEulerAngles; + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/LocalEulerAngles.cs.meta b/Assets/02.InformationSave/RunTime/LocalEulerAngles.cs.meta new file mode 100644 index 0000000..2acdc84 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/LocalEulerAngles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 280718ca1ccb11848abb4eaa2820e354 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/LocalPosition.cs b/Assets/02.InformationSave/RunTime/LocalPosition.cs new file mode 100644 index 0000000..84b974d --- /dev/null +++ b/Assets/02.InformationSave/RunTime/LocalPosition.cs @@ -0,0 +1,23 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public sealed class LocalPosition : AbstractInformation + { + public override void Save(int index) + { + _list[index].localPosition = transform.localPosition.GetVector3Data(); + } + + public override void Switch(int index) + { + transform.localPosition = _list[index].localPosition.SetVector3Data(); + } + + [System.Serializable] + public sealed class Information : InformationBase + { + public Vector3Data localPosition; + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/LocalPosition.cs.meta b/Assets/02.InformationSave/RunTime/LocalPosition.cs.meta new file mode 100644 index 0000000..4dc9a50 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/LocalPosition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93ebac8518e1ce64fa0c16bebea343e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/LocalPositionEulerAngles.cs b/Assets/02.InformationSave/RunTime/LocalPositionEulerAngles.cs new file mode 100644 index 0000000..6423705 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/LocalPositionEulerAngles.cs @@ -0,0 +1,28 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public sealed class LocalPositionEulerAngles : AbstractInformation + { + public override void Save(int index) + { + var tf = transform; + _list[index].localPosition =tf.localPosition.GetVector3Data(); + _list[index].localEulerAngles = tf.localEulerAngles.GetVector3Data(); + } + + public override void Switch(int index) + { + var tf = transform; + tf.localPosition = _list[index].localPosition.SetVector3Data(); + tf.localEulerAngles = _list[index].localEulerAngles.SetVector3Data(); + } + + [System.Serializable] + public sealed class Information : InformationBase + { + public Vector3Data localPosition; + public Vector3Data localEulerAngles; + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/LocalPositionEulerAngles.cs.meta b/Assets/02.InformationSave/RunTime/LocalPositionEulerAngles.cs.meta new file mode 100644 index 0000000..484f02a --- /dev/null +++ b/Assets/02.InformationSave/RunTime/LocalPositionEulerAngles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e437187af71967c4ba3a675d6cd528ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/LocalTransformInfo.cs b/Assets/02.InformationSave/RunTime/LocalTransformInfo.cs new file mode 100644 index 0000000..e54ab1d --- /dev/null +++ b/Assets/02.InformationSave/RunTime/LocalTransformInfo.cs @@ -0,0 +1,31 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public class LocalTransformInfo : AbstractInformation + { + public override void Save(int index) + { + var tf = transform; + _list[index].localPosition = tf.localPosition.GetVector3Data(); + _list[index].localEulerAngles =tf.localEulerAngles.GetVector3Data(); + _list[index].localScale = tf.localScale.GetVector3Data(); + } + + public override void Switch(int index) + { + var tf = transform; + tf.localPosition = _list[index].localPosition.SetVector3Data(); + tf.localEulerAngles = _list[index].localEulerAngles.SetVector3Data(); + tf.localScale = _list[index].localScale.SetVector3Data(); + } + + [System.Serializable] + public sealed class Information : InformationBase + { + public Vector3Data localPosition; + public Vector3Data localEulerAngles; + public Vector3Data localScale; + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/LocalTransformInfo.cs.meta b/Assets/02.InformationSave/RunTime/LocalTransformInfo.cs.meta new file mode 100644 index 0000000..e2fa35c --- /dev/null +++ b/Assets/02.InformationSave/RunTime/LocalTransformInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 550b2f30af9635045803b99a475a03ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Position.cs b/Assets/02.InformationSave/RunTime/Position.cs new file mode 100644 index 0000000..e3fae44 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Position.cs @@ -0,0 +1,23 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public sealed class Position : AbstractInformation + { + public override void Save(int index) + { + _list[index].position = transform.position.GetVector3Data(); + } + + public override void Switch(int index) + { + transform.position = _list[index].position.SetVector3Data(); + } + + [System.Serializable] + public sealed class Information : InformationBase + { + public Vector3Data position; + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Position.cs.meta b/Assets/02.InformationSave/RunTime/Position.cs.meta new file mode 100644 index 0000000..72be8ec --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Position.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9609cbb4c8813d74689777d78711e4d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/PositionEulerAngles.cs b/Assets/02.InformationSave/RunTime/PositionEulerAngles.cs new file mode 100644 index 0000000..945ded0 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/PositionEulerAngles.cs @@ -0,0 +1,28 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public sealed class PositionEulerAngles : AbstractInformation + { + public override void Save(int index) + { + var tf = transform; + _list[index].position =tf.position.GetVector3Data(); + _list[index].eulerAngles = tf.eulerAngles.GetVector3Data(); + } + + public override void Switch(int index) + { + var tf = transform; + tf.position = _list[index].position.SetVector3Data(); + tf.eulerAngles = _list[index].eulerAngles.SetVector3Data(); + } + + [System.Serializable] + public sealed class Information : InformationBase + { + public Vector3Data position; + public Vector3Data eulerAngles; + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/PositionEulerAngles.cs.meta b/Assets/02.InformationSave/RunTime/PositionEulerAngles.cs.meta new file mode 100644 index 0000000..a8d18fe --- /dev/null +++ b/Assets/02.InformationSave/RunTime/PositionEulerAngles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee618e2966ba0e94d83de5732a8e0b7f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/RectTransformInfo.cs b/Assets/02.InformationSave/RunTime/RectTransformInfo.cs new file mode 100644 index 0000000..1cfa0c8 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/RectTransformInfo.cs @@ -0,0 +1,47 @@ + +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public class RectTransformInfo : AbstractInformation + { + public override void Save(int index) + { + var rectTransform = GetComponent(); + _list[index].anchorPosition = rectTransform.anchoredPosition3D.GetVector3Data(); + _list[index].sizeDelta = rectTransform.sizeDelta.GetVector2Data(); + _list[index].eulerAngles = rectTransform.eulerAngles.GetVector3Data(); + _list[index].localScale = rectTransform.localScale.GetVector3Data(); + + _list[index].anchorMin = rectTransform.anchorMin.GetVector2Data(); + _list[index].anchorMax = rectTransform.anchorMax.GetVector2Data(); + _list[index].pivot = rectTransform.pivot.GetVector2Data(); + } + + public override void Switch(int index) + { + var rectTransform = GetComponent(); + rectTransform.anchoredPosition3D =_list[index].anchorPosition.SetVector3Data(); + rectTransform.sizeDelta = _list[index].sizeDelta.SetVector2Data(); + rectTransform.eulerAngles =_list[index].eulerAngles.SetVector3Data(); + rectTransform.localScale = _list[index].localScale.SetVector3Data(); + + rectTransform.anchorMin =_list[index].anchorMin.SetVector2Data(); + rectTransform.anchorMax =_list[index].anchorMax.SetVector2Data(); + rectTransform.pivot =_list[index].pivot.SetVector2Data(); + } + + [System.Serializable] + public sealed class Information : InformationBase + { + public Vector3Data anchorPosition; + public Vector2Data sizeDelta; + public Vector3Data eulerAngles; + public Vector3Data localScale; + + public Vector2Data anchorMin; + public Vector2Data anchorMax; + public Vector2Data pivot; + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/RectTransformInfo.cs.meta b/Assets/02.InformationSave/RunTime/RectTransformInfo.cs.meta new file mode 100644 index 0000000..78a2078 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/RectTransformInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c996c2dea2256ab4e8f690091315ef57 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/Scale.cs b/Assets/02.InformationSave/RunTime/Scale.cs new file mode 100644 index 0000000..993763e --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Scale.cs @@ -0,0 +1,23 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public sealed class Scale : AbstractInformation + { + public override void Save(int index) + { + _list[index].scale = transform.localScale.GetVector3Data(); + } + + public override void Switch(int index) + { + transform.localScale =_list[index].scale.SetVector3Data(); + } + + [System.Serializable] + public sealed class Information : InformationBase + { + public Vector3Data scale; + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/Scale.cs.meta b/Assets/02.InformationSave/RunTime/Scale.cs.meta new file mode 100644 index 0000000..5d02071 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/Scale.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bdf673576bf52084e8f9762011826aaa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/TrailRendererInfo.cs b/Assets/02.InformationSave/RunTime/TrailRendererInfo.cs new file mode 100644 index 0000000..6f3511b --- /dev/null +++ b/Assets/02.InformationSave/RunTime/TrailRendererInfo.cs @@ -0,0 +1,25 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public class TrailRendererInfo : AbstractInformation + { + public override void Save(int index) + { + TrailRenderer tr = transform.GetComponent(); + _list[index].time = tr.time; + } + + public override void Switch(int index) + { + TrailRenderer tr = transform.GetComponent(); + tr.time = _list[index].time; + } + + [System.Serializable] + public sealed class Information : InformationBase + { + public float time; + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/TrailRendererInfo.cs.meta b/Assets/02.InformationSave/RunTime/TrailRendererInfo.cs.meta new file mode 100644 index 0000000..c4d1c9d --- /dev/null +++ b/Assets/02.InformationSave/RunTime/TrailRendererInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2fbebc203db208a42bc3c5c279992067 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.InformationSave/RunTime/TransformInfo.cs b/Assets/02.InformationSave/RunTime/TransformInfo.cs new file mode 100644 index 0000000..bac9e55 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/TransformInfo.cs @@ -0,0 +1,31 @@ +using UnityEngine; + +namespace Stary.Evo.InformationSave +{ + public class TransformInfo : AbstractInformation + { + public override void Save(int index) + { + var tf = transform; + _list[index].position =tf.position.GetVector3Data(); + _list[index].eulerAngles = tf.eulerAngles.GetVector3Data(); + _list[index].localScale = tf.localScale.GetVector3Data(); + } + + public override void Switch(int index) + { + var tf = transform; + tf.position = _list[index].position.SetVector3Data(); + tf.eulerAngles =_list[index].eulerAngles.SetVector3Data(); + tf.localScale = _list[index].localScale.SetVector3Data(); + } + + [System.Serializable] + public sealed class Information : InformationBase + { + public Vector3Data position; + public Vector3Data eulerAngles; + public Vector3Data localScale; + } + } +} \ No newline at end of file diff --git a/Assets/02.InformationSave/RunTime/TransformInfo.cs.meta b/Assets/02.InformationSave/RunTime/TransformInfo.cs.meta new file mode 100644 index 0000000..d549f78 --- /dev/null +++ b/Assets/02.InformationSave/RunTime/TransformInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a0f5c0e9005eca40a2e8ec448b3d8de +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04.AudioCore/RunTime/AudioCoreManager.cs b/Assets/04.AudioCore/RunTime/AudioCoreManager.cs index eea588a..816d7ee 100644 --- a/Assets/04.AudioCore/RunTime/AudioCoreManager.cs +++ b/Assets/04.AudioCore/RunTime/AudioCoreManager.cs @@ -1,90 +1,93 @@ using UnityEngine; using System.Collections.Generic; -public static class AudioCoreManager +namespace AudioCore { - private static AudioSourcePool audioSourcePool; - private static VoicePlayer Voice; - private static SFXPlayer SFX; - private static MusicPlayer Music; - - static AudioCoreManager() + public static class AudioCoreManager { - audioSourcePool = new AudioSourcePool(); - // ʼ - Voice = new VoicePlayer(audioSourcePool); - SFX = new SFXPlayer(audioSourcePool); - Music = new MusicPlayer(audioSourcePool); + private static AudioSourcePool audioSourcePool; + private static VoicePlayer Voice; + private static SFXPlayer SFX; + private static MusicPlayer Music; + + static AudioCoreManager() + { + audioSourcePool = new AudioSourcePool(); + // ʼ + Voice = new VoicePlayer(audioSourcePool); + SFX = new SFXPlayer(audioSourcePool); + Music = new MusicPlayer(audioSourcePool); + } + + #region + + /// + /// + /// + /// {[clip:Ƶ], [volume:], + /// [onComplete:صΪ], [delayOnCompleteTime:ӳٻصִеʱ]} + public static void PlayVoice(AudioData audioData) + { + Voice.Play(audioData); + } + + /// + /// ֹͣǰ + /// + public static void StopVoice() + { + AudioData audioData = new AudioData(); + Voice.Stop(audioData); + } + + #endregion + + #region Ч + + /// + /// Ч + /// + /// {[clip:Ƶ], [volume:], + /// [onComplete:صΪ], [delayOnCompleteTime:ӳٻصִеʱ]} + public static void PlaySFX(AudioData audioData) + { + SFX.Play(audioData); + } + + /// + /// ֹͣЧ + /// + public static void StopAllSFX() + { + AudioData audioData = new AudioData(); + SFX.Stop(audioData); + } + + #endregion + + #region + + /// + /// ű + /// + /// {[clip:Ƶ], [volume:], [fadeDuration:Ȼʱ]} + public static void PlayMusic(AudioData audioData) + { + Music.Play(audioData); + } + + /// + /// ֹͣű + /// + /// Ȼʱ + public static void StopMusic(float fadeDuration = 1f) + { + AudioData audioData = new AudioData(); + audioData.fadeDuration = fadeDuration; + Music.Stop(audioData); + } + + #endregion + } - - #region - - /// - /// - /// - /// {[clip:Ƶ], [volume:], - /// [onComplete:صΪ], [delayOnCompleteTime:ӳٻصִеʱ]} - public static void PlayVoice(AudioData audioData) - { - Voice.Play(audioData); - } - - /// - /// ֹͣǰ - /// - public static void StopVoice() - { - AudioData audioData = new AudioData(); - Voice.Stop(audioData); - } - - #endregion - - #region Ч - - /// - /// Ч - /// - /// {[clip:Ƶ], [volume:], - /// [onComplete:صΪ], [delayOnCompleteTime:ӳٻصִеʱ]} - public static void PlaySFX(AudioData audioData) - { - SFX.Play(audioData); - } - - /// - /// ֹͣЧ - /// - public static void StopAllSFX() - { - AudioData audioData = new AudioData(); - SFX.Stop(audioData); - } - - #endregion - - #region - - /// - /// ű - /// - /// {[clip:Ƶ], [volume:], [fadeDuration:Ȼʱ]} - public static void PlayMusic(AudioData audioData) - { - Music.Play(audioData); - } - - /// - /// ֹͣű - /// - /// Ȼʱ - public static void StopMusic(float fadeDuration = 1f) - { - AudioData audioData = new AudioData(); - audioData.fadeDuration = fadeDuration; - Music.Stop(audioData); - } - - #endregion - } \ No newline at end of file diff --git a/Assets/04.AudioCore/RunTime/AudioSourcePool.cs b/Assets/04.AudioCore/RunTime/AudioSourcePool.cs index 2a19026..c682f27 100644 --- a/Assets/04.AudioCore/RunTime/AudioSourcePool.cs +++ b/Assets/04.AudioCore/RunTime/AudioSourcePool.cs @@ -2,138 +2,141 @@ using UnityEngine; using System.Collections.Generic; using UnityEngine.SceneManagement; -public class AudioSourcePool +namespace AudioCore { - private Dictionary> poolDict = new Dictionary>(); - private GameObject poolObject; - - /// - /// سʼ - /// - private void PoolAwake() + public class AudioSourcePool { - // ǷѾһΪ"AudioSourcePool"Ķ - SceneManager.sceneUnloaded += OnSceneUnloaded; - poolObject = GameObject.Find("AudioSourcePool"); - if (poolObject == null) - { - // ڣһ¶ - poolObject = new GameObject("AudioSourcePool"); - } - CoroutineHelper.SetRunner(); + private Dictionary> poolDict = new Dictionary>(); + private GameObject poolObject; - // ʼ Voice أ 1 ɶ̬չ - poolDict["Voice"] = new Queue(); - CreateAudioSource("Voice"); - - // ʼ Music أ 2 - poolDict["Music"] = new Queue(); - for (int i = 0; i < 2; i++) + /// + /// سʼ + /// + private void PoolAwake() { - CreateAudioSource("Music"); - } - - // ʼ SFX أʼ 4 ɶ̬չ - poolDict["SFX"] = new Queue(); - for (int i = 0; i < 4; i++) - { - CreateAudioSource("SFX"); - } - } - - /// - /// - /// - /// - private void CreateAudioSource(string type) - { - GameObject newObject = new GameObject($"AudioSource_{type}"); - newObject.transform.SetParent(poolObject.transform); // ¶ΪǰӶ - newObject.AddComponent().playOnAwake = false; // AudioSource Զ - if(type == "Music") - { - newObject.GetComponent().loop = true; - } - poolDict[type].Enqueue(newObject); - } - - /// - /// ȡ - /// - /// - /// - public AudioSource GetAudioSource(string type) - { - if(poolObject == null) - { - PoolAwake(); - } - - if (!poolDict.ContainsKey(type)) - { - Debug.LogError($"в: {type}"); - return null; - } - - if (poolDict[type].Count == 0) - { - // Ϊգ̬µ GameObject SFX Voice - if (type == "SFX" && type == "Voice") + // ǷѾһΪ"AudioSourcePool"Ķ + SceneManager.sceneUnloaded += OnSceneUnloaded; + poolObject = GameObject.Find("AudioSourcePool"); + if (poolObject == null) { - CreateAudioSource(type); + // ڣһ¶ + poolObject = new GameObject("AudioSourcePool"); } - else + CoroutineHelper.SetRunner(); + + // ʼ Voice أ 1 ɶ̬չ + poolDict["Voice"] = new Queue(); + CreateAudioSource("Voice"); + + // ʼ Music أ 2 + poolDict["Music"] = new Queue(); + for (int i = 0; i < 2; i++) { - Debug.LogWarning($" {type} ꣬޷µ AudioSource"); + CreateAudioSource("Music"); + } + + // ʼ SFX أʼ 4 ɶ̬չ + poolDict["SFX"] = new Queue(); + for (int i = 0; i < 4; i++) + { + CreateAudioSource("SFX"); + } + } + + /// + /// + /// + /// + private void CreateAudioSource(string type) + { + GameObject newObject = new GameObject($"AudioSource_{type}"); + newObject.transform.SetParent(poolObject.transform); // ¶ΪǰӶ + newObject.AddComponent().playOnAwake = false; // AudioSource Զ + if (type == "Music") + { + newObject.GetComponent().loop = true; + } + poolDict[type].Enqueue(newObject); + } + + /// + /// ȡ + /// + /// + /// + public AudioSource GetAudioSource(string type) + { + if (poolObject == null) + { + PoolAwake(); + } + + if (!poolDict.ContainsKey(type)) + { + Debug.LogError($"в: {type}"); return null; } - CreateAudioSource(type); - } - - GameObject audioObject = poolDict[type].Dequeue(); - AudioSource audioSource = audioObject.GetComponent(); - return audioSource; - } - - /// - /// ն - /// - /// - /// - public void ReturnAudioSource(string type, GameObject audioObject) - { - if (!poolDict.ContainsKey(type)) - { - Debug.LogError($"в: {type}"); - return; - } - - AudioSource audioSource = audioObject.GetComponent(); - audioSource.Stop(); // ֹͣ - audioSource.clip = null; // Ƶ - audioSource.volume = 1f; // Сָ - poolDict[type].Enqueue(audioObject); // յ - } - - /// - /// ʱն - /// - /// - void OnSceneUnloaded(Scene scene) - { - foreach (var pair in poolDict) - { - Queue queue = pair.Value; - while (queue.Count > 0) + if (poolDict[type].Count == 0) { - GameObject obj = queue.Dequeue(); - if(obj != null) + // Ϊգ̬µ GameObject SFX Voice + if (type == "SFX" && type == "Voice") { - UnityEngine.Object.Destroy(obj); - } + CreateAudioSource(type); + } + else + { + Debug.LogWarning($" {type} ꣬޷µ AudioSource"); + return null; + } + + CreateAudioSource(type); } + + GameObject audioObject = poolDict[type].Dequeue(); + AudioSource audioSource = audioObject.GetComponent(); + return audioSource; + } + + /// + /// ն + /// + /// + /// + public void ReturnAudioSource(string type, GameObject audioObject) + { + if (!poolDict.ContainsKey(type)) + { + Debug.LogError($"в: {type}"); + return; + } + + AudioSource audioSource = audioObject.GetComponent(); + audioSource.Stop(); // ֹͣ + audioSource.clip = null; // Ƶ + audioSource.volume = 1f; // Сָ + poolDict[type].Enqueue(audioObject); // յ + } + + /// + /// ʱն + /// + /// + void OnSceneUnloaded(Scene scene) + { + foreach (var pair in poolDict) + { + Queue queue = pair.Value; + while (queue.Count > 0) + { + GameObject obj = queue.Dequeue(); + if (obj != null) + { + UnityEngine.Object.Destroy(obj); + } + } + } + poolDict.Clear(); } - poolDict.Clear(); } } \ No newline at end of file diff --git a/Assets/04.AudioCore/RunTime/CoroutineHelper.cs b/Assets/04.AudioCore/RunTime/CoroutineHelper.cs index fd76fd1..263ab9a 100644 --- a/Assets/04.AudioCore/RunTime/CoroutineHelper.cs +++ b/Assets/04.AudioCore/RunTime/CoroutineHelper.cs @@ -1,24 +1,28 @@ using System.Collections; using UnityEngine; using UnityEngine.Internal; -public static class CoroutineHelper + +namespace AudioCore { - private static CoroutineRunner coroutineRunner; + public static class CoroutineHelper + { + private static CoroutineRunner coroutineRunner; - public static void SetRunner() - { - GameObject runnerObject = new GameObject("CoroutineRunner"); - coroutineRunner = runnerObject.AddComponent(); - } - public static Coroutine StartCoroutine(IEnumerator coroutine) - { - Coroutine myCoroutine = coroutineRunner.StartCoroutine(coroutine); - return myCoroutine; - } - public static void StopCoroutine(Coroutine myCoroutine) - { - coroutineRunner.StopCoroutine(myCoroutine); - } + public static void SetRunner() + { + GameObject runnerObject = new GameObject("CoroutineRunner"); + coroutineRunner = runnerObject.AddComponent(); + } + public static Coroutine StartCoroutine(IEnumerator coroutine) + { + Coroutine myCoroutine = coroutineRunner.StartCoroutine(coroutine); + return myCoroutine; + } + public static void StopCoroutine(Coroutine myCoroutine) + { + coroutineRunner.StopCoroutine(myCoroutine); + } - private class CoroutineRunner : MonoBehaviour { } + private class CoroutineRunner : MonoBehaviour { } + } } diff --git a/Assets/04.AudioCore/RunTime/GenericPool.cs b/Assets/04.AudioCore/RunTime/GenericPool.cs deleted file mode 100644 index d459441..0000000 --- a/Assets/04.AudioCore/RunTime/GenericPool.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.Collections.Generic; - -public class GenericPool where T : new() -{ - private Queue _pool = new Queue(); - private int _maxSize; - - public GenericPool(int initialSize, int maxSize) - { - _maxSize = maxSize; - for (int i = 0; i < initialSize; i++) - { - _pool.Enqueue(new T()); - } - } - - // Ӷлȡһ - public T Get() - { - if (_pool.Count > 0) - { - return _pool.Dequeue(); - } - - // ΪδﵽС򴴽¶ - if (_pool.Count < _maxSize) - { - return new T(); - } - - // Ĭֵ׳쳣 - return default(T); - } - - // յ - public void Return(T item) - { - if (item == null) return; - - if (_pool.Count < _maxSize) - { - _pool.Enqueue(item); - } - } -} \ No newline at end of file diff --git a/Assets/04.AudioCore/RunTime/IAudio.cs b/Assets/04.AudioCore/RunTime/IAudio.cs index c971a94..bcf044f 100644 --- a/Assets/04.AudioCore/RunTime/IAudio.cs +++ b/Assets/04.AudioCore/RunTime/IAudio.cs @@ -2,81 +2,84 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -/// -/// Audio -/// -public struct AudioData +namespace AudioCore { /// - /// ӳٲʱ + /// Audio /// - public float delayTime; - - /// - /// Ƶ - /// - public AudioClip clip; - - /// - /// - /// - public float volume; - - /// - /// صΪ - /// - public System.Action onComplete; - - /// - /// ӳٻصִеʱ - /// - public float delayOnCompleteTime; - - /// - /// Ȼʱ - /// - public float fadeDuration; - - /// - /// Ƿ񲻴һζԻ - /// - public bool isNotOverVoice; - - /// - /// Ƿ3D - /// - public bool is3D; - - /// - /// 3D - /// - public GameObject soundObject; -} - -public interface IAudio -{ - void Play(AudioData audioData); - - void Stop(AudioData audioData); - -} -public abstract class AbstractAudio : IAudio -{ - public abstract void Play(AudioData audioData); - - public abstract void Stop(AudioData audioData); - - /// - /// Ƶݳʼ - /// - /// - /// - public virtual AudioData AudioDataInitialize(AudioData audioData) + public struct AudioData { - if(audioData.volume == 0) + /// + /// ӳٲʱ + /// + public float delayTime; + + /// + /// Ƶ + /// + public AudioClip clip; + + /// + /// + /// + public float volume; + + /// + /// صΪ + /// + public System.Action onComplete; + + /// + /// ӳٻصִеʱ + /// + public float delayOnCompleteTime; + + /// + /// Ȼʱ + /// + public float fadeDuration; + + /// + /// Ƿ񲻴һζԻ + /// + public bool isNotOverVoice; + + /// + /// Ƿ3D + /// + public bool is3D; + + /// + /// 3D + /// + public GameObject soundObject; + } + + public interface IAudio + { + void Play(AudioData audioData); + + void Stop(AudioData audioData); + + } + public abstract class AbstractAudio : IAudio + { + public abstract void Play(AudioData audioData); + + public abstract void Stop(AudioData audioData); + + /// + /// Ƶݳʼ + /// + /// + /// + public virtual AudioData AudioDataInitialize(AudioData audioData) { - audioData.volume = 1f; + if (audioData.volume == 0) + { + audioData.volume = 1f; + } + return audioData; } - return audioData; } } diff --git a/Assets/04.AudioCore/RunTime/MusicPlayer.cs b/Assets/04.AudioCore/RunTime/MusicPlayer.cs index 47d7dc4..4848a0c 100644 --- a/Assets/04.AudioCore/RunTime/MusicPlayer.cs +++ b/Assets/04.AudioCore/RunTime/MusicPlayer.cs @@ -1,125 +1,128 @@ using System.Collections; using UnityEngine; -public class MusicPlayer : AbstractAudio +namespace AudioCore { - private AudioSourcePool audioSourcePool; - private AudioSource audioSource1; - private AudioSource audioSource2; - private AudioSource currentAudioSource; - - public MusicPlayer(AudioSourcePool audioSourcePool) + public class MusicPlayer : AbstractAudio { - this.audioSourcePool = audioSourcePool; - } + private AudioSourcePool audioSourcePool; + private AudioSource audioSource1; + private AudioSource audioSource2; + private AudioSource currentAudioSource; - /// - /// ű - /// - /// {[clip:Ƶ], [volume:], [fadeDuration:Ȼʱ]} - public override void Play(AudioData audioData) - { - audioData = AudioDataInitialize(audioData); - if (audioSource1 == null) + public MusicPlayer(AudioSourcePool audioSourcePool) { - audioSource1 = audioSourcePool.GetAudioSource("Music"); - audioSource1.clip = audioData.clip; - audioSource1.volume = audioData.volume; - currentAudioSource = audioSource1; - currentAudioSource.Play(); - CoroutineHelper.StartCoroutine(FadeMusic(audioSource1, audioData.fadeDuration, audioSource2)); + this.audioSourcePool = audioSourcePool; } - else + + /// + /// ű + /// + /// {[clip:Ƶ], [volume:], [fadeDuration:Ȼʱ]} + public override void Play(AudioData audioData) { - if (audioSource2 == null) + audioData = AudioDataInitialize(audioData); + if (audioSource1 == null) { - audioSource2 = audioSourcePool.GetAudioSource("Music"); - audioSource2.clip = audioData.clip; - audioSource2.volume = audioData.volume; - currentAudioSource = audioSource2; + audioSource1 = audioSourcePool.GetAudioSource("Music"); + audioSource1.clip = audioData.clip; + audioSource1.volume = audioData.volume; + currentAudioSource = audioSource1; currentAudioSource.Play(); - CoroutineHelper.StartCoroutine(FadeMusic(audioSource2, audioData.fadeDuration, audioSource1)); + CoroutineHelper.StartCoroutine(FadeMusic(audioSource1, audioData.fadeDuration, audioSource2)); } else { - Debug.LogWarning("ͬʱл"); + if (audioSource2 == null) + { + audioSource2 = audioSourcePool.GetAudioSource("Music"); + audioSource2.clip = audioData.clip; + audioSource2.volume = audioData.volume; + currentAudioSource = audioSource2; + currentAudioSource.Play(); + CoroutineHelper.StartCoroutine(FadeMusic(audioSource2, audioData.fadeDuration, audioSource1)); + } + else + { + Debug.LogWarning("ͬʱл"); + } + } + + } + + /// + /// رձ + /// + /// {[fadeDuration:Ȼʱ]} + public override void Stop(AudioData audioData) + { + audioData = AudioDataInitialize(audioData); + CoroutineHelper.StartCoroutine(FadeOutMusic(currentAudioSource, audioData.fadeDuration)); + } + + /// + /// лƵ + /// + /// ŵƵ + /// 仯ʱ + /// ֹͣƵ + /// + private IEnumerator FadeMusic(AudioSource source1, float fadeDuration, AudioSource source2 = null) + { + yield return FadeInMusic(source1, fadeDuration); + + if (source2 != null) + { + yield return FadeOutMusic(source2, fadeDuration); + } + + } + + /// + /// رƵЭ + /// + /// + /// + /// + private IEnumerator FadeOutMusic(AudioSource source, float fadeDuration) + { + float startVolume = source.volume; + + while (source.volume > 0) + { + source.volume -= startVolume * Time.deltaTime / fadeDuration; + yield return null; + } + + source.Stop(); + audioSourcePool.ReturnAudioSource("Music", source.gameObject); + + if (currentAudioSource == audioSource1) + { + audioSource2 = null; + } + else if (currentAudioSource == audioSource2) + { + audioSource1 = null; } } - - } - /// - /// رձ - /// - /// {[fadeDuration:Ȼʱ]} - public override void Stop(AudioData audioData) - { - audioData = AudioDataInitialize(audioData); - CoroutineHelper.StartCoroutine(FadeOutMusic(currentAudioSource, audioData.fadeDuration)); - } - - /// - /// лƵ - /// - /// ŵƵ - /// 仯ʱ - /// ֹͣƵ - /// - private IEnumerator FadeMusic(AudioSource source1, float fadeDuration, AudioSource source2 = null) - { - yield return FadeInMusic(source1, fadeDuration); - - if(source2 != null) + /// + /// ƵЭ + /// + /// + /// + /// + private IEnumerator FadeInMusic(AudioSource source, float fadeDuration) { - yield return FadeOutMusic(source2, fadeDuration); - } - - } + float targetVolume = source.volume; + source.volume = 0; - /// - /// رƵЭ - /// - /// - /// - /// - private IEnumerator FadeOutMusic(AudioSource source, float fadeDuration) - { - float startVolume = source.volume; - - while (source.volume > 0) - { - source.volume -= startVolume * Time.deltaTime / fadeDuration; - yield return null; - } - - source.Stop(); - audioSourcePool.ReturnAudioSource("Music", source.gameObject); - - if(currentAudioSource == audioSource1) - { - audioSource2 = null; - } - else if(currentAudioSource == audioSource2) - { - audioSource1 = null; - } - } - - /// - /// ƵЭ - /// - /// - /// - /// - private IEnumerator FadeInMusic(AudioSource source, float fadeDuration) - { - float targetVolume = source.volume; - source.volume = 0; - - while (source.volume < targetVolume) - { - source.volume += targetVolume * Time.deltaTime / fadeDuration; - yield return null; + while (source.volume < targetVolume) + { + source.volume += targetVolume * Time.deltaTime / fadeDuration; + yield return null; + } } } } \ No newline at end of file diff --git a/Assets/04.AudioCore/RunTime/SFXPlayer.cs b/Assets/04.AudioCore/RunTime/SFXPlayer.cs index 4fcc960..fb5484d 100644 --- a/Assets/04.AudioCore/RunTime/SFXPlayer.cs +++ b/Assets/04.AudioCore/RunTime/SFXPlayer.cs @@ -2,67 +2,70 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -public class SFXPlayer : AbstractAudio +namespace AudioCore { - private AudioSourcePool audioSourcePool; - private List activeSources = new List(); // ڲŵ AudioSource б - - public SFXPlayer(AudioSourcePool audioSourcePool) + public class SFXPlayer : AbstractAudio { - this.audioSourcePool = audioSourcePool; - } + private AudioSourcePool audioSourcePool; + private List activeSources = new List(); // ڲŵ AudioSource б - /// - /// Ч - /// - /// {[clip:Ƶ], [volume:], - /// [onComplete:صΪ], [delayOnCompleteTime:ӳٻصִеʱ]} - public override void Play(AudioData audioData) - { - AudioSource source = audioSourcePool.GetAudioSource("SFX"); - if (source == null) return; - - source.clip = audioData.clip; - source.volume = audioData.volume; - source.Play(); - - // AudioSource б - activeSources.Add(source); - - // ʹЭ̴ӳٺͻص - CoroutineHelper.StartCoroutine(PlaySFXCoroutine(source, audioData.delayOnCompleteTime, audioData.onComplete)); - } - - /// - /// ֹͣЧ - /// - /// {[޿ʹñ]} - public override void Stop(AudioData audioData) - { - foreach (var source in activeSources) + public SFXPlayer(AudioSourcePool audioSourcePool) { - if (source.isPlaying) - { - source.Stop(); - audioSourcePool.ReturnAudioSource("SFX", source.gameObject); - } + this.audioSourcePool = audioSourcePool; } - activeSources.Clear(); - } - /// - /// ЧЭ - /// - /// - /// - /// - /// - private IEnumerator PlaySFXCoroutine(AudioSource source, float delay, System.Action onComplete) - { - yield return new WaitForSeconds(source.clip.length + delay); + /// + /// Ч + /// + /// {[clip:Ƶ], [volume:], + /// [onComplete:صΪ], [delayOnCompleteTime:ӳٻصִеʱ]} + public override void Play(AudioData audioData) + { + AudioSource source = audioSourcePool.GetAudioSource("SFX"); + if (source == null) return; - onComplete?.Invoke(); - audioSourcePool.ReturnAudioSource("SFX", source.gameObject); - activeSources.Remove(source); + source.clip = audioData.clip; + source.volume = audioData.volume; + source.Play(); + + // AudioSource б + activeSources.Add(source); + + // ʹЭ̴ӳٺͻص + CoroutineHelper.StartCoroutine(PlaySFXCoroutine(source, audioData.delayOnCompleteTime, audioData.onComplete)); + } + + /// + /// ֹͣЧ + /// + /// {[޿ʹñ]} + public override void Stop(AudioData audioData) + { + foreach (var source in activeSources) + { + if (source.isPlaying) + { + source.Stop(); + audioSourcePool.ReturnAudioSource("SFX", source.gameObject); + } + } + activeSources.Clear(); + } + + /// + /// ЧЭ + /// + /// + /// + /// + /// + private IEnumerator PlaySFXCoroutine(AudioSource source, float delay, System.Action onComplete) + { + yield return new WaitForSeconds(source.clip.length + delay); + + onComplete?.Invoke(); + audioSourcePool.ReturnAudioSource("SFX", source.gameObject); + activeSources.Remove(source); + } } } \ No newline at end of file diff --git a/Assets/04.AudioCore/RunTime/Test.cs b/Assets/04.AudioCore/RunTime/Test.cs index ffd9fb6..3123d06 100644 --- a/Assets/04.AudioCore/RunTime/Test.cs +++ b/Assets/04.AudioCore/RunTime/Test.cs @@ -2,6 +2,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; +using AudioCore; public class Test : MonoBehaviour { diff --git a/Assets/04.AudioCore/RunTime/VoicePlayer.cs b/Assets/04.AudioCore/RunTime/VoicePlayer.cs index da48bc0..8575d8b 100644 --- a/Assets/04.AudioCore/RunTime/VoicePlayer.cs +++ b/Assets/04.AudioCore/RunTime/VoicePlayer.cs @@ -1,73 +1,76 @@ using System.Collections; using UnityEngine; -public class VoicePlayer : AbstractAudio +namespace AudioCore { - private AudioSourcePool audioSourcePool; - private AudioSource currentSource; - private Coroutine myCoroutine; - - public VoicePlayer(AudioSourcePool audioSourcePool) + public class VoicePlayer : AbstractAudio { - this.audioSourcePool = audioSourcePool; - } + private AudioSourcePool audioSourcePool; + private AudioSource currentSource; + private Coroutine myCoroutine; - /// - /// - /// - /// {[clip:Ƶ], [volume:], - /// [onComplete:صΪ], [delayOnCompleteTime:ӳٻصִеʱ]} - public override void Play(AudioData audioData) - { - // ֹͣǰڲŵЭ - Stop(new AudioData { }); - - audioData = AudioDataInitialize(audioData); - - if (myCoroutine!= null) + public VoicePlayer(AudioSourcePool audioSourcePool) { - CoroutineHelper.StopCoroutine(myCoroutine); + this.audioSourcePool = audioSourcePool; + } + + /// + /// + /// + /// {[clip:Ƶ], [volume:], + /// [onComplete:صΪ], [delayOnCompleteTime:ӳٻصִеʱ]} + public override void Play(AudioData audioData) + { + // ֹͣǰڲŵЭ + Stop(new AudioData { }); + + audioData = AudioDataInitialize(audioData); + + if (myCoroutine != null) + { + CoroutineHelper.StopCoroutine(myCoroutine); + myCoroutine = null; + } + currentSource = audioSourcePool.GetAudioSource("Voice"); + if (currentSource == null) return; + + currentSource.clip = audioData.clip; + currentSource.volume = audioData.volume; + currentSource.Play(); + + // ʹЭ̴ӳٺͻص + myCoroutine = CoroutineHelper.StartCoroutine(PlayVoiceCoroutine(currentSource, audioData.delayOnCompleteTime, audioData.onComplete)); + } + + /// + /// ֹͣ + /// + /// /// {[޿ʹñ]} + public override void Stop(AudioData audioData) + { + if (currentSource != null && currentSource.isPlaying) + { + currentSource.Stop(); + audioSourcePool.ReturnAudioSource("Voice", currentSource.gameObject); + currentSource = null; + } + } + + /// + /// Э + /// + /// + /// + /// + /// + private IEnumerator PlayVoiceCoroutine(AudioSource source, float delayOnComplete, System.Action onComplete) + { + yield return new WaitForSeconds(source.clip.length + delayOnComplete); + + onComplete?.Invoke(); + audioSourcePool.ReturnAudioSource("Voice", source.gameObject); + currentSource = null; myCoroutine = null; } - currentSource = audioSourcePool.GetAudioSource("Voice"); - if (currentSource == null) return; - - currentSource.clip = audioData.clip; - currentSource.volume = audioData.volume; - currentSource.Play(); - - // ʹЭ̴ӳٺͻص - myCoroutine = CoroutineHelper.StartCoroutine(PlayVoiceCoroutine(currentSource, audioData.delayOnCompleteTime, audioData.onComplete)); - } - - /// - /// ֹͣ - /// - /// /// {[޿ʹñ]} - public override void Stop(AudioData audioData) - { - if (currentSource != null && currentSource.isPlaying) - { - currentSource.Stop(); - audioSourcePool.ReturnAudioSource("Voice", currentSource.gameObject); - currentSource = null; - } - } - - /// - /// Э - /// - /// - /// - /// - /// - private IEnumerator PlayVoiceCoroutine(AudioSource source, float delayOnComplete, System.Action onComplete) - { - yield return new WaitForSeconds(source.clip.length+delayOnComplete); - - onComplete?.Invoke(); - audioSourcePool.ReturnAudioSource("Voice", source.gameObject); - currentSource = null; - myCoroutine = null; } } \ No newline at end of file