diff --git a/Assets/04.AudioCore/RunTime/AudioCoreManager.cs b/Assets/04.AudioCore/RunTime/AudioCoreManager.cs new file mode 100644 index 0000000..1ee1197 --- /dev/null +++ b/Assets/04.AudioCore/RunTime/AudioCoreManager.cs @@ -0,0 +1,56 @@ +using UnityEngine; +using System.Collections.Generic; + +public static class AudioCoreManager +{ + private static AudioSourcePool audioSourcePool; + private static VoicePlayer Voice; + private static SFXPlayer SFX; + private static MusicPlayer Music; + + // 初始化 AudioCoreManager + static AudioCoreManager() + { + audioSourcePool = new AudioSourcePool(); + // 初始化播放器 + Voice = new VoicePlayer(audioSourcePool); + SFX = new SFXPlayer(audioSourcePool); + Music = new MusicPlayer(audioSourcePool); + } + + // 播放语音 + public static void PlayVoice(AudioClip clip, float volume = 1f, System.Action onComplete = null, float delay = 0f) + { + Voice.Play(clip, volume, onComplete, delay); + } + + // 停止语音 + public static void StopVoice() + { + Voice.Stop(); + } + + // 播放音效 + public static void PlaySFX(AudioClip clip, float volume = 1f, System.Action onComplete = null, float delay = 0f) + { + SFX.Play(clip, volume, onComplete, delay); + } + + // 停止所有音效 + public static void StopAllSFX() + { + SFX.Stop(); + } + + // 播放背景音乐 + public static void PlayMusic(AudioClip clip, float fadeDuration = 0f) + { + Music.Play(clip, fadeDuration); + } + + // 停止背景音乐 + public static void StopMusic(float fadeDuration = 1f) + { + Music.Stop(fadeDuration); + } +} \ No newline at end of file diff --git a/Assets/04.AudioCore/RunTime/AudioCoreManager.cs.meta b/Assets/04.AudioCore/RunTime/AudioCoreManager.cs.meta new file mode 100644 index 0000000..f42b09e --- /dev/null +++ b/Assets/04.AudioCore/RunTime/AudioCoreManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d2dc9112fdb158489cae641ffcec61e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04.AudioCore/RunTime/AudioSourcePool.cs b/Assets/04.AudioCore/RunTime/AudioSourcePool.cs new file mode 100644 index 0000000..1ca4932 --- /dev/null +++ b/Assets/04.AudioCore/RunTime/AudioSourcePool.cs @@ -0,0 +1,136 @@ +using UnityEngine; +using System.Collections.Generic; +using UnityEngine.SceneManagement; + +public class AudioSourcePool +{ + // 对象池字典,存储类型和对应的 GameObject 队列 + private Dictionary> poolDict = new Dictionary>(); + private GameObject poolObject; + + /// + /// 对象池初始化 + /// + private void PoolAwake() + { + // 检查是否已经存在一个名为"AudioSourcePool"的对象 + SceneManager.sceneUnloaded += OnSceneUnloaded; + poolObject = GameObject.Find("AudioSourcePool"); + if (poolObject == null) + { + // 如果不存在,创建一个新对象 + poolObject = new GameObject("AudioSourcePool"); + } + CoroutineHelper.SetRunner(); + + // 初始化 Voice 池(最多 1 个) + poolDict["Voice"] = new Queue(); + CreateAudioSource("Voice"); + + // 初始化 Music 池(最多 2 个) + poolDict["Music"] = new Queue(); + for (int i = 0; i < 2; i++) + { + 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 组件并禁用自动播放 + 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) + if (type == "SFX") + { + 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(); + } +} \ No newline at end of file diff --git a/Assets/04.AudioCore/RunTime/AudioSourcePool.cs.meta b/Assets/04.AudioCore/RunTime/AudioSourcePool.cs.meta new file mode 100644 index 0000000..5f7a88b --- /dev/null +++ b/Assets/04.AudioCore/RunTime/AudioSourcePool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0879cbfda12f434f97c3e393664b7ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04.AudioCore/RunTime/CoroutineHelper.cs b/Assets/04.AudioCore/RunTime/CoroutineHelper.cs new file mode 100644 index 0000000..fd76fd1 --- /dev/null +++ b/Assets/04.AudioCore/RunTime/CoroutineHelper.cs @@ -0,0 +1,24 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.Internal; +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); + } + + private class CoroutineRunner : MonoBehaviour { } +} diff --git a/Assets/04.AudioCore/RunTime/CoroutineHelper.cs.meta b/Assets/04.AudioCore/RunTime/CoroutineHelper.cs.meta new file mode 100644 index 0000000..8a7885c --- /dev/null +++ b/Assets/04.AudioCore/RunTime/CoroutineHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6f7491906db8d634a8aa1655c3b5621a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04.AudioCore/RunTime/GenericPool.cs b/Assets/04.AudioCore/RunTime/GenericPool.cs new file mode 100644 index 0000000..d459441 --- /dev/null +++ b/Assets/04.AudioCore/RunTime/GenericPool.cs @@ -0,0 +1,45 @@ +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/GenericPool.cs.meta b/Assets/04.AudioCore/RunTime/GenericPool.cs.meta new file mode 100644 index 0000000..79b55c4 --- /dev/null +++ b/Assets/04.AudioCore/RunTime/GenericPool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b3c60c3d4c25c5c428dc3e5835b40ac5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04.AudioCore/RunTime/IAudio.cs b/Assets/04.AudioCore/RunTime/IAudio.cs new file mode 100644 index 0000000..6157b57 --- /dev/null +++ b/Assets/04.AudioCore/RunTime/IAudio.cs @@ -0,0 +1,29 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public interface IAudio +{ + void Play(AudioClip audioClip,float volume); + + void Stop(); + + void Stop(float delay); + + void EndOperation(System.Action onComplete, float delay); + + void Set3DPosition(Vector3 vector3); + +} +public abstract class AbstractAudio : IAudio +{ + public abstract void Play(AudioClip audioClip, float volume); + + public abstract void Stop(); + + public abstract void Stop(float delay); + + public abstract void EndOperation(System.Action onComplete, float delay); + + public abstract void Set3DPosition(Vector3 vector3); +} diff --git a/Assets/04.AudioCore/RunTime/IAudio.cs.meta b/Assets/04.AudioCore/RunTime/IAudio.cs.meta new file mode 100644 index 0000000..9b2f830 --- /dev/null +++ b/Assets/04.AudioCore/RunTime/IAudio.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a45ad70b96df7ae428058f547876d158 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04.AudioCore/RunTime/MusicPlayer.cs b/Assets/04.AudioCore/RunTime/MusicPlayer.cs new file mode 100644 index 0000000..dd47e6d --- /dev/null +++ b/Assets/04.AudioCore/RunTime/MusicPlayer.cs @@ -0,0 +1,64 @@ +using System.Collections; +using UnityEngine; + +public class MusicPlayer +{ + private AudioSourcePool audioSourcePool; + + public MusicPlayer(AudioSourcePool audioSourcePool) + { + this.audioSourcePool = audioSourcePool; + } + + public void Play(AudioClip clip, float fadeDuration) + { + AudioSource source = audioSourcePool.GetAudioSource("Music"); + if (source == null) return; + + CoroutineHelper.StartCoroutine(FadeMusic(source, clip, fadeDuration)); + } + + public void Stop(float fadeDuration) + { + AudioSource source = audioSourcePool.GetAudioSource("Music"); + if (source == null) return; + + CoroutineHelper.StartCoroutine(FadeOutMusic(source, fadeDuration)); + } + + private IEnumerator FadeMusic(AudioSource source, AudioClip clip, float fadeDuration) + { + yield return FadeOutMusic(source, fadeDuration); + + source.clip = clip; + source.Play(); + + yield return FadeInMusic(source, 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(); + source.volume = startVolume; + } + + 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; + } + } +} \ No newline at end of file diff --git a/Assets/04.AudioCore/RunTime/MusicPlayer.cs.meta b/Assets/04.AudioCore/RunTime/MusicPlayer.cs.meta new file mode 100644 index 0000000..0b0aba4 --- /dev/null +++ b/Assets/04.AudioCore/RunTime/MusicPlayer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cbd824d200553654e958ab9e5ef3f040 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04.AudioCore/RunTime/SFXPlayer.cs b/Assets/04.AudioCore/RunTime/SFXPlayer.cs new file mode 100644 index 0000000..8c7d15f --- /dev/null +++ b/Assets/04.AudioCore/RunTime/SFXPlayer.cs @@ -0,0 +1,69 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class SFXPlayer +{ + private AudioSourcePool audioSourcePool; + private List activeSources = new List(); // 正在播放的 AudioSource 列表 + + public SFXPlayer(AudioSourcePool audioSourcePool) + { + this.audioSourcePool = audioSourcePool; + } + + /*public override void Play(AudioClip clip, float volume = 1f) + { + AudioSource source = audioSourcePool.GetAudioSource("SFX"); + if (source == null) return; + + source.clip = clip; + source.volume = volume; + source.Play(); + + // 将 AudioSource 加入活动列表 + activeSources.Add(source); + } +*/ + + // 播放音效 + public void Play(AudioClip clip, float volume = 1f, System.Action onComplete = null, float delay = 0f) + { + AudioSource source = audioSourcePool.GetAudioSource("SFX"); + if (source == null) return; + + source.clip = clip; + source.volume = volume; + source.Play(); + + // 将 AudioSource 加入活动列表 + activeSources.Add(source); + + // 使用协程处理延迟和回调 + CoroutineHelper.StartCoroutine(PlayCoroutine(source, delay, onComplete)); + } + + // 停止所有音效 + public void Stop() + { + foreach (var source in activeSources) + { + if (source.isPlaying) + { + source.Stop(); + audioSourcePool.ReturnAudioSource("SFX", source.gameObject); + } + } + activeSources.Clear(); + } + + // 播放音效的协程 + private IEnumerator PlayCoroutine(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/SFXPlayer.cs.meta b/Assets/04.AudioCore/RunTime/SFXPlayer.cs.meta new file mode 100644 index 0000000..8b3d782 --- /dev/null +++ b/Assets/04.AudioCore/RunTime/SFXPlayer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19ed6bde81273554f89ece0a1147f33d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04.AudioCore/RunTime/Test.cs b/Assets/04.AudioCore/RunTime/Test.cs new file mode 100644 index 0000000..68769bb --- /dev/null +++ b/Assets/04.AudioCore/RunTime/Test.cs @@ -0,0 +1,65 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.SceneManagement; + +public class Test : MonoBehaviour +{ + public AudioClip clip1; + public AudioClip clip2; + public AudioClip clip21; + public AudioClip clip22; + public AudioClip clip31; + public AudioClip clip32; + + // Start is called before the first frame update + void Start() + { + //AudioCore.PlayerPrefs(); + } + + // Update is called once per frame + void Update() + { + if (Input.GetKeyDown(KeyCode.A)) + { + AudioCoreManager.PlayVoice(clip1); + } + if (Input.GetKeyDown(KeyCode.S)) + { + AudioCoreManager.PlayVoice(clip2); + } + if (Input.GetKeyDown(KeyCode.D)) + { + AudioCoreManager.PlaySFX(clip21); + } + if (Input.GetKeyDown(KeyCode.F)) + { + AudioCoreManager.PlaySFX(clip22); + } + if (Input.GetKeyDown(KeyCode.G)) + { + AudioCoreManager.PlayMusic(clip31); + } + if (Input.GetKeyDown(KeyCode.H)) + { + AudioCoreManager.PlayMusic(clip32); + } + if (Input.GetKeyDown(KeyCode.Z)) + { + AudioCoreManager.StopVoice(); + } + if (Input.GetKeyDown(KeyCode.X)) + { + AudioCoreManager.StopAllSFX(); + } + if (Input.GetKeyDown(KeyCode.C)) + { + AudioCoreManager.StopMusic(); + } + if (Input.GetKeyDown(KeyCode.Space)) + { + SceneManager.LoadScene(1); + } + } +} diff --git a/Assets/04.AudioCore/RunTime/Test.cs.meta b/Assets/04.AudioCore/RunTime/Test.cs.meta new file mode 100644 index 0000000..4bdb8db --- /dev/null +++ b/Assets/04.AudioCore/RunTime/Test.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2cca50490fb28574697c5fd3d2d37b52 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04.AudioCore/RunTime/VoicePlayer.cs b/Assets/04.AudioCore/RunTime/VoicePlayer.cs new file mode 100644 index 0000000..c6a483d --- /dev/null +++ b/Assets/04.AudioCore/RunTime/VoicePlayer.cs @@ -0,0 +1,71 @@ +using System.Collections; +using UnityEngine; + +public class VoicePlayer +{ + private AudioSourcePool audioSourcePool; + private AudioSource currentSource; // 当前正在播放的 AudioSource + Coroutine myCoroutine; + + public VoicePlayer(AudioSourcePool audioSourcePool) + { + this.audioSourcePool = audioSourcePool; + } + + /*public override void Play(AudioClip clip, float volume = 1) + { + // 停止当前正在播放的语音 + Stop(); + + currentSource = audioSourcePool.GetAudioSource("Voice"); + if (currentSource == null) return; + + currentSource.clip = clip; + currentSource.volume = volume; + currentSource.Play(); + } +*/ + + // 播放语音 + public void Play(AudioClip clip, float volume = 1f, System.Action onComplete = null, float delayOnComplete = 0f) + { + // 停止当前正在播放的语音与旧协程 + Stop(); + if(myCoroutine!= null) + { + CoroutineHelper.StopCoroutine(myCoroutine); + myCoroutine = null; + } + currentSource = audioSourcePool.GetAudioSource("Voice"); + if (currentSource == null) return; + + currentSource.clip = clip; + currentSource.volume = volume; + currentSource.Play(); + + // 使用协程处理延迟和回调 + myCoroutine = CoroutineHelper.StartCoroutine(PlayVoiceCoroutine(currentSource, delayOnComplete, onComplete)); + } + + // 停止语音 + public void Stop() + { + 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 diff --git a/Assets/04.AudioCore/RunTime/VoicePlayer.cs.meta b/Assets/04.AudioCore/RunTime/VoicePlayer.cs.meta new file mode 100644 index 0000000..1ca4aa7 --- /dev/null +++ b/Assets/04.AudioCore/RunTime/VoicePlayer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff93caf4019714a4797e6986c6e5c234 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04.AudioCore/package.json b/Assets/04.AudioCore/package.json index 85089a1..48f0aba 100644 --- a/Assets/04.AudioCore/package.json +++ b/Assets/04.AudioCore/package.json @@ -2,7 +2,7 @@ "name": "com.staryevo.codechecker", "version": "1.0.0", "displayName": "01.CodeChecker", - "description": "浠g爜妫鏌ュ伐鍏", + "description": "闊抽鎾斁宸ュ叿", "unity": "2021.3", "unityRelease": "30f1", "keywords": [ diff --git a/Assets/Audio.meta b/Assets/Audio.meta new file mode 100644 index 0000000..1d4c902 --- /dev/null +++ b/Assets/Audio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf2ebf709c2dff24086961e12cdf61b3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Music.meta b/Assets/Audio/Music.meta new file mode 100644 index 0000000..0785db5 --- /dev/null +++ b/Assets/Audio/Music.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ec0df2cf44e3f1d45b7cf7d914fc1f60 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/SFX.meta b/Assets/Audio/SFX.meta new file mode 100644 index 0000000..171f1a0 --- /dev/null +++ b/Assets/Audio/SFX.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 21d3c62239a23f942858ede80c7c8581 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Voice.meta b/Assets/Audio/Voice.meta new file mode 100644 index 0000000..89b3d8a --- /dev/null +++ b/Assets/Audio/Voice.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d0d386b8e27f46849b37c318647caf9c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Voice/Au_璞¢笩_娓告垙寮曞叆.wav b/Assets/Audio/Voice/Au_璞¢笩_娓告垙寮曞叆.wav new file mode 100644 index 0000000..da72d68 Binary files /dev/null and b/Assets/Audio/Voice/Au_璞¢笩_娓告垙寮曞叆.wav differ diff --git a/Assets/Audio/Voice/Au_璞¢笩_娓告垙寮曞叆.wav.meta b/Assets/Audio/Voice/Au_璞¢笩_娓告垙寮曞叆.wav.meta new file mode 100644 index 0000000..a85969f --- /dev/null +++ b/Assets/Audio/Voice/Au_璞¢笩_娓告垙寮曞叆.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 6689aaa78797acf4aa733003ddad16b9 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/Voice/Au_璞¢笩_缁撳熬鍗囧崕2.wav b/Assets/Audio/Voice/Au_璞¢笩_缁撳熬鍗囧崕2.wav new file mode 100644 index 0000000..c61433c Binary files /dev/null and b/Assets/Audio/Voice/Au_璞¢笩_缁撳熬鍗囧崕2.wav differ diff --git a/Assets/Audio/Voice/Au_璞¢笩_缁撳熬鍗囧崕2.wav.meta b/Assets/Audio/Voice/Au_璞¢笩_缁撳熬鍗囧崕2.wav.meta new file mode 100644 index 0000000..f1d4c04 --- /dev/null +++ b/Assets/Audio/Voice/Au_璞¢笩_缁撳熬鍗囧崕2.wav.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 933538c8c54c7b24e9b1c2e06fc52506 +AudioImporter: + externalObjects: {} + serializedVersion: 6 + defaultSettings: + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + preloadAudioData: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene 1.unity b/Assets/Scenes/SampleScene 1.unity new file mode 100644 index 0000000..a8565fb --- /dev/null +++ b/Assets/Scenes/SampleScene 1.unity @@ -0,0 +1,352 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 705507994} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &265350652 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 265350654} + - component: {fileID: 265350653} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &265350653 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 265350652} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2cca50490fb28574697c5fd3d2d37b52, type: 3} + m_Name: + m_EditorClassIdentifier: + clip1: {fileID: 8300000, guid: 6689aaa78797acf4aa733003ddad16b9, type: 3} + clip2: {fileID: 8300000, guid: 933538c8c54c7b24e9b1c2e06fc52506, type: 3} + clip21: {fileID: 8300000, guid: 6689aaa78797acf4aa733003ddad16b9, type: 3} + clip22: {fileID: 8300000, guid: 933538c8c54c7b24e9b1c2e06fc52506, type: 3} + clip31: {fileID: 0} + clip32: {fileID: 0} +--- !u!4 &265350654 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 265350652} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &705507993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 705507995} + - component: {fileID: 705507994} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &705507994 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &705507995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &963194225 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 963194228} + - component: {fileID: 963194227} + - component: {fileID: 963194226} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &963194226 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 +--- !u!20 &963194227 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &963194228 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Scenes/SampleScene 1.unity.meta b/Assets/Scenes/SampleScene 1.unity.meta new file mode 100644 index 0000000..ff55def --- /dev/null +++ b/Assets/Scenes/SampleScene 1.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2bef2297eeb62d948b3fde560e43e9a2 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 2221b04..a8565fb 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -38,7 +38,6 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 705507994} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -118,14 +117,67 @@ NavMeshSettings: manualTileSize: 0 tileSize: 256 accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &265350652 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 265350654} + - component: {fileID: 265350653} + m_Layer: 0 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &265350653 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 265350652} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2cca50490fb28574697c5fd3d2d37b52, type: 3} + m_Name: + m_EditorClassIdentifier: + clip1: {fileID: 8300000, guid: 6689aaa78797acf4aa733003ddad16b9, type: 3} + clip2: {fileID: 8300000, guid: 933538c8c54c7b24e9b1c2e06fc52506, type: 3} + clip21: {fileID: 8300000, guid: 6689aaa78797acf4aa733003ddad16b9, type: 3} + clip22: {fileID: 8300000, guid: 933538c8c54c7b24e9b1c2e06fc52506, type: 3} + clip31: {fileID: 0} + clip32: {fileID: 0} +--- !u!4 &265350654 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 265350652} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &705507993 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 705507995} @@ -141,15 +193,18 @@ GameObject: Light: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 705507993} m_Enabled: 1 - serializedVersion: 8 + serializedVersion: 10 m_Type: 1 + m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 m_CookieSize: 10 m_Shadows: m_Type: 2 @@ -159,6 +214,24 @@ Light: m_Bias: 0.05 m_NormalBias: 0.4 m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 m_Cookie: {fileID: 0} m_DrawHalo: 0 m_Flare: {fileID: 0} @@ -166,23 +239,29 @@ Light: m_CullingMask: serializedVersion: 2 m_Bits: 4294967295 + m_RenderingLayerMask: 1 m_Lightmapping: 1 m_LightShadowCasterMode: 0 m_AreaSize: {x: 1, y: 1} m_BounceIntensity: 1 m_ColorTemperature: 6570 m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 m_ShadowRadius: 0 m_ShadowAngle: 0 --- !u!4 &705507995 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 705507993} m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_RootOrder: 1 @@ -191,7 +270,8 @@ Transform: GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - component: {fileID: 963194228} @@ -208,23 +288,26 @@ GameObject: AudioListener: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 963194225} m_Enabled: 1 --- !u!20 &963194227 Camera: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 963194225} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 1 m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 @@ -256,11 +339,13 @@ Camera: Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 963194225} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 1, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} m_RootOrder: 0