diff --git a/Assets/01_Scenes/Cave_Test_2.unity b/Assets/01_Scenes/Cave_Test_2.unity index a858149c..7a4e23a8 100644 --- a/Assets/01_Scenes/Cave_Test_2.unity +++ b/Assets/01_Scenes/Cave_Test_2.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:01dc71f932eb55a37ad06c3233ec111ee46eecac67233d26fc9f71e43746c237 -size 1056085 +oid sha256:1772e755e8f9662001c6ac3b0dab414981cd77f927d74389fe73ef29f41dd307 +size 1077526 diff --git a/Assets/01_Scenes/InventoryTest.meta b/Assets/01_Scenes/InventoryTest.meta new file mode 100644 index 00000000..c74826d9 --- /dev/null +++ b/Assets/01_Scenes/InventoryTest.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 07411883afd0e9042a8a0d7b5f5b387a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/01_Scenes/InventoryTest.unity b/Assets/01_Scenes/InventoryTest.unity index f42cde82..14cdbedf 100644 --- a/Assets/01_Scenes/InventoryTest.unity +++ b/Assets/01_Scenes/InventoryTest.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ca0c2bc9936d4565d95fae6da943601351072ecfd860b9960b0a1941bda6e78d -size 137666 +oid sha256:84a44ba920f2b7eba394f0d3bfedc3319db5a0840362a42c10ca409f068c66e7 +size 153302 diff --git a/Assets/01_Scenes/InventoryTest/Global Volume Profile.asset b/Assets/01_Scenes/InventoryTest/Global Volume Profile.asset new file mode 100644 index 00000000..0128e02e --- /dev/null +++ b/Assets/01_Scenes/InventoryTest/Global Volume Profile.asset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ce536e8471da930a3a89b250326973dba64b05f6dddd187fcd764c3d5a529d8 +size 1670 diff --git a/Assets/01_Scenes/InventoryTest/Global Volume Profile.asset.meta b/Assets/01_Scenes/InventoryTest/Global Volume Profile.asset.meta new file mode 100644 index 00000000..635456b1 --- /dev/null +++ b/Assets/01_Scenes/InventoryTest/Global Volume Profile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 60b952ebf3e21e64e81ea8118924376f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02_Scripts/Cave/ClamOpenClose.cs b/Assets/02_Scripts/Cave/ClamOpenClose.cs index b88ae29b..1ea75db0 100644 --- a/Assets/02_Scripts/Cave/ClamOpenClose.cs +++ b/Assets/02_Scripts/Cave/ClamOpenClose.cs @@ -38,6 +38,36 @@ public class ClamOpenClose : MonoBehaviour [Tooltip("쾅 하고 닫힌 뒤 원래 닫힌 위치로 돌아오는 시간입니다.")] [SerializeField] private float snapCloseOvershootDuration = 0.02f; + [Header("Sound")] + [SerializeField] private AudioSource audioSource; + + [Tooltip("조개가 닫히며 입이 부딪힐 때 재생할 사운드입니다. 여러 개를 넣으면 랜덤 재생됩니다.")] + [SerializeField] private AudioClip[] closeImpactSounds; + + [Tooltip("조개가 닫히기 시작할 때 재생할 예고/마찰 사운드입니다. 필요 없으면 비워두세요.")] + [SerializeField] private AudioClip closeStartSound; + + [Range(0f, 1f)] + [SerializeField] private float closeImpactVolume = 1f; + + [Range(0f, 1f)] + [SerializeField] private float closeStartVolume = 0.5f; + + [Tooltip("닫힘 충격음의 최소 피치입니다.")] + [SerializeField] private float minImpactPitch = 0.9f; + + [Tooltip("닫힘 충격음의 최대 피치입니다.")] + [SerializeField] private float maxImpactPitch = 1.1f; + + [Tooltip("닫힘 충격음의 볼륨을 살짝 랜덤하게 줄지 여부입니다.")] + [SerializeField] private bool randomizeImpactVolume = true; + + [Tooltip("볼륨 랜덤 적용 시 최소 배율입니다.")] + [SerializeField] private float minImpactVolumeMultiplier = 0.85f; + + [Tooltip("볼륨 랜덤 적용 시 최대 배율입니다.")] + [SerializeField] private float maxImpactVolumeMultiplier = 1.0f; + [Header("Start Option")] [SerializeField] private bool startAutomatically = true; [SerializeField] private bool startOpened = false; @@ -74,6 +104,17 @@ private void Awake() if (found != null) downShell = found; } + if (audioSource == null) + { + audioSource = GetComponent(); + } + + if (audioSource != null) + { + audioSource.playOnAwake = false; + audioSource.loop = false; + } + if (upShell == null) { Debug.LogWarning("[ClamOpenClose] UpShell이 연결되지 않았습니다.", this); @@ -145,6 +186,7 @@ private IEnumerator OpenCloseRoutine() yield return new WaitForSeconds(openWait); isClosing = true; + PlayCloseStartSound(); onCloseStarted?.Invoke(); yield return MoveShells( @@ -158,6 +200,10 @@ private IEnumerator OpenCloseRoutine() isOpen = false; + // 실제 입이 맞닿는 타이밍. + // 랜덤으로 닫혀도 항상 닫힘 동작이 끝난 직후 실행됨. + PlayCloseImpactSound(); + if (useSnapClose) { yield return SnapCloseEffect(); @@ -225,6 +271,47 @@ private IEnumerator SnapCloseEffect() downShell.localRotation = downClosedRot; } + private void PlayCloseStartSound() + { + if (audioSource == null || closeStartSound == null) + return; + + audioSource.pitch = 1f; + audioSource.PlayOneShot(closeStartSound, closeStartVolume); + } + + private void PlayCloseImpactSound() + { + if (audioSource == null) + return; + + if (closeImpactSounds == null || closeImpactSounds.Length == 0) + return; + + AudioClip clip = closeImpactSounds[Random.Range(0, closeImpactSounds.Length)]; + + if (clip == null) + return; + + float originalPitch = audioSource.pitch; + + audioSource.pitch = Random.Range(minImpactPitch, maxImpactPitch); + + float volume = closeImpactVolume; + + if (randomizeImpactVolume) + { + float volumeMultiplier = Random.Range(minImpactVolumeMultiplier, maxImpactVolumeMultiplier); + volume *= volumeMultiplier; + } + + audioSource.PlayOneShot(clip, volume); + + // PlayOneShot은 재생 직후 피치를 바꿔도 이미 재생 중인 소리에 영향이 적지만, + // 다음 사운드 재생을 위해 기본 피치로 복구. + audioSource.pitch = originalPitch; + } + private void SetClosedImmediately() { if (upShell != null) diff --git a/Assets/02_Scripts/Cave/FallingStalactite.cs b/Assets/02_Scripts/Cave/FallingStalactite.cs index 71aabb1f..a7554be1 100644 --- a/Assets/02_Scripts/Cave/FallingStalactite.cs +++ b/Assets/02_Scripts/Cave/FallingStalactite.cs @@ -23,6 +23,24 @@ public class FallingStalactite : MonoBehaviour [Tooltip("떨어지기 전에는 데미지를 끄고, 떨어질 때 켭니다.")] [SerializeField] private bool damageOnlyWhileFalling = true; + [Header("Sound")] + [SerializeField] private AudioSource audioSource; + + [Tooltip("종유석이 떨어지기 시작할 때 재생할 소리입니다.")] + [SerializeField] private AudioClip fallSound; + + [Range(0f, 1f)] + [SerializeField] private float fallSoundVolume = 1f; + + [Tooltip("리셋 후 다시 떨어질 때도 소리를 재생할지 여부입니다.")] + [SerializeField] private bool playSoundEveryFall = true; + + [Tooltip("Play through the shared 2D SFX pool when available so the fall cue is always audible.")] + [SerializeField] private bool playThroughSoundManager = true; + + [Tooltip("Force the fallback AudioSource to 2D playback.")] + [SerializeField] private bool playFallSoundAs2D = true; + [Header("Reset Option")] [SerializeField] private bool resetAfterFall = true; @@ -38,6 +56,7 @@ public class FallingStalactite : MonoBehaviour private Vector3 startPosition; private Quaternion startRotation; private bool hasFallen; + private bool hasPlayedSound; private Coroutine fallRoutine; public bool HasFallen => hasFallen; @@ -62,6 +81,9 @@ private void ResolveReferences() if (damageObstacle == null) damageObstacle = GetComponent(); + + if (audioSource == null) + audioSource = GetComponent(); } private void PrepareStalactite() @@ -85,7 +107,21 @@ private void PrepareStalactite() damageCollider.enabled = true; } + if (audioSource != null) + { + audioSource.playOnAwake = false; + audioSource.mute = false; + + if (playFallSoundAs2D) + audioSource.spatialBlend = 0f; + } + + PreloadFallSound(); + hasFallen = false; + + if (playSoundEveryFall) + hasPlayedSound = false; } public void TriggerFall() @@ -106,6 +142,8 @@ private IEnumerator FallRoutine() if (fallDelay > 0f) yield return new WaitForSeconds(fallDelay); + PlayFallSound(); + if (damageObstacle != null) { damageObstacle.SetDamage(damage); @@ -137,6 +175,71 @@ private IEnumerator FallRoutine() fallRoutine = null; } + private AudioClip GetFallClip() + { + if (fallSound != null) + return fallSound; + + if (audioSource != null) + return audioSource.clip; + + return null; + } + + private void PreloadFallSound() + { + AudioClip clipToLoad = GetFallClip(); + + if (clipToLoad != null && clipToLoad.loadState == AudioDataLoadState.Unloaded) + clipToLoad.LoadAudioData(); + } + + private void PlayFallSound() + { + if (hasPlayedSound && !playSoundEveryFall) + return; + + AudioClip clipToPlay = GetFallClip(); + + if (clipToPlay == null) + { + if (showDebugLog) + Debug.LogWarning($"[FallingStalactite] {name} Fall Sound가 연결되지 않았습니다.", this); + + return; + } + + if (clipToPlay.loadState == AudioDataLoadState.Unloaded) + clipToPlay.LoadAudioData(); + + if (playThroughSoundManager && SoundManager.Instance != null) + { + SoundManager.Instance.PlaySFX(clipToPlay, fallSoundVolume); + } + else if (audioSource != null) + { + audioSource.enabled = true; + audioSource.mute = false; + audioSource.playOnAwake = false; + + if (audioSource.volume <= 0f) + audioSource.volume = 1f; + + if (playFallSoundAs2D) + audioSource.spatialBlend = 0f; + + audioSource.PlayOneShot(clipToPlay, fallSoundVolume); + } + else + { + AudioSource.PlayClipAtPoint(clipToPlay, transform.position, fallSoundVolume); + } + + hasPlayedSound = true; + + if (showDebugLog) + Debug.Log($"[FallingStalactite] {name} 낙하 사운드 재생: {clipToPlay.name}", this); + } public void ResetStalactite() { if (rb != null) @@ -161,6 +264,11 @@ public void ResetStalactite() hasFallen = false; } + if (playSoundEveryFall) + { + hasPlayedSound = false; + } + if (showDebugLog) Debug.Log($"[FallingStalactite] {name} 원위치 리셋", this); } diff --git a/Assets/02_Scripts/Cave/SteeringKeyGrabMusic.cs b/Assets/02_Scripts/Cave/SteeringKeyGrabMusic.cs new file mode 100644 index 00000000..3684f29f --- /dev/null +++ b/Assets/02_Scripts/Cave/SteeringKeyGrabMusic.cs @@ -0,0 +1,158 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.XR.Interaction.Toolkit; +using UnityEngine.XR.Interaction.Toolkit.Interactables; + +public class SteeringKeyGrabMusic : MonoBehaviour +{ + [Header("References")] + [SerializeField] private XRGrabInteractable grabInteractable; + [SerializeField] private AudioSource audioSource; + + [Header("Playback")] + [SerializeField] private bool playOnGrab = true; + [SerializeField] private bool stopOnRelease = true; + + [Tooltip("키를 잡았을 때 음악을 처음부터 다시 재생할지 여부입니다.")] + [SerializeField] private bool restartFromBeginningOnGrab = false; + + [Header("Fade")] + [SerializeField] private bool useFade = true; + [SerializeField] private float fadeInDuration = 0.4f; + [SerializeField] private float fadeOutDuration = 0.5f; + + [Range(0f, 1f)] + [SerializeField] private float targetVolume = 1f; + + [Header("Debug")] + [SerializeField] private bool showDebugLog = true; + + private Coroutine fadeRoutine; + private bool isGrabbed; + + private void Awake() + { + if (grabInteractable == null) + grabInteractable = GetComponentInChildren(true); + + if (audioSource == null) + audioSource = GetComponent(); + + if (audioSource != null) + { + audioSource.playOnAwake = false; + audioSource.loop = true; + + if (useFade) + audioSource.volume = 0f; + else + audioSource.volume = targetVolume; + } + } + + private void OnEnable() + { + if (grabInteractable != null) + { + grabInteractable.selectEntered.AddListener(OnKeyGrabbed); + grabInteractable.selectExited.AddListener(OnKeyReleased); + } + } + + private void OnDisable() + { + if (grabInteractable != null) + { + grabInteractable.selectEntered.RemoveListener(OnKeyGrabbed); + grabInteractable.selectExited.RemoveListener(OnKeyReleased); + } + } + + private void OnKeyGrabbed(SelectEnterEventArgs args) + { + isGrabbed = true; + + if (!playOnGrab) + return; + + if (audioSource == null) + { + if (showDebugLog) + Debug.LogWarning("[SteeringKeyGrabMusic] AudioSource가 연결되지 않았습니다.", this); + + return; + } + + if (restartFromBeginningOnGrab) + audioSource.time = 0f; + + if (!audioSource.isPlaying) + audioSource.Play(); + + if (useFade) + StartFade(targetVolume, fadeInDuration); + else + audioSource.volume = targetVolume; + + if (showDebugLog) + Debug.Log("[SteeringKeyGrabMusic] 키 잡음. 음악 재생.", this); + } + + private void OnKeyReleased(SelectExitEventArgs args) + { + isGrabbed = false; + + if (!stopOnRelease) + return; + + if (audioSource == null) + return; + + if (useFade) + StartFade(0f, fadeOutDuration, stopAfterFade: true); + else + audioSource.Stop(); + + if (showDebugLog) + Debug.Log("[SteeringKeyGrabMusic] 키 놓음. 음악 정지.", this); + } + + private void StartFade(float target, float duration, bool stopAfterFade = false) + { + if (fadeRoutine != null) + StopCoroutine(fadeRoutine); + + fadeRoutine = StartCoroutine(FadeRoutine(target, duration, stopAfterFade)); + } + + private IEnumerator FadeRoutine(float target, float duration, bool stopAfterFade) + { + if (audioSource == null) + yield break; + + float startVolume = audioSource.volume; + float timer = 0f; + float safeDuration = Mathf.Max(0.01f, duration); + + while (timer < safeDuration) + { + timer += Time.deltaTime; + + float t = Mathf.Clamp01(timer / safeDuration); + float smoothT = t * t * (3f - 2f * t); + + audioSource.volume = Mathf.Lerp(startVolume, target, smoothT); + + yield return null; + } + + audioSource.volume = target; + + if (stopAfterFade && !isGrabbed) + { + audioSource.Stop(); + } + + fadeRoutine = null; + } +} diff --git a/Assets/02_Scripts/Cave/SteeringKeyGrabMusic.cs.meta b/Assets/02_Scripts/Cave/SteeringKeyGrabMusic.cs.meta new file mode 100644 index 00000000..c4b6f780 --- /dev/null +++ b/Assets/02_Scripts/Cave/SteeringKeyGrabMusic.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 3a3e3221faafc724c82b5b177b84072e \ No newline at end of file diff --git a/Assets/02_Scripts/Managers/GameClear.cs b/Assets/02_Scripts/Managers/GameClear.cs index c0e7e3ee..840eb45d 100644 --- a/Assets/02_Scripts/Managers/GameClear.cs +++ b/Assets/02_Scripts/Managers/GameClear.cs @@ -66,8 +66,10 @@ public void Relocate(GameObject target, Transform destination) if (target.TryGetComponent(out NavMeshAgent agent) && agent.isOnNavMesh) { + Debug.Log($"엔드포지션 : {destination.position}"); agent.Warp(destination.position); target.transform.rotation = destination.rotation; + Debug.Log($"이동한포지션 : {target.transform.position}"); } else { diff --git a/Assets/04_Models/Cave/Sound.meta b/Assets/04_Models/Cave/Sound.meta new file mode 100644 index 00000000..b32a509b --- /dev/null +++ b/Assets/04_Models/Cave/Sound.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dee9cf61a8aadaf429e8bbc70324fdd0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Cave/Sound/Kim Lightyear - Now Or Never.mp3 b/Assets/04_Models/Cave/Sound/Kim Lightyear - Now Or Never.mp3 new file mode 100644 index 00000000..582d4cbf --- /dev/null +++ b/Assets/04_Models/Cave/Sound/Kim Lightyear - Now Or Never.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64f260361b370023ef06a86d21aa222f5371c7ef90546a47063748d2f8eda398 +size 7516597 diff --git a/Assets/04_Models/Cave/Sound/Kim Lightyear - Now Or Never.mp3.meta b/Assets/04_Models/Cave/Sound/Kim Lightyear - Now Or Never.mp3.meta new file mode 100644 index 00000000..97ec9aa7 --- /dev/null +++ b/Assets/04_Models/Cave/Sound/Kim Lightyear - Now Or Never.mp3.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 0d93a658fb069d14b94baf8f6370e4d2 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Cave/Sound/Kim Lightyear - Waltz No. I.mp3 b/Assets/04_Models/Cave/Sound/Kim Lightyear - Waltz No. I.mp3 new file mode 100644 index 00000000..b42a57e8 --- /dev/null +++ b/Assets/04_Models/Cave/Sound/Kim Lightyear - Waltz No. I.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:efba5bf812989383f587c8a17c0fd3bdfd9f12970be66fc5752a6cfeab916041 +size 5812304 diff --git a/Assets/04_Models/Cave/Sound/Kim Lightyear - Waltz No. I.mp3.meta b/Assets/04_Models/Cave/Sound/Kim Lightyear - Waltz No. I.mp3.meta new file mode 100644 index 00000000..2edb9521 --- /dev/null +++ b/Assets/04_Models/Cave/Sound/Kim Lightyear - Waltz No. I.mp3.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: e7d9d8354a2109f4ba357fc917160258 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Cave/Sound/countdown.ogg b/Assets/04_Models/Cave/Sound/countdown.ogg new file mode 100644 index 00000000..81dab392 --- /dev/null +++ b/Assets/04_Models/Cave/Sound/countdown.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f60feb6d0e950b9075562c9ca185fa9fb2234e60db82ab98ea9b7736b3f8dd75 +size 86750 diff --git a/Assets/04_Models/Cave/Sound/countdown.ogg.meta b/Assets/04_Models/Cave/Sound/countdown.ogg.meta new file mode 100644 index 00000000..b39d26ab --- /dev/null +++ b/Assets/04_Models/Cave/Sound/countdown.ogg.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 412c85a028de51b4cafafae492cadcde +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Cave/Sound/fullmoonmix.ogg b/Assets/04_Models/Cave/Sound/fullmoonmix.ogg new file mode 100644 index 00000000..0c385ac8 --- /dev/null +++ b/Assets/04_Models/Cave/Sound/fullmoonmix.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6639abb11d89ffc399fac143c3f84a94e1b9652cbd7f4ecd3157f1d64cf1d2bb +size 6627833 diff --git a/Assets/04_Models/Cave/Sound/fullmoonmix.ogg.meta b/Assets/04_Models/Cave/Sound/fullmoonmix.ogg.meta new file mode 100644 index 00000000..9b5a992f --- /dev/null +++ b/Assets/04_Models/Cave/Sound/fullmoonmix.ogg.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: ee3d441de1fde154683ccc675676911b +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Cave/Sound/handleSmallLeather.ogg b/Assets/04_Models/Cave/Sound/handleSmallLeather.ogg new file mode 100644 index 00000000..1afc2d53 --- /dev/null +++ b/Assets/04_Models/Cave/Sound/handleSmallLeather.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae3cbf695aa0a8b98b5a80a835be5a3ccbd5446a24db2235cd4c3cd6fc92ed96 +size 10492 diff --git a/Assets/04_Models/Cave/Sound/handleSmallLeather.ogg.meta b/Assets/04_Models/Cave/Sound/handleSmallLeather.ogg.meta new file mode 100644 index 00000000..ea2559b5 --- /dev/null +++ b/Assets/04_Models/Cave/Sound/handleSmallLeather.ogg.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 0291ad2a65220ce419ab44320662568d +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Cave/Sound/handleSmallLeather2.ogg b/Assets/04_Models/Cave/Sound/handleSmallLeather2.ogg new file mode 100644 index 00000000..3be1b7da --- /dev/null +++ b/Assets/04_Models/Cave/Sound/handleSmallLeather2.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a66f6db5918ad016c28a9f2768f127a7f39b5fa04481e5a3b4e78ebe2a1c282d +size 10028 diff --git a/Assets/04_Models/Cave/Sound/handleSmallLeather2.ogg.meta b/Assets/04_Models/Cave/Sound/handleSmallLeather2.ogg.meta new file mode 100644 index 00000000..9974f77f --- /dev/null +++ b/Assets/04_Models/Cave/Sound/handleSmallLeather2.ogg.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: ed3213baaf41a2c49855f4169e4335e6 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Cave/Sound/metalLatch.ogg b/Assets/04_Models/Cave/Sound/metalLatch.ogg new file mode 100644 index 00000000..08b6eea1 --- /dev/null +++ b/Assets/04_Models/Cave/Sound/metalLatch.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba9ba60b172b3ebc131a940f25793cd2e207aca7af73dc80d637277f060f1708 +size 10208 diff --git a/Assets/04_Models/Cave/Sound/metalLatch.ogg.meta b/Assets/04_Models/Cave/Sound/metalLatch.ogg.meta new file mode 100644 index 00000000..641ec193 --- /dev/null +++ b/Assets/04_Models/Cave/Sound/metalLatch.ogg.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 68eae6eb893a8a14ca5f9cf96bc4a3ca +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Cave/Sound/race.mp3 b/Assets/04_Models/Cave/Sound/race.mp3 new file mode 100644 index 00000000..01af6e12 --- /dev/null +++ b/Assets/04_Models/Cave/Sound/race.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5653426689978a4d07f0b7703ef5c7f8e67544f220c155c9d30a9af5b0edc4ee +size 2200448 diff --git a/Assets/04_Models/Cave/Sound/race.mp3.meta b/Assets/04_Models/Cave/Sound/race.mp3.meta new file mode 100644 index 00000000..98e605c1 --- /dev/null +++ b/Assets/04_Models/Cave/Sound/race.mp3.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 32b693b7b610e06409cbeee291ac1891 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Cave/Sound/shake.flac b/Assets/04_Models/Cave/Sound/shake.flac new file mode 100644 index 00000000..686ce815 Binary files /dev/null and b/Assets/04_Models/Cave/Sound/shake.flac differ diff --git a/Assets/04_Models/Cave/Sound/shake.flac.meta b/Assets/04_Models/Cave/Sound/shake.flac.meta new file mode 100644 index 00000000..ac5fa375 --- /dev/null +++ b/Assets/04_Models/Cave/Sound/shake.flac.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 405c61493d6a8bf49abb93262757461d +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 1 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Cave/Sound/졸졸졸.mp3 b/Assets/04_Models/Cave/Sound/졸졸졸.mp3 new file mode 100644 index 00000000..99365c24 --- /dev/null +++ b/Assets/04_Models/Cave/Sound/졸졸졸.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d6039fbf01f6b64191d813bfbc9ac70f6749e5bb183d2807fb5cb117c10fd94 +size 12260589 diff --git a/Assets/04_Models/Cave/Sound/졸졸졸.mp3.meta b/Assets/04_Models/Cave/Sound/졸졸졸.mp3.meta new file mode 100644 index 00000000..bf947114 --- /dev/null +++ b/Assets/04_Models/Cave/Sound/졸졸졸.mp3.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: c382f26bd2a3f1148a62c975bfa95e08 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Characters/Fariy/Portrait/Fairy.png b/Assets/04_Models/Characters/Fariy/Portrait/Fairy.png new file mode 100644 index 00000000..ec20a2f2 --- /dev/null +++ b/Assets/04_Models/Characters/Fariy/Portrait/Fairy.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae2d69b1b93ebeaf3a2cc50c4e65e1a52122f918e82796635fd320c47063bd4f +size 44434 diff --git a/Assets/04_Models/Characters/Fariy/Portrait/Fairy.png.meta b/Assets/04_Models/Characters/Fariy/Portrait/Fairy.png.meta new file mode 100644 index 00000000..3b94b760 --- /dev/null +++ b/Assets/04_Models/Characters/Fariy/Portrait/Fairy.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: c9a19c73d7aab0741afe8d852260749e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Characters/Fariy/Portrait/PortraitFairy.png b/Assets/04_Models/Characters/Fariy/Portrait/PortraitFairy.png deleted file mode 100644 index e8fe0f8e..00000000 --- a/Assets/04_Models/Characters/Fariy/Portrait/PortraitFairy.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:80b1e7700d315501d9da7520e6b42827358bd04a0a1021225629d8a95a10fffc -size 103805 diff --git a/Assets/04_Models/Objects/Coin.meta b/Assets/04_Models/Objects/Coin.meta new file mode 100644 index 00000000..9a3ede54 --- /dev/null +++ b/Assets/04_Models/Objects/Coin.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4bb0e920c399f6145a22564e7657b739 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Coin/Prefabs.meta b/Assets/04_Models/Objects/Coin/Prefabs.meta new file mode 100644 index 00000000..972b74df --- /dev/null +++ b/Assets/04_Models/Objects/Coin/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9d91aa0966798154e902671e2b853748 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Coin/Prefabs/Coin.prefab b/Assets/04_Models/Objects/Coin/Prefabs/Coin.prefab new file mode 100644 index 00000000..53547d7c --- /dev/null +++ b/Assets/04_Models/Objects/Coin/Prefabs/Coin.prefab @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:088461ab035a8cd7fd543ced07ef65bd9ece89025332fc8ee238a18ad15eb9f1 +size 4698 diff --git a/Assets/04_Models/Objects/Coin/Prefabs/Coin.prefab.meta b/Assets/04_Models/Objects/Coin/Prefabs/Coin.prefab.meta new file mode 100644 index 00000000..bd1d8648 --- /dev/null +++ b/Assets/04_Models/Objects/Coin/Prefabs/Coin.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 849ef977269c80240943faeafd08b54d +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Compass.meta b/Assets/04_Models/Objects/Compass.meta new file mode 100644 index 00000000..9fe1e529 --- /dev/null +++ b/Assets/04_Models/Objects/Compass.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ffa37096907950c4aa658590259f8a22 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Compass/Compass.fbx b/Assets/04_Models/Objects/Compass/Compass.fbx new file mode 100644 index 00000000..b2fbbd5d --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Compass.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8afed58062c39e06f8c0596dffe6ea4f1f67b1b45ae4687df462a618597d98db +size 3305612 diff --git a/Assets/04_Models/Objects/Compass/Compass.fbx.meta b/Assets/04_Models/Objects/Compass/Compass.fbx.meta new file mode 100644 index 00000000..f1a6d637 --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Compass.fbx.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 9913b4e7fafa4a64bbd36c9a45c4a3a4 +ModelImporter: + serializedVersion: 24200 + internalIDToNameTable: [] + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: Black + second: {fileID: 2100000, guid: 1a8de9091f72de642ae5573136d1665b, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: Dark blue + second: {fileID: 2100000, guid: f8938c9758fa37a4da3717f05741156e, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: Gold + second: {fileID: 2100000, guid: 03f36afde4783104e92ba0568742b46b, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: Red + second: {fileID: 2100000, guid: d6d3fef86baf01f478d20f456428953a, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: White + second: {fileID: 2100000, guid: 00e34c3f093649240aa45690e9cbe03d, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: gray + second: {fileID: 2100000, guid: 34bc18eb99ce3f14387a953e79886570, type: 2} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 0.1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + generateMeshLods: 0 + meshLodGenerationFlags: 0 + maximumMeshLod: -1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 0.001 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Compass/Materials.meta b/Assets/04_Models/Objects/Compass/Materials.meta new file mode 100644 index 00000000..cfb27fce --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f07fdfac494a1a24e9031c751748339c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Compass/Materials/Black.mat b/Assets/04_Models/Objects/Compass/Materials/Black.mat new file mode 100644 index 00000000..9fc2616d --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Materials/Black.mat @@ -0,0 +1,139 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Black + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.14466995, g: 0.14466995, b: 0.14466995, a: 1} + - _Color: {r: 0.14466992, g: 0.14466992, b: 0.14466992, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &1028533970570792611 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Assets/04_Models/Objects/Compass/Materials/Black.mat.meta b/Assets/04_Models/Objects/Compass/Materials/Black.mat.meta new file mode 100644 index 00000000..6e2c22d4 --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Materials/Black.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1a8de9091f72de642ae5573136d1665b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Compass/Materials/Dark blue.mat b/Assets/04_Models/Objects/Compass/Materials/Dark blue.mat new file mode 100644 index 00000000..64d8d37c --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Materials/Dark blue.mat @@ -0,0 +1,139 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2308815351894969385 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Dark blue + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.028877458, g: 0.06677327, b: 0.18391529, a: 1} + - _Color: {r: 0.028877458, g: 0.06677325, b: 0.18391526, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/04_Models/Objects/Compass/Materials/Dark blue.mat.meta b/Assets/04_Models/Objects/Compass/Materials/Dark blue.mat.meta new file mode 100644 index 00000000..e4aaf8eb --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Materials/Dark blue.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f8938c9758fa37a4da3717f05741156e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Compass/Materials/Gold.mat b/Assets/04_Models/Objects/Compass/Materials/Gold.mat new file mode 100644 index 00000000..c9ba0465 --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Materials/Gold.mat @@ -0,0 +1,139 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Gold + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.65 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.65 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 0.8516126, b: 0.73885804, a: 1} + - _Color: {r: 1, g: 0.8516126, b: 0.73885804, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &8116706486225992084 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Assets/04_Models/Objects/Compass/Materials/Gold.mat.meta b/Assets/04_Models/Objects/Compass/Materials/Gold.mat.meta new file mode 100644 index 00000000..9820da01 --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Materials/Gold.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 03f36afde4783104e92ba0568742b46b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Compass/Materials/Red.mat b/Assets/04_Models/Objects/Compass/Materials/Red.mat new file mode 100644 index 00000000..60cd10c2 --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Materials/Red.mat @@ -0,0 +1,139 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Red + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.9063317, g: 0.29322496, b: 0.29322496, a: 1} + - _Color: {r: 0.9063317, g: 0.2932249, b: 0.2932249, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &7243207145921113161 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Assets/04_Models/Objects/Compass/Materials/Red.mat.meta b/Assets/04_Models/Objects/Compass/Materials/Red.mat.meta new file mode 100644 index 00000000..f50e4e5e --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Materials/Red.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d6d3fef86baf01f478d20f456428953a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Compass/Materials/White.mat b/Assets/04_Models/Objects/Compass/Materials/White.mat new file mode 100644 index 00000000..0ab1e329 --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Materials/White.mat @@ -0,0 +1,139 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: White + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &8005775589462170591 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Assets/04_Models/Objects/Compass/Materials/White.mat.meta b/Assets/04_Models/Objects/Compass/Materials/White.mat.meta new file mode 100644 index 00000000..3727ac9f --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Materials/White.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 00e34c3f093649240aa45690e9cbe03d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Compass/Materials/gray.mat b/Assets/04_Models/Objects/Compass/Materials/gray.mat new file mode 100644 index 00000000..a234ccf2 --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Materials/gray.mat @@ -0,0 +1,139 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-4487342273543906093 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: gray + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.5812741, g: 0.5812741, b: 0.5812741, a: 1} + - _Color: {r: 0.5812741, g: 0.5812741, b: 0.5812741, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/04_Models/Objects/Compass/Materials/gray.mat.meta b/Assets/04_Models/Objects/Compass/Materials/gray.mat.meta new file mode 100644 index 00000000..8317b0c0 --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Materials/gray.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 34bc18eb99ce3f14387a953e79886570 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Compass/Prefabs.meta b/Assets/04_Models/Objects/Compass/Prefabs.meta new file mode 100644 index 00000000..f62f36ad --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2f25a922cfcead74aad3edb2f211ad9d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Compass/Prefabs/Compass.prefab b/Assets/04_Models/Objects/Compass/Prefabs/Compass.prefab new file mode 100644 index 00000000..be1631b4 --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Prefabs/Compass.prefab @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1164e981afb4b21c6ad2a2d54f250c4a6b4bd17e1d854fd0e94a914ab453c78f +size 5065 diff --git a/Assets/04_Models/Objects/Compass/Prefabs/Compass.prefab.meta b/Assets/04_Models/Objects/Compass/Prefabs/Compass.prefab.meta new file mode 100644 index 00000000..8efcc6db --- /dev/null +++ b/Assets/04_Models/Objects/Compass/Prefabs/Compass.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8160b02adc548d944a4c000d06310e0f +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Fish.meta b/Assets/04_Models/Objects/Fish.meta new file mode 100644 index 00000000..3cc7ef78 --- /dev/null +++ b/Assets/04_Models/Objects/Fish.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c35d16788ecec4d488974a851fe9b066 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Fish/Fish.fbx b/Assets/04_Models/Objects/Fish/Fish.fbx new file mode 100644 index 00000000..a55801a4 --- /dev/null +++ b/Assets/04_Models/Objects/Fish/Fish.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d7aa91e857f447bdd1b2700ea984903d70ef3c421ba450353d3e2bf714d4e40 +size 40492 diff --git a/Assets/04_Models/Objects/Fish/Fish.fbx.meta b/Assets/04_Models/Objects/Fish/Fish.fbx.meta new file mode 100644 index 00000000..494436c0 --- /dev/null +++ b/Assets/04_Models/Objects/Fish/Fish.fbx.meta @@ -0,0 +1,115 @@ +fileFormatVersion: 2 +guid: 30759966c9f90b140b1b9a2fec4ad9bd +ModelImporter: + serializedVersion: 24200 + internalIDToNameTable: [] + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: Material + second: {fileID: 2100000, guid: dde97a45ad7ce4f419cfebff8dd8e75f, type: 2} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + generateMeshLods: 0 + meshLodGenerationFlags: 0 + maximumMeshLod: -1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Fish/Materials.meta b/Assets/04_Models/Objects/Fish/Materials.meta new file mode 100644 index 00000000..06ffd1ca --- /dev/null +++ b/Assets/04_Models/Objects/Fish/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e0e4621475f88d9459192dd95f6aea27 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Fish/Materials/Material.mat b/Assets/04_Models/Objects/Fish/Materials/Material.mat new file mode 100644 index 00000000..d33e33a0 --- /dev/null +++ b/Assets/04_Models/Objects/Fish/Materials/Material.mat @@ -0,0 +1,143 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-9035946152128689496 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Material + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _ALPHAPREMULTIPLY_ON + - _SURFACE_TYPE_TRANSPARENT + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + disabledShaderPasses: + - MOTIONVECTORS + - DepthOnly + - SHADOWCASTER + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: c3b5e888cd42d974a9f17f51588c5253, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: c3b5e888cd42d974a9f17f51588c5253, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 10 + - _DstBlendAlpha: 10 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.6 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 1 + - _UVSec: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 0 + m_Colors: + - _BaseColor: {r: 0.9063317, g: 0.9063317, b: 0.9063317, a: 1} + - _Color: {r: 0.9063317, g: 0.9063317, b: 0.9063317, a: 1} + - _EmissionColor: {r: 0.03773582, g: 0.03755782, b: 0.03755782, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/04_Models/Objects/Fish/Materials/Material.mat.meta b/Assets/04_Models/Objects/Fish/Materials/Material.mat.meta new file mode 100644 index 00000000..300c56fa --- /dev/null +++ b/Assets/04_Models/Objects/Fish/Materials/Material.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dde97a45ad7ce4f419cfebff8dd8e75f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Fish/Prefabs.meta b/Assets/04_Models/Objects/Fish/Prefabs.meta new file mode 100644 index 00000000..734da019 --- /dev/null +++ b/Assets/04_Models/Objects/Fish/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e905a106f953fd64288eedc95976f5f8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Fish/Prefabs/Fish.prefab b/Assets/04_Models/Objects/Fish/Prefabs/Fish.prefab new file mode 100644 index 00000000..d47ea32c --- /dev/null +++ b/Assets/04_Models/Objects/Fish/Prefabs/Fish.prefab @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cead168ca362bf336bad9163896d0409f71b7f12068ef8c38b36ee0c77beca4 +size 5641 diff --git a/Assets/04_Models/Objects/Fish/Prefabs/Fish.prefab.meta b/Assets/04_Models/Objects/Fish/Prefabs/Fish.prefab.meta new file mode 100644 index 00000000..376d512e --- /dev/null +++ b/Assets/04_Models/Objects/Fish/Prefabs/Fish.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c5ebd07deed95714ea97c9841c62e40e +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Fish/Textures.meta b/Assets/04_Models/Objects/Fish/Textures.meta new file mode 100644 index 00000000..964d573d --- /dev/null +++ b/Assets/04_Models/Objects/Fish/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3c59922f4c231c140b83d4a0d2fd0911 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Fish/Textures/bugill.png b/Assets/04_Models/Objects/Fish/Textures/bugill.png new file mode 100644 index 00000000..df383145 --- /dev/null +++ b/Assets/04_Models/Objects/Fish/Textures/bugill.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f20e54080b7465ead5a7d146af4a6cf30459f742470b3345aeae0300a6aa0fc9 +size 351363 diff --git a/Assets/04_Models/Characters/Fariy/Portrait/PortraitFairy.png.meta b/Assets/04_Models/Objects/Fish/Textures/bugill.png.meta similarity index 98% rename from Assets/04_Models/Characters/Fariy/Portrait/PortraitFairy.png.meta rename to Assets/04_Models/Objects/Fish/Textures/bugill.png.meta index fd77efa7..820fce20 100644 --- a/Assets/04_Models/Characters/Fariy/Portrait/PortraitFairy.png.meta +++ b/Assets/04_Models/Objects/Fish/Textures/bugill.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: db353d4be915bfc4fac873cee55ffd1b +guid: c3b5e888cd42d974a9f17f51588c5253 TextureImporter: internalIDToNameTable: [] externalObjects: {} @@ -44,7 +44,7 @@ TextureImporter: lightmap: 0 compressionQuality: 50 spriteMode: 1 - spriteExtrude: 0 + spriteExtrude: 1 spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} diff --git a/Assets/04_Models/Objects/Star.meta b/Assets/04_Models/Objects/Star.meta new file mode 100644 index 00000000..f8b0a028 --- /dev/null +++ b/Assets/04_Models/Objects/Star.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e234c1bb31a097445823e018a47638ed +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Star/Materials.meta b/Assets/04_Models/Objects/Star/Materials.meta new file mode 100644 index 00000000..23c852d3 --- /dev/null +++ b/Assets/04_Models/Objects/Star/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c62c5c4cda8379d4b80d3bf8849e568e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Star/Materials/Star.mat b/Assets/04_Models/Objects/Star/Materials/Star.mat new file mode 100644 index 00000000..7d34ac9b --- /dev/null +++ b/Assets/04_Models/Objects/Star/Materials/Star.mat @@ -0,0 +1,142 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Star + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _EMISSION + - _METALLICSPECGLOSSMAP + - _NORMALMAP + m_InvalidKeywords: [] + m_LightmapFlags: 2 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 9110849bd0e911940ac3bc45910b9a55, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 8462aaabec7ef2e48b721684a9659757, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 9110849bd0e911940ac3bc45910b9a55, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 2800000, guid: 669ae748d9998fa4b8ef30b8ee4e4177, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.9063317, g: 0.9063317, b: 0.9063317, a: 1} + - _Color: {r: 0.9063317, g: 0.9063317, b: 0.9063317, a: 1} + - _EmissionColor: {r: 2.9960787, g: 2.6248112, b: 0.12719196, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &2087539054387982311 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Assets/04_Models/Objects/Star/Materials/Star.mat.meta b/Assets/04_Models/Objects/Star/Materials/Star.mat.meta new file mode 100644 index 00000000..237b6e31 --- /dev/null +++ b/Assets/04_Models/Objects/Star/Materials/Star.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7415d67adb394384f876cddfbcb5b5fb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Star/Prefabs.meta b/Assets/04_Models/Objects/Star/Prefabs.meta new file mode 100644 index 00000000..56a8a183 --- /dev/null +++ b/Assets/04_Models/Objects/Star/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1ee919a05d3f0074d95b8447dcb8eab1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Star/Prefabs/StarPiece.prefab b/Assets/04_Models/Objects/Star/Prefabs/StarPiece.prefab new file mode 100644 index 00000000..b0bfd1c7 --- /dev/null +++ b/Assets/04_Models/Objects/Star/Prefabs/StarPiece.prefab @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:96cfa22174695d8c7ee0cfc7d529f7a875e8abaa616f00b9e711f7ee307dbaa2 +size 5647 diff --git a/Assets/04_Models/Objects/Star/Prefabs/StarPiece.prefab.meta b/Assets/04_Models/Objects/Star/Prefabs/StarPiece.prefab.meta new file mode 100644 index 00000000..552d155d --- /dev/null +++ b/Assets/04_Models/Objects/Star/Prefabs/StarPiece.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a0d191b2a9fd35a4c853beafc12ccd57 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Star/Textures.meta b/Assets/04_Models/Objects/Star/Textures.meta new file mode 100644 index 00000000..f32b80e3 --- /dev/null +++ b/Assets/04_Models/Objects/Star/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ec3247cd81bff9544a57297d6f3179de +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Star/Textures/gold star_Star_BaseColor.png b/Assets/04_Models/Objects/Star/Textures/gold star_Star_BaseColor.png new file mode 100644 index 00000000..ec147fd7 --- /dev/null +++ b/Assets/04_Models/Objects/Star/Textures/gold star_Star_BaseColor.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b86a76fa109354762fefd4cd0b0f599551a6ab315879a04886a23600227b031 +size 758049 diff --git a/Assets/04_Models/Objects/Star/Textures/gold star_Star_BaseColor.png.meta b/Assets/04_Models/Objects/Star/Textures/gold star_Star_BaseColor.png.meta new file mode 100644 index 00000000..8cbd8dc6 --- /dev/null +++ b/Assets/04_Models/Objects/Star/Textures/gold star_Star_BaseColor.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: 9110849bd0e911940ac3bc45910b9a55 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Star/Textures/gold star_Star_Metallic.png b/Assets/04_Models/Objects/Star/Textures/gold star_Star_Metallic.png new file mode 100644 index 00000000..30292873 --- /dev/null +++ b/Assets/04_Models/Objects/Star/Textures/gold star_Star_Metallic.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ea72adab41824a5fef4ccce96ed993b54329c1b40654d6c2e5696eda9d67d9c +size 8575 diff --git a/Assets/04_Models/Objects/Star/Textures/gold star_Star_Metallic.png.meta b/Assets/04_Models/Objects/Star/Textures/gold star_Star_Metallic.png.meta new file mode 100644 index 00000000..cf2b023a --- /dev/null +++ b/Assets/04_Models/Objects/Star/Textures/gold star_Star_Metallic.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: 669ae748d9998fa4b8ef30b8ee4e4177 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Star/Textures/gold star_Star_Normal.png b/Assets/04_Models/Objects/Star/Textures/gold star_Star_Normal.png new file mode 100644 index 00000000..89eb1aeb --- /dev/null +++ b/Assets/04_Models/Objects/Star/Textures/gold star_Star_Normal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b80f1056ee6224f5b1ceadf3a613f5d60a34f2315fd95ef598513ad734fba9c +size 1127480 diff --git a/Assets/04_Models/Objects/Star/Textures/gold star_Star_Normal.png.meta b/Assets/04_Models/Objects/Star/Textures/gold star_Star_Normal.png.meta new file mode 100644 index 00000000..d4ad66ad --- /dev/null +++ b/Assets/04_Models/Objects/Star/Textures/gold star_Star_Normal.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: 8462aaabec7ef2e48b721684a9659757 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Star/Textures/gold star_Star_Roughness.png b/Assets/04_Models/Objects/Star/Textures/gold star_Star_Roughness.png new file mode 100644 index 00000000..0fea1d00 --- /dev/null +++ b/Assets/04_Models/Objects/Star/Textures/gold star_Star_Roughness.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:360e7b20f16b2595f64ce4e1a0cd24dcc6bace8adbeb3a81f52ee477c8906335 +size 721254 diff --git a/Assets/04_Models/Objects/Star/Textures/gold star_Star_Roughness.png.meta b/Assets/04_Models/Objects/Star/Textures/gold star_Star_Roughness.png.meta new file mode 100644 index 00000000..434b199b --- /dev/null +++ b/Assets/04_Models/Objects/Star/Textures/gold star_Star_Roughness.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: e7211f393bc971143b07dd58fc0fbbff +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Star/gold star.fbx b/Assets/04_Models/Objects/Star/gold star.fbx new file mode 100644 index 00000000..c04faebe --- /dev/null +++ b/Assets/04_Models/Objects/Star/gold star.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17998869d23e0e7bb801d98b1676e7653e039d7ed998ef04af49ad3d3a58daca +size 2638380 diff --git a/Assets/04_Models/Objects/Star/gold star.fbx.meta b/Assets/04_Models/Objects/Star/gold star.fbx.meta new file mode 100644 index 00000000..e51996f6 --- /dev/null +++ b/Assets/04_Models/Objects/Star/gold star.fbx.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 2b52df9ce3a315b4bacdc93997e2b7ab +ModelImporter: + serializedVersion: 24200 + internalIDToNameTable: [] + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: Star + second: {fileID: 2100000, guid: 7415d67adb394384f876cddfbcb5b5fb, type: 2} + - first: + type: UnityEngine:Texture2D + assembly: UnityEngine.CoreModule + name: gold star_Star_BaseColor + second: {fileID: 2800000, guid: 9110849bd0e911940ac3bc45910b9a55, type: 3} + - first: + type: UnityEngine:Texture2D + assembly: UnityEngine.CoreModule + name: gold star_Star_Metallic + second: {fileID: 2800000, guid: 669ae748d9998fa4b8ef30b8ee4e4177, type: 3} + - first: + type: UnityEngine:Texture2D + assembly: UnityEngine.CoreModule + name: gold star_Star_Normal + second: {fileID: 2800000, guid: 8462aaabec7ef2e48b721684a9659757, type: 3} + - first: + type: UnityEngine:Texture2D + assembly: UnityEngine.CoreModule + name: gold star_Star_Roughness + second: {fileID: 2800000, guid: e7211f393bc971143b07dd58fc0fbbff, type: 3} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + generateMeshLods: 0 + meshLodGenerationFlags: 0 + maximumMeshLod: -1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Star/star_piece.fbx b/Assets/04_Models/Objects/Star/star_piece.fbx new file mode 100644 index 00000000..00218fb1 --- /dev/null +++ b/Assets/04_Models/Objects/Star/star_piece.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce2c1f9f50365b79dd8a388f05fbc427327b45ddb1391bae5ca476a7d4dea9f3 +size 22172 diff --git a/Assets/04_Models/Objects/Star/star_piece.fbx.meta b/Assets/04_Models/Objects/Star/star_piece.fbx.meta new file mode 100644 index 00000000..601d03f1 --- /dev/null +++ b/Assets/04_Models/Objects/Star/star_piece.fbx.meta @@ -0,0 +1,115 @@ +fileFormatVersion: 2 +guid: c747f1fdcc3498b4485d968ca0e58928 +ModelImporter: + serializedVersion: 24200 + internalIDToNameTable: [] + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: Star + second: {fileID: 2100000, guid: 7415d67adb394384f876cddfbcb5b5fb, type: 2} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + generateMeshLods: 0 + meshLodGenerationFlags: 0 + maximumMeshLod: -1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Trash.meta b/Assets/04_Models/Objects/Trash.meta new file mode 100644 index 00000000..dc32a0d8 --- /dev/null +++ b/Assets/04_Models/Objects/Trash.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 14dfe05be21d8134c800ef8a34aedbde +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Trash/CrumbledPaper.fbx b/Assets/04_Models/Objects/Trash/CrumbledPaper.fbx new file mode 100644 index 00000000..143de412 --- /dev/null +++ b/Assets/04_Models/Objects/Trash/CrumbledPaper.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9451cacd78606cdd131427a5ea9ce7a046d530a678b263038326cf0fcc9f095 +size 7171548 diff --git a/Assets/04_Models/Objects/Trash/CrumbledPaper.fbx.meta b/Assets/04_Models/Objects/Trash/CrumbledPaper.fbx.meta new file mode 100644 index 00000000..ef2ad21e --- /dev/null +++ b/Assets/04_Models/Objects/Trash/CrumbledPaper.fbx.meta @@ -0,0 +1,125 @@ +fileFormatVersion: 2 +guid: ff11b9d539f5b5240ad50ad686ae80c2 +ModelImporter: + serializedVersion: 24200 + internalIDToNameTable: [] + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: papersheets + second: {fileID: 2100000, guid: 51ce456bcf9711940a32511568c8a4e2, type: 2} + - first: + type: UnityEngine:Texture2D + assembly: UnityEngine.CoreModule + name: paper_sketches + second: {fileID: 2800000, guid: 3cf7e4b367077f047a2ff7dcc88e7dc3, type: 3} + - first: + type: UnityEngine:Texture2D + assembly: UnityEngine.CoreModule + name: papersheets_Normal + second: {fileID: 2800000, guid: 45e085b01ac9d734d9cee78fb09b9676, type: 3} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + generateMeshLods: 0 + meshLodGenerationFlags: 0 + maximumMeshLod: -1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Trash/Materials.meta b/Assets/04_Models/Objects/Trash/Materials.meta new file mode 100644 index 00000000..9ca4add6 --- /dev/null +++ b/Assets/04_Models/Objects/Trash/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 67e831203af89514b97250224e9ac7af +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Trash/Materials/papersheets.mat b/Assets/04_Models/Objects/Trash/Materials/papersheets.mat new file mode 100644 index 00000000..05bb615f --- /dev/null +++ b/Assets/04_Models/Objects/Trash/Materials/papersheets.mat @@ -0,0 +1,140 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2993478500133361681 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: papersheets + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _NORMALMAP + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 3cf7e4b367077f047a2ff7dcc88e7dc3, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 2800000, guid: 45e085b01ac9d734d9cee78fb09b9676, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 3cf7e4b367077f047a2ff7dcc88e7dc3, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.2 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _UVSec: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.9063317, g: 0.9063317, b: 0.9063317, a: 1} + - _Color: {r: 0.9063317, g: 0.9063317, b: 0.9063317, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/04_Models/Objects/Trash/Materials/papersheets.mat.meta b/Assets/04_Models/Objects/Trash/Materials/papersheets.mat.meta new file mode 100644 index 00000000..f79bda5c --- /dev/null +++ b/Assets/04_Models/Objects/Trash/Materials/papersheets.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 51ce456bcf9711940a32511568c8a4e2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Trash/Prefabs.meta b/Assets/04_Models/Objects/Trash/Prefabs.meta new file mode 100644 index 00000000..b4f80652 --- /dev/null +++ b/Assets/04_Models/Objects/Trash/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 743afced418312740819b50a3c96e35b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Trash/Prefabs/Trash.prefab b/Assets/04_Models/Objects/Trash/Prefabs/Trash.prefab new file mode 100644 index 00000000..a73670fd --- /dev/null +++ b/Assets/04_Models/Objects/Trash/Prefabs/Trash.prefab @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d27fcea49a3c8202bc37e24526b45704ab750c74668581e470430c88c5455f92 +size 5061 diff --git a/Assets/04_Models/Objects/Trash/Prefabs/Trash.prefab.meta b/Assets/04_Models/Objects/Trash/Prefabs/Trash.prefab.meta new file mode 100644 index 00000000..05250637 --- /dev/null +++ b/Assets/04_Models/Objects/Trash/Prefabs/Trash.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2659fa13ce1dee140906102e44a9f420 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Trash/Textures.meta b/Assets/04_Models/Objects/Trash/Textures.meta new file mode 100644 index 00000000..f98fc81c --- /dev/null +++ b/Assets/04_Models/Objects/Trash/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fc8a8ae573abb8f459b6cffb10df053f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Trash/Textures/paper_sketches.png b/Assets/04_Models/Objects/Trash/Textures/paper_sketches.png new file mode 100644 index 00000000..e820d4b1 --- /dev/null +++ b/Assets/04_Models/Objects/Trash/Textures/paper_sketches.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76ba3b8746c0164bce9efa7d5e42b0bda19a135d1c74c22cec886757ed7147bb +size 2762135 diff --git a/Assets/04_Models/Objects/Trash/Textures/paper_sketches.png.meta b/Assets/04_Models/Objects/Trash/Textures/paper_sketches.png.meta new file mode 100644 index 00000000..29726282 --- /dev/null +++ b/Assets/04_Models/Objects/Trash/Textures/paper_sketches.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: 3cf7e4b367077f047a2ff7dcc88e7dc3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04_Models/Objects/Trash/Textures/papersheets_Normal.png b/Assets/04_Models/Objects/Trash/Textures/papersheets_Normal.png new file mode 100644 index 00000000..e0832883 --- /dev/null +++ b/Assets/04_Models/Objects/Trash/Textures/papersheets_Normal.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93db3e9a87041e009c4f378c763ab063216c90042aaae9a6db9257708ec924e0 +size 4261361 diff --git a/Assets/04_Models/Objects/Trash/Textures/papersheets_Normal.png.meta b/Assets/04_Models/Objects/Trash/Textures/papersheets_Normal.png.meta new file mode 100644 index 00000000..54e9b115 --- /dev/null +++ b/Assets/04_Models/Objects/Trash/Textures/papersheets_Normal.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: 45e085b01ac9d734d9cee78fb09b9676 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/05_Textures/Icon.meta b/Assets/05_Textures/Icon.meta new file mode 100644 index 00000000..0dbc77b5 --- /dev/null +++ b/Assets/05_Textures/Icon.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 21d434067d4dd0c4d91d84a2e345c52c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/05_Textures/Icon/Items.meta b/Assets/05_Textures/Icon/Items.meta new file mode 100644 index 00000000..12064326 --- /dev/null +++ b/Assets/05_Textures/Icon/Items.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ceb117588ce61f741a0012e947579b3d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/05_Textures/Icon/Items/Coin_Pickup.png b/Assets/05_Textures/Icon/Items/Coin_Pickup.png new file mode 100644 index 00000000..24ad3dd7 --- /dev/null +++ b/Assets/05_Textures/Icon/Items/Coin_Pickup.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d5e87df863bd067e245b132a9d1e94a898241759f209a2de46376985c43e838 +size 16359 diff --git a/Assets/05_Textures/Icon/Items/Coin_Pickup.png.meta b/Assets/05_Textures/Icon/Items/Coin_Pickup.png.meta new file mode 100644 index 00000000..667d4ea2 --- /dev/null +++ b/Assets/05_Textures/Icon/Items/Coin_Pickup.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: 34e8933e28ced1c469fd2ec8aaa43751 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/05_Textures/Icon/Items/Compass.png b/Assets/05_Textures/Icon/Items/Compass.png new file mode 100644 index 00000000..16a880a8 --- /dev/null +++ b/Assets/05_Textures/Icon/Items/Compass.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:387a21ced612f0940042f772cad6affd21b23461b639aa35a081b79374fc7e6b +size 30326 diff --git a/Assets/05_Textures/Icon/Items/Compass.png.meta b/Assets/05_Textures/Icon/Items/Compass.png.meta new file mode 100644 index 00000000..a3d7055b --- /dev/null +++ b/Assets/05_Textures/Icon/Items/Compass.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: f39bc234c71b41c4eb9cac7506921bf2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/05_Textures/Icon/Items/CrumbledPaper.png b/Assets/05_Textures/Icon/Items/CrumbledPaper.png new file mode 100644 index 00000000..4f5fea13 --- /dev/null +++ b/Assets/05_Textures/Icon/Items/CrumbledPaper.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1fbadb180377187291f96de43b88efb4960a292fa46459a328259f6bebe01e86 +size 53511 diff --git a/Assets/05_Textures/Icon/Items/CrumbledPaper.png.meta b/Assets/05_Textures/Icon/Items/CrumbledPaper.png.meta new file mode 100644 index 00000000..07efdc45 --- /dev/null +++ b/Assets/05_Textures/Icon/Items/CrumbledPaper.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: 2dffb8e9e1330554f9073f94341d710c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/05_Textures/Icon/Items/Fish.png b/Assets/05_Textures/Icon/Items/Fish.png new file mode 100644 index 00000000..e4d1eaf9 --- /dev/null +++ b/Assets/05_Textures/Icon/Items/Fish.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7fd3c0c39e3a8b0e36be018c688d1768b87252f64c5b8f61e515400b57722325 +size 47598 diff --git a/Assets/05_Textures/Icon/Items/Fish.png.meta b/Assets/05_Textures/Icon/Items/Fish.png.meta new file mode 100644 index 00000000..6c517304 --- /dev/null +++ b/Assets/05_Textures/Icon/Items/Fish.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: 047f00921d656a94f9656bc8cdad3ff4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/05_Textures/Icon/Items/star_piece.png b/Assets/05_Textures/Icon/Items/star_piece.png new file mode 100644 index 00000000..01685193 --- /dev/null +++ b/Assets/05_Textures/Icon/Items/star_piece.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85ee9df41e2ce8571c298045be50637607b0bab5e78b15761183ecabbbb341b8 +size 5602 diff --git a/Assets/05_Textures/Icon/Items/star_piece.png.meta b/Assets/05_Textures/Icon/Items/star_piece.png.meta new file mode 100644 index 00000000..61e7e5e0 --- /dev/null +++ b/Assets/05_Textures/Icon/Items/star_piece.png.meta @@ -0,0 +1,156 @@ +fileFormatVersion: 2 +guid: 25dbddb542f32874ab794aa846d8dd9d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: WindowsStoreApps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/07_Data/Character/Fairy.asset b/Assets/07_Data/Character/Fairy.asset index c89fcabd..c9e54b01 100644 --- a/Assets/07_Data/Character/Fairy.asset +++ b/Assets/07_Data/Character/Fairy.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:77350c7e0b867242c416868125762ee83841eb1c6b603656e5f4ca6cceeed685 +oid sha256:6f35deb24c21afd8bda3a420b2678ecc747dddb33142456786ba7d4d2027c049 size 551 diff --git a/Assets/My project/Fonts/Pretendard-Black SDF.asset b/Assets/My project/Fonts/Pretendard-Black SDF.asset index 01c41b88..e69de29b 100644 --- a/Assets/My project/Fonts/Pretendard-Black SDF.asset +++ b/Assets/My project/Fonts/Pretendard-Black SDF.asset @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ccacb1210dcf44733789ba71297189031135924fe6ed6583eeb1e00733943c15 -size 41394890 diff --git a/Assets/My project/Inventory/Prefabs/InventoryMiniUI.prefab.meta b/Assets/My project/Inventory/Prefabs/InventoryMiniUI.prefab.meta index 4ff5fb16..02c69322 100644 --- a/Assets/My project/Inventory/Prefabs/InventoryMiniUI.prefab.meta +++ b/Assets/My project/Inventory/Prefabs/InventoryMiniUI.prefab.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b48b2192c45050d4592c9211d7817e28 +guid: f0db9ef8810ed2e4fad874ce8a39d817 PrefabImporter: externalObjects: {} userData: diff --git a/Assets/My project/Inventory/Scripts/InventoryItemType.cs.meta b/Assets/My project/Inventory/Scripts/InventoryItemType.cs.meta index 709ea638..07801a9b 100644 --- a/Assets/My project/Inventory/Scripts/InventoryItemType.cs.meta +++ b/Assets/My project/Inventory/Scripts/InventoryItemType.cs.meta @@ -1,2 +1,2 @@ fileFormatVersion: 2 -guid: 9fc654a578c829244936abec2cf40091 \ No newline at end of file +guid: a363e83699ebc374c8aab5d2859976cd \ No newline at end of file diff --git a/Assets/My project/Inventory/Scripts/InventoryManager.cs b/Assets/My project/Inventory/Scripts/InventoryManager.cs index 2d5c0c14..e2cb36c8 100644 --- a/Assets/My project/Inventory/Scripts/InventoryManager.cs +++ b/Assets/My project/Inventory/Scripts/InventoryManager.cs @@ -3,6 +3,33 @@ using UnityEngine; using UnityEngine.Events; +/// +/// 인벤토리에서 관리할 아이템 종류입니다. +/// 아이템을 추가하려면 여기에 enum 값을 추가하고, InventoryManager의 itemDefinitions에도 데이터를 추가하세요. +/// +public enum InventoryItemType +{ + Fish, + OldCompass, + Trash, + Bottle, + MemoryPiece +} + +/// +/// 인벤토리 UI 필터/정렬에 사용할 간단한 카테고리입니다. +/// +public enum InventoryItemCategory +{ + All, + Consumable, + Quest, + Collectible, + KeyItem, + Material, + Other +} + [Serializable] public class InventoryItemStack { @@ -11,40 +38,212 @@ public class InventoryItemStack } [Serializable] -public class InventoryItemChangedEvent : UnityEvent +public class InventoryItemDefinition { + [Header("Identity")] + public InventoryItemType itemType; + public string displayName; + [TextArea(2, 5)] public string description; + [TextArea(1, 3)] public string goalHint; + + [Header("Visuals")] + public Sprite icon; + public Sprite slotBackground; + public bool importantItem; + + [Header("Rules")] + public InventoryItemCategory category = InventoryItemCategory.Other; + [Tooltip("0 이하이면 InventoryManager의 기본 최대 소지 수량을 사용합니다.")] + public int maxCount = 99; + public bool usable = false; + public bool consumeOnUse = true; + public bool requireUseConfirmation = false; + public string useLabel = "사용"; + public string useSuccessMessage; + public string useFailMessage; + + [Header("Audio")] + public AudioClip acquisitionClip; + public AudioClip useClip; + + [Header("Slot Display Override")] + public bool overrideSlotDisplaySettings = false; + public bool hideWhenZero = false; + public bool dimWhenZero = true; + [Range(0f, 1f)] public float zeroAlpha = 0.35f; + [Range(0f, 1f)] public float ownedAlpha = 1f; + + public string SafeDisplayName => string.IsNullOrWhiteSpace(displayName) ? itemType.ToString() : displayName; } +[Serializable] +public class InventoryLogEntry +{ + public InventoryItemType itemType; + public int amount; + public string action; + public string displayName; + public string timeText; + + public InventoryLogEntry() { } + + public InventoryLogEntry(InventoryItemType itemType, int amount, string action, string displayName) + { + this.itemType = itemType; + this.amount = amount; + this.action = action; + this.displayName = displayName; + timeText = DateTime.Now.ToString("HH:mm:ss"); + } + + public override string ToString() + { + string amountText = amount > 0 ? $" x{amount}" : string.Empty; + return $"[{timeText}] {displayName}{amountText} {action}"; + } +} + +[Serializable] public class InventoryItemChangedEvent : UnityEvent { } +[Serializable] public class InventoryItemAmountEvent : UnityEvent { } +[Serializable] public class InventoryStringEvent : UnityEvent { } +[Serializable] public class InventoryProgressEvent : UnityEvent { } + /// /// 실제 아이템 개수를 관리하는 중심 스크립트입니다. -/// UI를 직접 수정하지 않고, 아이템 개수 변경 이벤트만 알려줍니다. +/// 기능: 싱글톤, 저장/불러오기, 최대 소지 수량, 사용, 부족 안내, 획득 로그, 기억의 조각 진행도 이벤트. /// [DisallowMultipleComponent] public class InventoryManager : MonoBehaviour { + public static InventoryManager Instance { get; private set; } + + [Header("Singleton")] + [SerializeField] private bool useSingleton = true; + [SerializeField] private bool dontDestroyOnLoad = true; + [SerializeField] private bool destroyDuplicateManagers = true; + [Header("Initial Items")] [SerializeField] private List initialItems = new List(); + [Header("Item Definitions")] + [SerializeField] private List itemDefinitions = new List() + { + new InventoryItemDefinition { itemType = InventoryItemType.Fish, displayName = "생선", description = "고양이 합창단이 좋아합니다.", goalHint = "고양이에게 줄 수 있습니다.", category = InventoryItemCategory.Consumable, maxCount = 99, usable = true, consumeOnUse = true, useSuccessMessage = "생선을 사용했습니다." }, + new InventoryItemDefinition { itemType = InventoryItemType.OldCompass, displayName = "낡은 나침반", description = "미로에서 길을 찾는 데 도움이 됩니다.", goalHint = "미로에서 힌트를 볼 때 필요합니다.", category = InventoryItemCategory.KeyItem, maxCount = 1, usable = true, consumeOnUse = false, importantItem = true, useSuccessMessage = "나침반이 방향을 가리킵니다." }, + new InventoryItemDefinition { itemType = InventoryItemType.Trash, displayName = "쓰레기", description = "낚시터를 정화하는 데 필요합니다.", goalHint = "정화 장치에 넣을 수 있습니다.", category = InventoryItemCategory.Material, maxCount = 99, usable = true, consumeOnUse = true, useSuccessMessage = "쓰레기를 사용했습니다." }, + new InventoryItemDefinition { itemType = InventoryItemType.Bottle, displayName = "마법병", description = "바다 속에서 발견한 수상한 병입니다.", goalHint = "특정 이벤트에서 사용할 수 있습니다.", category = InventoryItemCategory.KeyItem, maxCount = 1, usable = true, consumeOnUse = false, importantItem = true, requireUseConfirmation = true, useSuccessMessage = "마법병을 사용했습니다." }, + new InventoryItemDefinition { itemType = InventoryItemType.MemoryPiece, displayName = "기억의 조각", description = "제페토를 구출하기 위한 중요한 조각입니다.", goalHint = "모든 조각을 모으면 중요한 이벤트가 열립니다.", category = InventoryItemCategory.Quest, maxCount = 5, usable = false, consumeOnUse = false, importantItem = true } + }; + + [Header("Limits")] + [Tooltip("0 이하이면 기본 최대 수량 제한을 사용하지 않습니다. 아이템 정의의 maxCount가 있으면 그것이 우선됩니다.")] + [SerializeField] private int defaultMaxCount = 999; + + [Header("Memory Piece Progress")] + [SerializeField] private InventoryItemType memoryPieceItemType = InventoryItemType.MemoryPiece; + [Min(1)] [SerializeField] private int memoryPieceTargetCount = 5; + + [Header("Save / Load")] + [SerializeField] private bool loadOnAwake = true; + [SerializeField] private bool saveOnChange = true; + [Tooltip("Persistent Pickup/Reward 완료 상태는 아이템 수량 자동 저장을 꺼도 저장하는 것을 권장합니다.")] + [SerializeField] private bool forceSavePersistentState = true; + [SerializeField] private string saveKey = "Inventory_SaveData"; + + [Header("Recent Log")] + [SerializeField] private bool keepRecentLogs = true; + [SerializeField] private int maxRecentLogCount = 5; + [Header("Events")] public InventoryItemChangedEvent onItemCountChanged; + public InventoryItemAmountEvent onItemAdded; + public InventoryItemAmountEvent onItemRemoved; + public InventoryItemChangedEvent onItemUsed; + public InventoryStringEvent onMessageRequested; + public InventoryProgressEvent onMemoryPieceProgressChanged; + public UnityEvent onMemoryPieceCompleted; public UnityEvent onInventoryChanged; + [Header("UI")] + [SerializeField] private InventoryUI _inventoryUI; + [Header("Debug")] [SerializeField] private bool showDebugLog = true; private readonly Dictionary itemCounts = new Dictionary(); + private readonly HashSet consumedPersistentKeys = new HashSet(); + private readonly List recentLogs = new List(); public event Action ItemCountChanged; + public event Action ItemAdded; + public event Action ItemRemoved; + public event Action ItemUsed; public event Action InventoryChanged; + public event Action MessageRequested; + public event Action LogAdded; + public event Action MemoryPieceProgressChanged; + public event Action MemoryPieceCompleted; + + private bool memoryPieceCompletedNotified; + + public int MemoryPieceTargetCount => memoryPieceTargetCount; + public InventoryItemType MemoryPieceItemType => memoryPieceItemType; private void Awake() { + if (useSingleton) + { + if (Instance != null && Instance != this) + { + if (showDebugLog) + Debug.LogWarning($"[InventoryManager] 중복 InventoryManager 발견: {name}"); + + if (destroyDuplicateManagers) + { + Destroy(gameObject); + return; + } + } + else + { + Instance = this; + + if (dontDestroyOnLoad) + DontDestroyOnLoad(gameObject); + } + } + + EnsureItemDefinitions(); InitializeFromInspector(); + + if (loadOnAwake) + LoadInventory(false); } private void Start() { NotifyAllItemsChanged(); + NotifyMemoryPieceProgress(); + } + + private void EnsureItemDefinitions() + { + if (itemDefinitions == null) + itemDefinitions = new List(); + + foreach (InventoryItemType itemType in Enum.GetValues(typeof(InventoryItemType))) + { + if (GetDefinitionInternal(itemType) == null) + { + itemDefinitions.Add(new InventoryItemDefinition + { + itemType = itemType, + displayName = itemType.ToString(), + maxCount = defaultMaxCount, + category = InventoryItemCategory.Other + }); + } + } } private void InitializeFromInspector() @@ -60,7 +259,7 @@ private void InitializeFromInspector() if (stack == null) continue; - itemCounts[stack.itemType] = Mathf.Max(0, stack.count); + itemCounts[stack.itemType] = ClampCount(stack.itemType, stack.count); } } @@ -71,14 +270,43 @@ public void AddItem(InventoryItemType itemType) public void AddItem(InventoryItemType itemType, int amount) { - if (amount <= 0) - return; + AddItemAndGetAddedAmount(itemType, amount); + } - int newCount = GetItemCount(itemType) + amount; - SetItemCount(itemType, newCount); + /// + /// 실제로 추가된 개수를 반환합니다. 최대 소지 수량에 막히면 요청량보다 적을 수 있습니다. + /// + public int AddItemAndGetAddedAmount(InventoryItemType itemType, int amount) + { + if (amount <= 0) + return 0; + + int previousCount = GetItemCount(itemType); + int newCount = ClampCount(itemType, previousCount + amount); + int addedAmount = Mathf.Max(0, newCount - previousCount); + + if (addedAmount <= 0) + { + RequestMessage($"{GetDisplayName(itemType)}은(는) 더 이상 가질 수 없습니다."); + + if (showDebugLog) + Debug.Log($"[InventoryManager] {itemType} 최대 소지 수량 도달: {previousCount}"); + + return 0; + } + + itemCounts[itemType] = newCount; + NotifyItemChanged(itemType, newCount); + NotifyItemAdded(itemType, addedAmount, newCount); + AddLog(itemType, addedAmount, "획득"); + + if (saveOnChange) + SaveInventory(); if (showDebugLog) - Debug.Log($"[InventoryManager] {itemType} +{amount} => {newCount}"); + Debug.Log($"[InventoryManager] {itemType} +{addedAmount} => {newCount}"); + + return addedAmount; } public bool RemoveItem(InventoryItemType itemType) @@ -95,19 +323,84 @@ public bool RemoveItem(InventoryItemType itemType, int amount) if (current < amount) { + RequestMessage(GetInsufficientMessage(itemType, amount)); + if (showDebugLog) Debug.LogWarning($"[InventoryManager] {itemType} 부족: 현재 {current}, 필요 {amount}"); return false; } - SetItemCount(itemType, current - amount); + int newCount = current - amount; + itemCounts[itemType] = newCount; + NotifyItemChanged(itemType, newCount); + NotifyItemRemoved(itemType, amount, newCount); + AddLog(itemType, amount, "소모"); + + if (saveOnChange) + SaveInventory(); + + return true; + } + + public bool UseItem(InventoryItemType itemType) + { + return UseItem(itemType, 1); + } + + public bool UseItem(InventoryItemType itemType, int amount) + { + InventoryItemDefinition definition = GetDefinition(itemType); + bool consume = definition == null || definition.consumeOnUse; + return TryUseItem(itemType, amount, consume, true, true); + } + + /// + /// 아이템을 사용합니다. 실제 게임 효과는 성공 이벤트나 외부 스크립트에서 처리하세요. + /// consume=false이면 보유 여부만 확인하고 개수는 줄이지 않습니다. + /// showMessages=false이면 부족/성공 안내를 표시하지 않습니다. + /// + public bool TryUseItem(InventoryItemType itemType, int amount, bool consume, bool showMessages = true, bool addUseLog = true) + { + amount = Mathf.Max(1, amount); + + if (!HasItem(itemType, amount)) + { + if (showMessages) + RequestMessage(GetInsufficientMessage(itemType, amount)); + + return false; + } + + if (consume && !RemoveItem(itemType, amount)) + return false; + + ItemUsed?.Invoke(itemType, GetItemCount(itemType)); + onItemUsed?.Invoke(itemType, GetItemCount(itemType)); + + // consume=true인 경우 RemoveItem에서 이미 "소모" 로그가 남습니다. + // consume=false인 빠른 사용(예: 나침반 확인)은 별도 "사용" 로그를 남깁니다. + if (addUseLog && !consume) + AddLog(itemType, amount, "사용"); + + InventoryItemDefinition definition = GetDefinition(itemType); + if (showMessages) + { + string message = definition != null && !string.IsNullOrWhiteSpace(definition.useSuccessMessage) + ? definition.useSuccessMessage + : $"{GetDisplayName(itemType)}을(를) 사용했습니다."; + RequestMessage(message); + } + + if (saveOnChange) + SaveInventory(); + return true; } public void SetItemCount(InventoryItemType itemType, int count) { - int clampedCount = Mathf.Max(0, count); + int clampedCount = ClampCount(itemType, count); int previousCount = GetItemCount(itemType); if (previousCount == clampedCount) @@ -115,6 +408,9 @@ public void SetItemCount(InventoryItemType itemType, int count) itemCounts[itemType] = clampedCount; NotifyItemChanged(itemType, clampedCount); + + if (saveOnChange) + SaveInventory(); } public int GetItemCount(InventoryItemType itemType) @@ -135,17 +431,331 @@ public bool HasItem(InventoryItemType itemType, int requiredAmount) return GetItemCount(itemType) >= Mathf.Max(1, requiredAmount); } + public int GetMaxCount(InventoryItemType itemType) + { + InventoryItemDefinition definition = GetDefinition(itemType); + + if (definition != null && definition.maxCount > 0) + return definition.maxCount; + + return Mathf.Max(0, defaultMaxCount); + } + + /// + /// 현재 소지 수량과 최대 소지 수량을 기준으로 실제로 더 넣을 수 있는 개수를 반환합니다. + /// maxCount가 0 이하이면 제한 없음으로 취급합니다. + /// + public int GetAddableAmount(InventoryItemType itemType, int requestedAmount) + { + requestedAmount = Mathf.Max(0, requestedAmount); + if (requestedAmount <= 0) + return 0; + + int maxCount = GetMaxCount(itemType); + if (maxCount <= 0) + return requestedAmount; + + int current = GetItemCount(itemType); + return Mathf.Clamp(maxCount - current, 0, requestedAmount); + } + + public bool CanAddItem(InventoryItemType itemType, int amount = 1, bool requireFullAmount = false) + { + amount = Mathf.Max(1, amount); + int addableAmount = GetAddableAmount(itemType, amount); + return requireFullAmount ? addableAmount >= amount : addableAmount > 0; + } + + public InventoryItemDefinition GetDefinition(InventoryItemType itemType) + { + InventoryItemDefinition definition = GetDefinitionInternal(itemType); + return definition; + } + + private InventoryItemDefinition GetDefinitionInternal(InventoryItemType itemType) + { + if (itemDefinitions == null) + return null; + + for (int i = 0; i < itemDefinitions.Count; i++) + { + if (itemDefinitions[i] != null && itemDefinitions[i].itemType == itemType) + return itemDefinitions[i]; + } + + return null; + } + + public string GetDisplayName(InventoryItemType itemType) + { + InventoryItemDefinition definition = GetDefinition(itemType); + return definition != null && !string.IsNullOrWhiteSpace(definition.displayName) + ? definition.displayName + : itemType.ToString(); + } + + public string GetDescription(InventoryItemType itemType) + { + InventoryItemDefinition definition = GetDefinition(itemType); + return definition != null ? definition.description : string.Empty; + } + + public string GetGoalHint(InventoryItemType itemType) + { + InventoryItemDefinition definition = GetDefinition(itemType); + return definition != null ? definition.goalHint : string.Empty; + } + + public Sprite GetIcon(InventoryItemType itemType) + { + InventoryItemDefinition definition = GetDefinition(itemType); + return definition != null ? definition.icon : null; + } + + public Sprite GetSlotBackground(InventoryItemType itemType) + { + InventoryItemDefinition definition = GetDefinition(itemType); + return definition != null ? definition.slotBackground : null; + } + + public AudioClip GetAcquisitionClip(InventoryItemType itemType) + { + InventoryItemDefinition definition = GetDefinition(itemType); + return definition != null ? definition.acquisitionClip : null; + } + + public AudioClip GetUseClip(InventoryItemType itemType) + { + InventoryItemDefinition definition = GetDefinition(itemType); + return definition != null ? definition.useClip : null; + } + + public bool IsImportantItem(InventoryItemType itemType) + { + InventoryItemDefinition definition = GetDefinition(itemType); + return definition != null && definition.importantItem; + } + + public InventoryItemCategory GetCategory(InventoryItemType itemType) + { + InventoryItemDefinition definition = GetDefinition(itemType); + return definition != null ? definition.category : InventoryItemCategory.Other; + } + + public bool IsUsable(InventoryItemType itemType) + { + InventoryItemDefinition definition = GetDefinition(itemType); + return definition != null && definition.usable; + } + + public bool RequiresUseConfirmation(InventoryItemType itemType) + { + InventoryItemDefinition definition = GetDefinition(itemType); + return definition != null && definition.requireUseConfirmation; + } + + public string GetInsufficientMessage(InventoryItemType itemType, int requiredAmount) + { + int current = GetItemCount(itemType); + return $"{GetDisplayName(itemType)}이(가) 부족합니다. 필요: {Mathf.Max(1, requiredAmount)}개 / 현재: {current}개"; + } + + public IReadOnlyList GetRecentLogs() + { + return new List(recentLogs); + } + + public IReadOnlyDictionary GetAllItemCounts() + { + return new Dictionary(itemCounts); + } + public void ClearInventory() { foreach (InventoryItemType itemType in Enum.GetValues(typeof(InventoryItemType))) itemCounts[itemType] = 0; NotifyAllItemsChanged(); + NotifyMemoryPieceProgress(); + + if (saveOnChange) + SaveInventory(); } - public IReadOnlyDictionary GetAllItemCounts() + public void ResetToInitialItems() { - return itemCounts; + InitializeFromInspector(); + NotifyAllItemsChanged(); + NotifyMemoryPieceProgress(); + + if (saveOnChange) + SaveInventory(); + } + + public bool IsPersistentKeyConsumed(string key) + { + if (string.IsNullOrWhiteSpace(key)) + return false; + + return consumedPersistentKeys.Contains(key); + } + + public void MarkPersistentKeyConsumed(string key) + { + if (string.IsNullOrWhiteSpace(key)) + return; + + if (consumedPersistentKeys.Add(key) && (saveOnChange || forceSavePersistentState)) + SaveInventory(); + } + + public void ResetPersistentKey(string key) + { + if (string.IsNullOrWhiteSpace(key)) + return; + + if (consumedPersistentKeys.Remove(key) && (saveOnChange || forceSavePersistentState)) + SaveInventory(); + } + + public void RequestMessage(string message) + { + if (string.IsNullOrWhiteSpace(message)) + return; + + MessageRequested?.Invoke(message); + onMessageRequested?.Invoke(message); + + if (showDebugLog) + Debug.Log($"[InventoryManager] Message: {message}"); + } + + private void AddLog(InventoryItemType itemType, int amount, string action) + { + if (!keepRecentLogs) + return; + + InventoryLogEntry entry = new InventoryLogEntry(itemType, amount, action, GetDisplayName(itemType)); + recentLogs.Insert(0, entry); + + while (recentLogs.Count > Mathf.Max(1, maxRecentLogCount)) + recentLogs.RemoveAt(recentLogs.Count - 1); + + LogAdded?.Invoke(entry); + } + + public void SaveInventory() + { + InventorySaveData saveData = new InventorySaveData(); + + foreach (KeyValuePair pair in itemCounts) + { + saveData.items.Add(new InventorySavedItemCount + { + itemTypeName = pair.Key.ToString(), + count = Mathf.Max(0, pair.Value) + }); + } + + foreach (string key in consumedPersistentKeys) + saveData.consumedPersistentKeys.Add(key); + + string json = JsonUtility.ToJson(saveData); + PlayerPrefs.SetString(saveKey, json); + PlayerPrefs.Save(); + + if (showDebugLog) + Debug.Log("[InventoryManager] 인벤토리 저장 완료"); + } + + public bool LoadInventory() + { + return LoadInventory(true); + } + + private bool LoadInventory(bool notify) + { + if (!PlayerPrefs.HasKey(saveKey)) + return false; + + string json = PlayerPrefs.GetString(saveKey, string.Empty); + if (string.IsNullOrWhiteSpace(json)) + return false; + + InventorySaveData saveData; + + try + { + saveData = JsonUtility.FromJson(json); + } + catch (Exception exception) + { + Debug.LogWarning($"[InventoryManager] 저장 데이터 읽기 실패: {exception.Message}"); + return false; + } + + InitializeFromInspector(); + consumedPersistentKeys.Clear(); + + if (saveData != null) + { + for (int i = 0; i < saveData.items.Count; i++) + { + InventorySavedItemCount savedItem = saveData.items[i]; + if (savedItem == null || string.IsNullOrWhiteSpace(savedItem.itemTypeName)) + continue; + + if (Enum.TryParse(savedItem.itemTypeName, out InventoryItemType itemType)) + itemCounts[itemType] = ClampCount(itemType, savedItem.count); + } + + for (int i = 0; i < saveData.consumedPersistentKeys.Count; i++) + { + string key = saveData.consumedPersistentKeys[i]; + if (!string.IsNullOrWhiteSpace(key)) + consumedPersistentKeys.Add(key); + } + } + + if (notify) + { + NotifyAllItemsChanged(); + NotifyMemoryPieceProgress(); + } + + if (showDebugLog) + Debug.Log("[InventoryManager] 인벤토리 불러오기 완료"); + + return true; + } + + public void DeleteSavedInventory() + { + PlayerPrefs.DeleteKey(saveKey); + PlayerPrefs.Save(); + + consumedPersistentKeys.Clear(); + recentLogs.Clear(); + memoryPieceCompletedNotified = false; + + // ResetToInitialItems()를 호출하면 saveOnChange가 true일 때 삭제 직후 다시 저장 파일을 만들 수 있으므로 + // 여기서는 직접 초기화와 알림만 수행합니다. + InitializeFromInspector(); + NotifyAllItemsChanged(); + NotifyMemoryPieceProgress(); + + RequestMessage("인벤토리 저장 데이터를 삭제했습니다."); + } + + private int ClampCount(InventoryItemType itemType, int count) + { + int safeCount = Mathf.Max(0, count); + int maxCount = GetMaxCount(itemType); + + if (maxCount > 0) + safeCount = Mathf.Min(safeCount, maxCount); + + return safeCount; } private void NotifyItemChanged(InventoryItemType itemType, int count) @@ -155,6 +765,21 @@ private void NotifyItemChanged(InventoryItemType itemType, int count) onItemCountChanged?.Invoke(itemType, count); onInventoryChanged?.Invoke(); + + if (itemType == memoryPieceItemType) + NotifyMemoryPieceProgress(); + } + + private void NotifyItemAdded(InventoryItemType itemType, int addedAmount, int totalCount) + { + ItemAdded?.Invoke(itemType, addedAmount, totalCount); + onItemAdded?.Invoke(itemType, addedAmount, totalCount); + } + + private void NotifyItemRemoved(InventoryItemType itemType, int removedAmount, int totalCount) + { + ItemRemoved?.Invoke(itemType, removedAmount, totalCount); + onItemRemoved?.Invoke(itemType, removedAmount, totalCount); } private void NotifyAllItemsChanged() @@ -169,17 +794,91 @@ private void NotifyAllItemsChanged() onInventoryChanged?.Invoke(); } +<<<<<<< HEAD + private void NotifyMemoryPieceProgress() + { + int current = GetItemCount(memoryPieceItemType); + int target = Mathf.Max(1, memoryPieceTargetCount); + + MemoryPieceProgressChanged?.Invoke(current, target); + onMemoryPieceProgressChanged?.Invoke(current, target); + + if (current < target) + { + memoryPieceCompletedNotified = false; + return; + } + + if (!memoryPieceCompletedNotified) + { + memoryPieceCompletedNotified = true; + MemoryPieceCompleted?.Invoke(); + onMemoryPieceCompleted?.Invoke(); + } + } + + // 개발용 버튼/UnityEvent 연결용 메서드입니다. + public void DebugAddFish() => AddItem(InventoryItemType.Fish, 1); + public void DebugAddCompass() => AddItem(InventoryItemType.OldCompass, 1); + public void DebugAddTrash() => AddItem(InventoryItemType.Trash, 1); + public void DebugAddBottle() => AddItem(InventoryItemType.Bottle, 1); + public void DebugAddMemoryPiece() => AddItem(InventoryItemType.MemoryPiece, 1); + public void DebugClearInventory() => ClearInventory(); + public void DebugDeleteSave() => DeleteSavedInventory(); + +======= + public void InventoryUIToggle() + { + _inventoryUI.gameObject.SetActive(!_inventoryUI.gameObject.activeSelf); + } + +>>>>>>> 695f9b7a14841768ae101b4395af63c4ab86d096 #if UNITY_EDITOR private void OnValidate() { - if (initialItems == null) - return; + if (defaultMaxCount < 0) + defaultMaxCount = 0; - for (int i = 0; i < initialItems.Count; i++) + if (memoryPieceTargetCount < 1) + memoryPieceTargetCount = 1; + + if (maxRecentLogCount < 1) + maxRecentLogCount = 1; + + if (string.IsNullOrWhiteSpace(saveKey)) + saveKey = "Inventory_SaveData"; + + if (initialItems != null) { - if (initialItems[i] != null) - initialItems[i].count = Mathf.Max(0, initialItems[i].count); + for (int i = 0; i < initialItems.Count; i++) + { + if (initialItems[i] != null) + initialItems[i].count = Mathf.Max(0, initialItems[i].count); + } + } + + if (itemDefinitions != null) + { + for (int i = 0; i < itemDefinitions.Count; i++) + { + if (itemDefinitions[i] != null) + itemDefinitions[i].maxCount = Mathf.Max(0, itemDefinitions[i].maxCount); + } } } #endif + + [Serializable] + private class InventorySaveData + { + public List items = new List(); + public List consumedPersistentKeys = new List(); + } + + [Serializable] + private class InventorySavedItemCount + { + public string itemTypeName; + public int count; + } } diff --git a/Assets/My project/Inventory/Scripts/InventorySlotUI.cs b/Assets/My project/Inventory/Scripts/InventorySlotUI.cs index fbbd8b76..a8644876 100644 --- a/Assets/My project/Inventory/Scripts/InventorySlotUI.cs +++ b/Assets/My project/Inventory/Scripts/InventorySlotUI.cs @@ -4,12 +4,19 @@ using UnityEngine.EventSystems; using UnityEngine.UI; +public enum InventorySlotClickMode +{ + None, + ShowDetail, + RequestUse +} + /// /// 인벤토리 슬롯 하나를 담당하는 UI 스크립트입니다. -/// FishSlot, CompassSlot, TrashSlot, BottleSlot 등에 각각 붙입니다. +/// VR 포인터 Hover/Select, NEW 배지, 0개 흐림 표시, 중요 아이템 강조, 상세보기/사용 클릭을 지원합니다. /// [DisallowMultipleComponent] -public class InventorySlotUI : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, ISelectHandler, IDeselectHandler +public class InventorySlotUI : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler, ISelectHandler, IDeselectHandler, ISubmitHandler { [Header("Item")] [SerializeField] private InventoryItemType itemType; @@ -20,30 +27,75 @@ public class InventorySlotUI : MonoBehaviour, IPointerEnterHandler, IPointerExit [SerializeField] private TMP_Text countText; [SerializeField] private GameObject newBadge; [SerializeField] private CanvasGroup canvasGroup; + [SerializeField] private GameObject importantGlowObject; + [SerializeField] private GameObject filteredOutOverlay; - [Header("Tooltip")] + [Header("Tooltip / Parent UI")] [SerializeField] private InventoryTooltipUI tooltipUI; + [SerializeField] private InventoryUI inventoryUI; + + [Header("Click")] + [SerializeField] private InventorySlotClickMode clickMode = InventorySlotClickMode.ShowDetail; [Header("Settings")] + [Tooltip("VR에서는 false 권장. 슬롯이 사라지면 Ray 조작 위치가 바뀌어 불편할 수 있습니다.")] [SerializeField] private bool hideWhenZero = false; [SerializeField] private bool dimWhenZero = true; [SerializeField] private float zeroAlpha = 0.35f; [SerializeField] private float ownedAlpha = 1f; + [SerializeField] private float filteredAlpha = 0.15f; + [SerializeField] private bool showCountWhenZero = true; + [SerializeField] private bool showMaxCount = false; [SerializeField] private float newBadgeShowTime = 1.2f; + [Header("Hover Effect")] + [SerializeField] private bool useHoverScale = true; + [SerializeField] private float hoverScale = 1.08f; + [SerializeField] private bool bringToFrontOnHover = true; + private int currentCount; + private int currentMaxCount; + private bool filteredOut; private Coroutine newBadgeRoutine; + private Vector3 originalScale; + private InventoryItemDefinition definition; public InventoryItemType ItemType => itemType; public int CurrentCount => currentCount; + public InventoryItemCategory Category => definition != null ? definition.category : InventoryItemCategory.Other; private void Awake() { + originalScale = transform.localScale; + if (canvasGroup == null) canvasGroup = GetComponent(); + if (slotBackground == null) + slotBackground = GetComponent(); + + if (inventoryUI == null) + inventoryUI = GetComponentInParent(); + + if (tooltipUI == null) + tooltipUI = GetComponentInParent(); + if (newBadge != null) newBadge.SetActive(false); + + UpdateVisualState(); + } + + private void OnDisable() + { + HideNewBadge(); + HideTooltip(); + ResetHoverVisual(); + } + + public void SetInventoryUI(InventoryUI ui) + { + inventoryUI = ui; } public void SetItemType(InventoryItemType newItemType) @@ -51,10 +103,52 @@ public void SetItemType(InventoryItemType newItemType) itemType = newItemType; } + public void SetDefinition(InventoryItemDefinition newDefinition) + { + definition = newDefinition; + + if (definition == null) + { + UpdateVisualState(); + return; + } + + if (itemIcon != null) + { + itemIcon.sprite = definition.icon; + itemIcon.enabled = definition.icon != null; + } + + if (slotBackground != null && definition.slotBackground != null) + { + slotBackground.sprite = definition.slotBackground; + slotBackground.enabled = true; + } + + if (definition.overrideSlotDisplaySettings) + { + hideWhenZero = definition.hideWhenZero; + dimWhenZero = definition.dimWhenZero; + zeroAlpha = definition.zeroAlpha; + ownedAlpha = definition.ownedAlpha; + } + + if (importantGlowObject != null) + importantGlowObject.SetActive(definition.importantItem); + + UpdateVisualState(); + } + public void SetCount(int count, bool showNewBadge) + { + SetCount(count, showNewBadge, currentMaxCount); + } + + public void SetCount(int count, bool showNewBadge, int maxCount) { int previousCount = currentCount; currentCount = Mathf.Max(0, count); + currentMaxCount = Mathf.Max(0, maxCount); UpdateVisualState(); @@ -80,6 +174,23 @@ public void SetSlotBackground(Sprite sprite) slotBackground.enabled = sprite != null; } + public void SetFilteredOut(bool value) + { + filteredOut = value; + + if (filteredOutOverlay != null) + filteredOutOverlay.SetActive(value); + + UpdateVisualState(); + } + + public void SetHoverSettings(bool useScale, float scale, bool bringToFront) + { + useHoverScale = useScale; + hoverScale = Mathf.Max(1f, scale); + bringToFrontOnHover = bringToFront; + } + public void ShowNewBadge() { if (newBadge == null) @@ -106,7 +217,7 @@ public void HideNewBadge() private IEnumerator NewBadgeRoutine() { newBadge.SetActive(true); - yield return new WaitForSeconds(newBadgeShowTime); + yield return new WaitForSecondsRealtime(newBadgeShowTime); newBadge.SetActive(false); newBadgeRoutine = null; } @@ -116,39 +227,108 @@ private void UpdateVisualState() bool hasItem = currentCount > 0; if (countText != null) - countText.text = $"x{currentCount}"; + { + if (!showCountWhenZero && currentCount <= 0) + countText.text = string.Empty; + else if (showMaxCount && currentMaxCount > 0) + countText.text = $"x{currentCount}/{currentMaxCount}"; + else + countText.text = $"x{currentCount}"; + } if (hideWhenZero) gameObject.SetActive(hasItem); if (canvasGroup != null && dimWhenZero) - canvasGroup.alpha = hasItem ? ownedAlpha : zeroAlpha; + { + float targetAlpha = hasItem ? ownedAlpha : zeroAlpha; + if (filteredOut) + targetAlpha = Mathf.Min(targetAlpha, filteredAlpha); + + canvasGroup.alpha = targetAlpha; + canvasGroup.interactable = !filteredOut; + canvasGroup.blocksRaycasts = !filteredOut; + } } public void OnPointerEnter(PointerEventData eventData) { + ApplyHoverVisual(); ShowTooltip(); } public void OnPointerExit(PointerEventData eventData) { + ResetHoverVisual(); HideTooltip(); } + public void OnPointerClick(PointerEventData eventData) + { + ActivateSlot(); + } + public void OnSelect(BaseEventData eventData) { + ApplyHoverVisual(); ShowTooltip(); } public void OnDeselect(BaseEventData eventData) { + ResetHoverVisual(); HideTooltip(); } + public void OnSubmit(BaseEventData eventData) + { + ActivateSlot(); + } + + private void ActivateSlot() + { + if (filteredOut) + return; + + if (inventoryUI == null) + inventoryUI = GetComponentInParent(); + + if (inventoryUI == null) + return; + + switch (clickMode) + { + case InventorySlotClickMode.ShowDetail: + inventoryUI.ShowItemDetail(itemType); + break; + case InventorySlotClickMode.RequestUse: + inventoryUI.RequestUseItem(itemType, 1); + break; + } + } + + private void ApplyHoverVisual() + { + if (bringToFrontOnHover) + transform.SetAsLastSibling(); + + if (useHoverScale) + transform.localScale = originalScale * hoverScale; + } + + private void ResetHoverVisual() + { + if (useHoverScale) + transform.localScale = originalScale; + } + public void ShowTooltip() { + if (tooltipUI == null) + tooltipUI = GetComponentInParent(); + if (tooltipUI != null) - tooltipUI.ShowTooltip(itemType, currentCount); + tooltipUI.ShowTooltip(itemType, currentCount, currentMaxCount); } public void HideTooltip() diff --git a/Assets/My project/Inventory/Scripts/InventoryTooltipUI.cs b/Assets/My project/Inventory/Scripts/InventoryTooltipUI.cs index ef8f7dce..79c749ba 100644 --- a/Assets/My project/Inventory/Scripts/InventoryTooltipUI.cs +++ b/Assets/My project/Inventory/Scripts/InventoryTooltipUI.cs @@ -1,19 +1,10 @@ -using System; using System.Collections.Generic; using TMPro; using UnityEngine; -[Serializable] -public class InventoryTooltipEntry -{ - public InventoryItemType itemType; - public string displayName; - [TextArea(2, 4)] public string description; -} - /// /// 아이템 슬롯에 마우스/VR 포인터가 올라갔을 때 간단한 설명을 표시합니다. -/// InventorySlotUI에서 ShowTooltip, HideTooltip을 호출합니다. +/// InventoryManager의 ItemDefinition 데이터를 우선 사용합니다. /// [DisallowMultipleComponent] public class InventoryTooltipUI : MonoBehaviour @@ -23,39 +14,68 @@ public class InventoryTooltipUI : MonoBehaviour [SerializeField] private TMP_Text titleText; [SerializeField] private TMP_Text descriptionText; [SerializeField] private TMP_Text countText; + [SerializeField] private TMP_Text goalHintText; + [SerializeField] private TMP_Text useHintText; - [Header("Entries")] - [SerializeField] private List entries = new List() - { - new InventoryTooltipEntry { itemType = InventoryItemType.Fish, displayName = "생선", description = "고양이 합창단이 좋아합니다." }, - new InventoryTooltipEntry { itemType = InventoryItemType.OldCompass, displayName = "낡은 나침반", description = "미로에서 길을 찾는 데 도움이 됩니다." }, - new InventoryTooltipEntry { itemType = InventoryItemType.Trash, displayName = "쓰레기", description = "낚시터를 정화하는 데 필요합니다." }, - new InventoryTooltipEntry { itemType = InventoryItemType.Bottle, displayName = "마법병", description = "바다 속에서 발견한 수상한 병입니다." }, - new InventoryTooltipEntry { itemType = InventoryItemType.MemoryPiece, displayName = "기억의 조각", description = "제페토를 구출하기 위한 중요한 조각입니다." } - }; + [Header("Reference")] + [SerializeField] private InventoryManager inventoryManager; + [SerializeField] private bool autoFindManager = true; private void Awake() { + ResolveManager(); HideTooltip(); } public void ShowTooltip(InventoryItemType itemType, int count) { - InventoryTooltipEntry entry = FindEntry(itemType); + int maxCount = ResolveManager() != null ? inventoryManager.GetMaxCount(itemType) : 0; + ShowTooltip(itemType, count, maxCount); + } + + public void ShowTooltip(InventoryItemType itemType, int count, int maxCount) + { + ResolveManager(); + + string displayName = itemType.ToString(); + string description = string.Empty; + string goalHint = string.Empty; + string useHint = string.Empty; + + InventoryItemDefinition definition = inventoryManager != null ? inventoryManager.GetDefinition(itemType) : null; + if (definition != null) + { + displayName = definition.SafeDisplayName; + description = definition.description; + goalHint = definition.goalHint; + + if (definition.usable) + useHint = string.IsNullOrWhiteSpace(definition.useLabel) ? "사용 가능" : definition.useLabel; + } if (tooltipPanel != null) tooltipPanel.SetActive(true); if (titleText != null) - titleText.text = entry != null && !string.IsNullOrWhiteSpace(entry.displayName) - ? entry.displayName - : itemType.ToString(); + titleText.text = displayName; if (descriptionText != null) - descriptionText.text = entry != null ? entry.description : string.Empty; + descriptionText.text = description; if (countText != null) - countText.text = $"보유: x{Mathf.Max(0, count)}"; + countText.text = maxCount > 0 ? $"보유: x{Mathf.Max(0, count)} / {maxCount}" : $"보유: x{Mathf.Max(0, count)}"; + + if (goalHintText != null) + { + goalHintText.text = goalHint; + goalHintText.gameObject.SetActive(!string.IsNullOrWhiteSpace(goalHint)); + } + + if (useHintText != null) + { + useHintText.text = useHint; + useHintText.gameObject.SetActive(!string.IsNullOrWhiteSpace(useHint)); + } } public void HideTooltip() @@ -64,14 +84,16 @@ public void HideTooltip() tooltipPanel.SetActive(false); } - private InventoryTooltipEntry FindEntry(InventoryItemType itemType) + private InventoryManager ResolveManager() { - for (int i = 0; i < entries.Count; i++) - { - if (entries[i] != null && entries[i].itemType == itemType) - return entries[i]; - } + if (inventoryManager != null) + return inventoryManager; - return null; + if (InventoryManager.Instance != null) + inventoryManager = InventoryManager.Instance; + else if (autoFindManager) + inventoryManager = FindFirstObjectByType(); + + return inventoryManager; } } diff --git a/Assets/My project/Inventory/Scripts/InventoryUI.cs b/Assets/My project/Inventory/Scripts/InventoryUI.cs index 62767035..9855fc9a 100644 --- a/Assets/My project/Inventory/Scripts/InventoryUI.cs +++ b/Assets/My project/Inventory/Scripts/InventoryUI.cs @@ -1,31 +1,158 @@ +using System.Collections; +using System.Collections.Generic; +using TMPro; using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.UI; /// /// 전체 인벤토리 UI를 갱신하는 스크립트입니다. -/// InventoryManager의 변경 이벤트를 받아 각 InventorySlotUI에 전달합니다. +/// 기능: 패널 열기/닫기, 슬롯 갱신, 획득 팝업, 부족 안내 메시지, 확인창, 상세보기, 획득 로그, 기억의 조각 진행도, 간단한 손목/타겟 추적. +/// InventoryUI가 붙은 오브젝트는 항상 켜두고, 실제 보이는 inventoryPanel만 켜고 끄는 구조를 권장합니다. /// [DisallowMultipleComponent] public class InventoryUI : MonoBehaviour { [Header("References")] [SerializeField] private InventoryManager inventoryManager; + [Tooltip("실제로 보이거나 숨겨질 자식 패널입니다. InventoryUI가 붙은 자기 자신을 넣지 않는 것을 권장합니다.")] [SerializeField] private GameObject inventoryPanel; [SerializeField] private InventorySlotUI[] slots; - [Header("Settings")] + [Header("Panel Settings")] [SerializeField] private bool autoFindManager = true; + [SerializeField] private bool autoFindPanelChild = true; + [SerializeField] private string autoPanelChildName = "InventoryPanel"; + [SerializeField] private bool visibleOnStart = false; [SerializeField] private bool refreshOnEnable = true; [SerializeField] private bool showNewBadgeOnIncrease = true; + [SerializeField] private bool preventDisablingSelf = true; + + [Header("Filter")] + [SerializeField] private InventoryItemCategory currentFilter = InventoryItemCategory.All; + [SerializeField] private bool hideSlotsOutsideFilter = false; + + [Header("Acquisition Popup")] + [SerializeField] private GameObject acquisitionPopupPanel; + [SerializeField] private CanvasGroup acquisitionPopupCanvasGroup; + [SerializeField] private Image acquisitionIconImage; + [SerializeField] private TMP_Text acquisitionText; + [SerializeField] private float acquisitionPopupTime = 1.4f; + [SerializeField] private string acquisitionFormat = "{0} x{1} 획득!"; + + [Header("Message Popup")] + [SerializeField] private GameObject messagePanel; + [SerializeField] private CanvasGroup messageCanvasGroup; + [SerializeField] private TMP_Text messageText; + [SerializeField] private float messageShowTime = 1.5f; + + [Header("Confirmation UI")] + [SerializeField] private GameObject confirmationPanel; + [SerializeField] private TMP_Text confirmationTitleText; + [SerializeField] private TMP_Text confirmationBodyText; + [SerializeField] private Button confirmationYesButton; + [SerializeField] private Button confirmationNoButton; + + [Header("Detail UI")] + [SerializeField] private GameObject detailPanel; + [SerializeField] private Image detailIconImage; + [SerializeField] private TMP_Text detailTitleText; + [SerializeField] private TMP_Text detailDescriptionText; + [SerializeField] private TMP_Text detailCountText; + [SerializeField] private TMP_Text detailGoalText; + [SerializeField] private Button detailUseButton; + + [Header("Recent Log UI")] + [SerializeField] private TMP_Text[] recentLogTexts; + + [Header("Memory Piece UI")] + [SerializeField] private TMP_Text memoryProgressText; + [SerializeField] private Slider memoryProgressSlider; + [SerializeField] private string memoryProgressFormat = "기억의 조각 {0} / {1}"; + + [Header("Audio")] + [SerializeField] private AudioSource uiAudioSource; + [SerializeField] private AudioClip defaultAcquisitionClip; + [SerializeField] private AudioClip defaultUseClip; + [SerializeField] private AudioClip defaultErrorClip; + + [Header("Optional Follow Target / Wrist UI")] + [SerializeField] private bool followTarget = false; + [SerializeField] private Transform targetToFollow; + [SerializeField] private Vector3 localPositionOffset = new Vector3(0f, 0.08f, 0.12f); + [SerializeField] private Vector3 localEulerOffset = Vector3.zero; + [SerializeField] private bool faceMainCamera = false; + + [Header("Editor Test Toggle")] + [SerializeField] private bool enableKeyboardToggleForTesting = false; + [SerializeField] private KeyCode keyboardToggleKey = KeyCode.I; private bool subscribed; + private Coroutine acquisitionRoutine; + private Coroutine messageRoutine; + private InventoryItemType pendingUseItemType; + private int pendingUseAmount = 1; + private bool hasPendingUse; + private InventoryItemType currentDetailItemType; + private bool hasDetailItem; private void Awake() { - if (inventoryPanel == null) - inventoryPanel = gameObject; + if (inventoryManager == null && InventoryManager.Instance != null) + inventoryManager = InventoryManager.Instance; if (inventoryManager == null && autoFindManager) inventoryManager = FindFirstObjectByType(); + + if (inventoryPanel == null && autoFindPanelChild) + { + Transform panelTransform = transform.Find(autoPanelChildName); + if (panelTransform != null) + inventoryPanel = panelTransform.gameObject; + } + + if (uiAudioSource == null) + uiAudioSource = GetComponent(); + + if (acquisitionPopupPanel != null) + acquisitionPopupPanel.SetActive(false); + + if (messagePanel != null) + messagePanel.SetActive(false); + + if (confirmationPanel != null) + confirmationPanel.SetActive(false); + + if (detailPanel != null) + detailPanel.SetActive(false); + + if (confirmationYesButton != null) + { + confirmationYesButton.onClick.RemoveListener(ConfirmPendingUse); + confirmationYesButton.onClick.AddListener(ConfirmPendingUse); + } + + if (confirmationNoButton != null) + { + confirmationNoButton.onClick.RemoveListener(CancelPendingUse); + confirmationNoButton.onClick.AddListener(CancelPendingUse); + } + + if (detailUseButton != null) + { + detailUseButton.onClick.RemoveListener(UseCurrentDetailItem); + detailUseButton.onClick.AddListener(UseCurrentDetailItem); + } + + ApplyItemDataToSlots(); + } + + private void Start() + { + SetVisible(visibleOnStart); + RefreshAllSlots(); + RefreshRecentLogs(); + RefreshMemoryProgress(); } private void OnEnable() @@ -41,18 +168,54 @@ private void OnDisable() Unsubscribe(); } + private void Update() + { + if (enableKeyboardToggleForTesting && Input.GetKeyDown(keyboardToggleKey)) + ToggleVisible(); + } + + private void LateUpdate() + { + if (!followTarget || targetToFollow == null) + return; + + transform.position = targetToFollow.TransformPoint(localPositionOffset); + transform.rotation = targetToFollow.rotation * Quaternion.Euler(localEulerOffset); + + if (faceMainCamera && Camera.main != null) + { + Vector3 direction = transform.position - Camera.main.transform.position; + if (direction.sqrMagnitude > 0.0001f) + transform.rotation = Quaternion.LookRotation(direction.normalized, Vector3.up); + } + } + public void SetVisible(bool visible) { - if (inventoryPanel != null) - inventoryPanel.SetActive(visible); + if (inventoryPanel == null) + return; + + if (preventDisablingSelf && inventoryPanel == gameObject) + { + Debug.LogWarning("[InventoryUI] InventoryPanel에 자기 자신이 들어가 있습니다. InventoryRoot는 항상 켜두고 자식 InventoryPanel만 연결하세요.", this); + return; + } + + inventoryPanel.SetActive(visible); + + if (visible) + RefreshAllSlots(); } public void ToggleVisible() { if (inventoryPanel != null) - inventoryPanel.SetActive(!inventoryPanel.activeSelf); + SetVisible(!inventoryPanel.activeSelf); } + public void ShowInventory() => SetVisible(true); + public void HideInventory() => SetVisible(false); + public void SetManager(InventoryManager manager) { if (inventoryManager == manager) @@ -61,9 +224,22 @@ public void SetManager(InventoryManager manager) Unsubscribe(); inventoryManager = manager; Subscribe(); + ApplyItemDataToSlots(); RefreshAllSlots(); } + public void SetFilterAll() => SetFilter(InventoryItemCategory.All); + public void SetFilterConsumable() => SetFilter(InventoryItemCategory.Consumable); + public void SetFilterQuest() => SetFilter(InventoryItemCategory.Quest); + public void SetFilterKeyItem() => SetFilter(InventoryItemCategory.KeyItem); + public void SetFilterMaterial() => SetFilter(InventoryItemCategory.Material); + + public void SetFilter(InventoryItemCategory category) + { + currentFilter = category; + ApplyFilterToSlots(); + } + public void RefreshAllSlots() { if (inventoryManager == null || slots == null) @@ -75,9 +251,16 @@ public void RefreshAllSlots() if (slot == null) continue; + InventoryItemDefinition definition = inventoryManager.GetDefinition(slot.ItemType); + slot.SetInventoryUI(this); + slot.SetDefinition(definition); + int count = inventoryManager.GetItemCount(slot.ItemType); - slot.SetCount(count, false); + int maxCount = inventoryManager.GetMaxCount(slot.ItemType); + slot.SetCount(count, false, maxCount); } + + ApplyFilterToSlots(); } private void RefreshSlot(InventoryItemType itemType, int count) @@ -85,13 +268,53 @@ private void RefreshSlot(InventoryItemType itemType, int count) if (slots == null) return; + int maxCount = inventoryManager != null ? inventoryManager.GetMaxCount(itemType) : 0; + for (int i = 0; i < slots.Length; i++) { InventorySlotUI slot = slots[i]; if (slot == null || slot.ItemType != itemType) continue; - slot.SetCount(count, showNewBadgeOnIncrease); + slot.SetCount(count, showNewBadgeOnIncrease, maxCount); + } + + if (hasDetailItem && currentDetailItemType == itemType) + ShowItemDetail(itemType); + } + + private void ApplyItemDataToSlots() + { + if (inventoryManager == null || slots == null) + return; + + for (int i = 0; i < slots.Length; i++) + { + InventorySlotUI slot = slots[i]; + if (slot == null) + continue; + + slot.SetInventoryUI(this); + slot.SetDefinition(inventoryManager.GetDefinition(slot.ItemType)); + } + } + + private void ApplyFilterToSlots() + { + if (slots == null) + return; + + for (int i = 0; i < slots.Length; i++) + { + InventorySlotUI slot = slots[i]; + if (slot == null) + continue; + + bool visible = currentFilter == InventoryItemCategory.All || slot.Category == currentFilter; + if (hideSlotsOutsideFilter) + slot.gameObject.SetActive(visible); + else + slot.SetFilteredOut(!visible); } } @@ -101,6 +324,11 @@ private void Subscribe() return; inventoryManager.ItemCountChanged += RefreshSlot; + inventoryManager.ItemAdded += HandleItemAdded; + inventoryManager.ItemUsed += HandleItemUsed; + inventoryManager.MessageRequested += ShowMessage; + inventoryManager.LogAdded += HandleLogAdded; + inventoryManager.MemoryPieceProgressChanged += HandleMemoryPieceProgressChanged; subscribed = true; } @@ -110,6 +338,306 @@ private void Unsubscribe() return; inventoryManager.ItemCountChanged -= RefreshSlot; + inventoryManager.ItemAdded -= HandleItemAdded; + inventoryManager.ItemUsed -= HandleItemUsed; + inventoryManager.MessageRequested -= ShowMessage; + inventoryManager.LogAdded -= HandleLogAdded; + inventoryManager.MemoryPieceProgressChanged -= HandleMemoryPieceProgressChanged; subscribed = false; } + + private void HandleItemAdded(InventoryItemType itemType, int addedAmount, int totalCount) + { + ShowAcquisitionPopup(itemType, addedAmount); + } + + private void HandleItemUsed(InventoryItemType itemType, int count) + { + AudioClip clip = inventoryManager != null ? inventoryManager.GetUseClip(itemType) : null; + PlayUIClip(clip != null ? clip : defaultUseClip); + } + + private void HandleLogAdded(InventoryLogEntry entry) + { + RefreshRecentLogs(); + } + + private void HandleMemoryPieceProgressChanged(int current, int target) + { + RefreshMemoryProgress(current, target); + } + + public void ShowAcquisitionPopup(InventoryItemType itemType, int amount) + { + if (inventoryManager == null) + return; + + string displayName = inventoryManager.GetDisplayName(itemType); + Sprite icon = inventoryManager.GetIcon(itemType); + + if (acquisitionIconImage != null) + { + acquisitionIconImage.sprite = icon; + acquisitionIconImage.enabled = icon != null; + } + + if (acquisitionText != null) + acquisitionText.text = string.Format(acquisitionFormat, displayName, Mathf.Max(1, amount)); + + AudioClip clip = inventoryManager.GetAcquisitionClip(itemType); + PlayUIClip(clip != null ? clip : defaultAcquisitionClip); + + if (acquisitionRoutine != null) + StopCoroutine(acquisitionRoutine); + + acquisitionRoutine = StartCoroutine(ShowPanelRoutine(acquisitionPopupPanel, acquisitionPopupCanvasGroup, acquisitionPopupTime)); + } + + public void ShowMessage(string message) + { + if (string.IsNullOrWhiteSpace(message)) + return; + + if (messageText != null) + messageText.text = message; + + if (messageRoutine != null) + StopCoroutine(messageRoutine); + + messageRoutine = StartCoroutine(ShowPanelRoutine(messagePanel, messageCanvasGroup, messageShowTime)); + } + + private IEnumerator ShowPanelRoutine(GameObject panel, CanvasGroup canvasGroup, float showTime) + { + if (panel == null) + yield break; + + panel.SetActive(true); + + if (canvasGroup != null) + canvasGroup.alpha = 1f; + + yield return new WaitForSecondsRealtime(Mathf.Max(0.05f, showTime)); + + if (canvasGroup != null) + canvasGroup.alpha = 0f; + + panel.SetActive(false); + } + + public void RequestUseItem(InventoryItemType itemType) + { + RequestUseItem(itemType, 1); + } + + public void RequestUseItem(InventoryItemType itemType, int amount) + { + if (inventoryManager == null) + return; + + if (!inventoryManager.IsUsable(itemType)) + { + ShowMessage($"{inventoryManager.GetDisplayName(itemType)}은(는) 지금 사용할 수 없습니다."); + PlayUIClip(defaultErrorClip); + return; + } + + if (!inventoryManager.HasItem(itemType, amount)) + { + ShowMessage(inventoryManager.GetInsufficientMessage(itemType, amount)); + PlayUIClip(defaultErrorClip); + return; + } + + if (inventoryManager.RequiresUseConfirmation(itemType)) + { + pendingUseItemType = itemType; + pendingUseAmount = Mathf.Max(1, amount); + ShowConfirmation(itemType, amount); + } + else + { + bool result = inventoryManager.UseItem(itemType, amount); + if (!result) + PlayUIClip(defaultErrorClip); + } + } + + private void ShowConfirmation(InventoryItemType itemType, int amount) + { + pendingUseItemType = itemType; + pendingUseAmount = Mathf.Max(1, amount); + hasPendingUse = true; + + if (confirmationPanel == null) + { + ConfirmPendingUse(); + return; + } + + string displayName = inventoryManager != null ? inventoryManager.GetDisplayName(itemType) : itemType.ToString(); + + if (confirmationTitleText != null) + confirmationTitleText.text = "아이템 사용"; + + if (confirmationBodyText != null) + confirmationBodyText.text = $"{displayName}을(를) 사용하시겠습니까?"; + + confirmationPanel.SetActive(true); + } + + public void ConfirmPendingUse() + { + if (confirmationPanel != null) + confirmationPanel.SetActive(false); + + if (!hasPendingUse) + return; + + InventoryItemType itemType = pendingUseItemType; + int amount = Mathf.Max(1, pendingUseAmount); + hasPendingUse = false; + + if (inventoryManager != null) + { + bool result = inventoryManager.UseItem(itemType, amount); + if (!result) + PlayUIClip(defaultErrorClip); + } + } + + public void CancelPendingUse() + { + hasPendingUse = false; + + if (confirmationPanel != null) + confirmationPanel.SetActive(false); + } + + public void ShowItemDetail(InventoryItemType itemType) + { + hasDetailItem = true; + currentDetailItemType = itemType; + + if (inventoryManager == null || detailPanel == null) + return; + + InventoryItemDefinition definition = inventoryManager.GetDefinition(itemType); + int count = inventoryManager.GetItemCount(itemType); + int maxCount = inventoryManager.GetMaxCount(itemType); + Sprite icon = inventoryManager.GetIcon(itemType); + + if (detailIconImage != null) + { + detailIconImage.sprite = icon; + detailIconImage.enabled = icon != null; + } + + if (detailTitleText != null) + detailTitleText.text = inventoryManager.GetDisplayName(itemType); + + if (detailDescriptionText != null) + detailDescriptionText.text = inventoryManager.GetDescription(itemType); + + if (detailCountText != null) + detailCountText.text = maxCount > 0 ? $"보유: x{count} / {maxCount}" : $"보유: x{count}"; + + if (detailGoalText != null) + detailGoalText.text = inventoryManager.GetGoalHint(itemType); + + if (detailUseButton != null) + { + bool usable = definition != null && definition.usable && count > 0; + detailUseButton.gameObject.SetActive(definition != null && definition.usable); + detailUseButton.interactable = usable; + } + + detailPanel.SetActive(true); + } + + public void HideItemDetail() + { + hasDetailItem = false; + if (detailPanel != null) + detailPanel.SetActive(false); + } + + public void UseCurrentDetailItem() + { + if (!hasDetailItem) + return; + + RequestUseItem(currentDetailItemType, 1); + } + + private void RefreshRecentLogs() + { + if (recentLogTexts == null || recentLogTexts.Length == 0 || inventoryManager == null) + return; + + IReadOnlyList logs = inventoryManager.GetRecentLogs(); + + for (int i = 0; i < recentLogTexts.Length; i++) + { + if (recentLogTexts[i] == null) + continue; + + recentLogTexts[i].text = i < logs.Count && logs[i] != null ? logs[i].ToString() : string.Empty; + } + } + + private void RefreshMemoryProgress() + { + if (inventoryManager == null) + return; + + RefreshMemoryProgress(inventoryManager.GetItemCount(inventoryManager.MemoryPieceItemType), inventoryManager.MemoryPieceTargetCount); + } + + private void RefreshMemoryProgress(int current, int target) + { + target = Mathf.Max(1, target); + current = Mathf.Clamp(current, 0, target); + + if (memoryProgressText != null) + memoryProgressText.text = string.Format(memoryProgressFormat, current, target); + + if (memoryProgressSlider != null) + { + memoryProgressSlider.minValue = 0f; + memoryProgressSlider.maxValue = target; + memoryProgressSlider.value = current; + } + } + + private void PlayUIClip(AudioClip clip) + { + if (clip == null) + return; + + if (uiAudioSource != null) + uiAudioSource.PlayOneShot(clip); + else + AudioSource.PlayClipAtPoint(clip, transform.position); + } + + public void CheckVRUISetup() + { + Canvas canvas = GetComponentInParent(); + if (canvas == null) + { + Debug.LogWarning("[InventoryUI] Canvas가 없습니다.", this); + return; + } + + if (canvas.renderMode != RenderMode.WorldSpace) + Debug.LogWarning("[InventoryUI] VR UI에서는 Canvas Render Mode를 World Space로 권장합니다.", canvas); + + if (EventSystem.current == null) + Debug.LogWarning("[InventoryUI] EventSystem이 없습니다. VR 포인터 UI가 동작하지 않을 수 있습니다.", this); + + GraphicRaycaster graphicRaycaster = canvas.GetComponent(); + if (graphicRaycaster == null) + Debug.LogWarning("[InventoryUI] Canvas에 GraphicRaycaster 또는 Tracked Device Graphic Raycaster가 필요합니다.", canvas); + } } diff --git a/Assets/My project/Inventory/Scripts/InventoryUILayoutController.cs b/Assets/My project/Inventory/Scripts/InventoryUILayoutController.cs new file mode 100644 index 00000000..8d660641 --- /dev/null +++ b/Assets/My project/Inventory/Scripts/InventoryUILayoutController.cs @@ -0,0 +1,2242 @@ +using System; +using System.Collections.Generic; +using TMPro; +using UnityEngine; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +public enum InventoryRootUIMode +{ + TestMode, + PlayMode, + BuildMode, + HiddenMode, + LayoutOnly +} + +public enum InventoryUIAnchorPreset +{ + Custom, + MiddleCenter, + TopLeft, + TopCenter, + TopRight, + MiddleLeft, + MiddleRight, + BottomLeft, + BottomCenter, + BottomRight, + StretchAll +} + +[Serializable] +public class InventoryControlledRectTarget +{ + [Header("Target")] + public string name; + public RectTransform rectTransform; + public GameObject activeTarget; + + [Header("Rect Layout")] + public bool applyRect = true; + public InventoryUIAnchorPreset anchorPreset = InventoryUIAnchorPreset.MiddleCenter; + public Vector2 customAnchorMin = new Vector2(0.5f, 0.5f); + public Vector2 customAnchorMax = new Vector2(0.5f, 0.5f); + public Vector2 customPivot = new Vector2(0.5f, 0.5f); + public Vector2 size = new Vector2(100f, 100f); + public Vector2 anchoredPosition = Vector2.zero; + + [Header("Transform")] + public bool resetScaleToOne = true; + public bool applyLocalScale = false; + public Vector3 localScale = Vector3.one; + public bool applyLocalRotation = false; + public Vector3 localEulerAngles = Vector3.zero; + public bool applySiblingIndex = false; + public int siblingIndex = 0; + + [Header("Active By Mode")] + public bool controlActiveState = false; + public bool activeInTestMode = true; + public bool activeInPlayMode = true; + public bool activeInBuildMode = true; + public bool activeInHiddenMode = false; + + [Header("CanvasGroup")] + public bool applyCanvasGroup = false; + public bool addCanvasGroupIfMissing = true; + [Range(0f, 1f)] public float canvasAlpha = 1f; + public bool canvasInteractable = false; + public bool canvasBlocksRaycasts = false; + + [Header("Raycast")] + public bool applySelfImageRaycast = false; + public bool selfImageRaycastTarget = false; + public bool applyChildImageRaycasts = false; + public bool childImageRaycastTarget = false; + public bool preserveButtonImageRaycasts = true; + public bool applyChildTextRaycasts = false; + public bool childTextRaycastTarget = false; +} + +[Serializable] +public class InventoryControlledTextTarget +{ + [Header("Target")] + public string name; + public TMP_Text text; + + [Header("Rect Layout")] + public bool applyRect = false; + public InventoryUIAnchorPreset anchorPreset = InventoryUIAnchorPreset.MiddleCenter; + public Vector2 customAnchorMin = new Vector2(0.5f, 0.5f); + public Vector2 customAnchorMax = new Vector2(0.5f, 0.5f); + public Vector2 customPivot = new Vector2(0.5f, 0.5f); + public Vector2 size = new Vector2(100f, 30f); + public Vector2 anchoredPosition = Vector2.zero; + + [Header("Text Settings")] + public bool applyFontSize = false; + public float fontSize = 20f; + public bool applyAlignment = false; + public TextAlignmentOptions alignment = TextAlignmentOptions.Center; + public bool applyColor = false; + public Color color = Color.white; + public bool applyRaycastTarget = true; + public bool raycastTarget = false; + public bool resetScaleToOne = true; + + [Header("Outline / Shadow")] + public bool applyOutline = false; + public bool addOutlineIfMissing = true; + public Color outlineColor = new Color(0f, 0.75f, 1f, 0.8f); + public Vector2 outlineEffectDistance = new Vector2(1f, -1f); + public bool outlineUseGraphicAlpha = true; + public bool applyShadow = false; + public bool addShadowIfMissing = true; + public Color shadowColor = new Color(0f, 0f, 0f, 0.65f); + public Vector2 shadowEffectDistance = new Vector2(2f, -2f); + public bool shadowUseGraphicAlpha = true; +} + +[Serializable] +public class InventoryControlledImageTarget +{ + [Header("Target")] + public string name; + public Image image; + + [Header("Rect Layout")] + public bool applyRect = false; + public InventoryUIAnchorPreset anchorPreset = InventoryUIAnchorPreset.MiddleCenter; + public Vector2 customAnchorMin = new Vector2(0.5f, 0.5f); + public Vector2 customAnchorMax = new Vector2(0.5f, 0.5f); + public Vector2 customPivot = new Vector2(0.5f, 0.5f); + public Vector2 size = new Vector2(64f, 64f); + public Vector2 anchoredPosition = Vector2.zero; + + [Header("Image Settings")] + public bool applyColor = false; + public Color color = Color.white; + public bool applySprite = false; + public Sprite sprite; + public bool applyRaycastTarget = true; + public bool raycastTarget = false; + public bool resetScaleToOne = true; + + [Header("Outline / Shadow")] + public bool applyOutline = false; + public bool addOutlineIfMissing = true; + public Color outlineColor = new Color(0f, 0.75f, 1f, 0.8f); + public Vector2 outlineEffectDistance = new Vector2(1f, -1f); + public bool outlineUseGraphicAlpha = true; + public bool applyShadow = false; + public bool addShadowIfMissing = true; + public Color shadowColor = new Color(0f, 0f, 0f, 0.55f); + public Vector2 shadowEffectDistance = new Vector2(2f, -2f); + public bool shadowUseGraphicAlpha = true; +} + +[Serializable] +public class InventoryControlledButtonTarget +{ + [Header("Target")] + public string name; + public Button button; + + [Header("Rect Layout")] + public bool applyRect = false; + public InventoryUIAnchorPreset anchorPreset = InventoryUIAnchorPreset.MiddleCenter; + public Vector2 customAnchorMin = new Vector2(0.5f, 0.5f); + public Vector2 customAnchorMax = new Vector2(0.5f, 0.5f); + public Vector2 customPivot = new Vector2(0.5f, 0.5f); + public Vector2 size = new Vector2(100f, 35f); + public Vector2 anchoredPosition = Vector2.zero; + + [Header("Button Settings")] + public bool applyInteractable = false; + public bool interactable = true; + public bool applyImageRaycastTarget = true; + public bool imageRaycastTarget = true; + public bool disableChildTextRaycasts = true; + public bool resetScaleToOne = true; + + [Header("Button Colors")] + public bool applyButtonColors = false; + public Color normalColor = new Color(0.07f, 0.18f, 0.30f, 0.90f); + public Color highlightedColor = new Color(0.12f, 0.42f, 0.70f, 1f); + public Color pressedColor = new Color(0.04f, 0.12f, 0.20f, 1f); + public Color selectedColor = new Color(0.15f, 0.50f, 0.85f, 1f); + public Color disabledColor = new Color(0.20f, 0.20f, 0.20f, 0.45f); + public float colorMultiplier = 1f; + public float fadeDuration = 0.1f; + + [Header("Outline / Shadow")] + public bool applyOutline = false; + public bool addOutlineIfMissing = true; + public Color outlineColor = new Color(0f, 0.75f, 1f, 0.8f); + public Vector2 outlineEffectDistance = new Vector2(1f, -1f); + public bool outlineUseGraphicAlpha = true; + public bool applyShadow = false; + public bool addShadowIfMissing = true; + public Color shadowColor = new Color(0f, 0f, 0f, 0.55f); + public Vector2 shadowEffectDistance = new Vector2(2f, -2f); + public bool shadowUseGraphicAlpha = true; +} + +[Serializable] +public class InventoryLayoutPadding +{ + public int left; + public int right; + public int top; + public int bottom; + + public InventoryLayoutPadding() { } + + public InventoryLayoutPadding(int left, int right, int top, int bottom) + { + this.left = left; + this.right = right; + this.top = top; + this.bottom = bottom; + } + + public RectOffset ToRectOffset() + { + return new RectOffset(left, right, top, bottom); + } +} + +[Serializable] +public class InventoryControlledGridLayoutTarget +{ + [Header("Target")] + public string name; + public GridLayoutGroup grid; + + [Header("Grid Settings")] + public bool applyGrid = true; + public Vector2 cellSize = new Vector2(100f, 100f); + public Vector2 spacing = Vector2.zero; + public TextAnchor childAlignment = TextAnchor.MiddleCenter; + public GridLayoutGroup.Constraint constraint = GridLayoutGroup.Constraint.FixedColumnCount; + public int constraintCount = 5; + public InventoryLayoutPadding padding; +} + +/// +/// InventoryRoot 아래 UI를 한 곳에서 정리하는 컨트롤러입니다. +/// - 기본 인벤토리 패널들의 위치/크기/배치를 제어합니다. +/// - Inspector에 직접 연결한 Rect/Text/Image/Button/Grid 대상도 제어합니다. +/// - 없는 CanvasGroup, Image, GridLayoutGroup, AudioSource 등을 자동으로 붙일 수 있습니다. +/// - Text 내용 자체는 바꾸지 않습니다. 내용 변경은 InventoryUI가 담당하게 두는 것을 권장합니다. +/// +[ExecuteAlways] +[DisallowMultipleComponent] +public class InventoryUILayoutController : MonoBehaviour +{ + [Header("Root / Canvas")] + [SerializeField] private bool configureRootCanvas = true; + [SerializeField] private Vector2 rootCanvasSize = new Vector2(800f, 500f); + [SerializeField] private bool applyRootWorldScale = false; + [SerializeField] private Vector3 rootWorldScale = new Vector3(0.0015f, 0.0015f, 0.0015f); + [SerializeField] private bool addGraphicRaycasterIfMissing = true; + [SerializeField] private bool addTrackedDeviceGraphicRaycasterIfAvailable = true; + + [Header("Known UI References")] + [SerializeField] private RectTransform inventoryPanel; + [SerializeField] private RectTransform titleText; + [SerializeField] private RectTransform closeButton; + [SerializeField] private RectTransform categoryButtons; + [SerializeField] private RectTransform memoryProgressArea; + [SerializeField] private RectTransform slotContainer; + [SerializeField] private RectTransform recentLogArea; + [SerializeField] private RectTransform debugPanel; + [SerializeField] private RectTransform quickUseButtons; + + [Header("Popup / Floating Panels")] + [SerializeField] private RectTransform tooltipPanel; + [SerializeField] private RectTransform acquisitionPopupPanel; + [SerializeField] private RectTransform messagePanel; + [SerializeField] private RectTransform confirmationPanel; + [SerializeField] private RectTransform detailPanel; + + [Header("Inventory Scripts")] + [SerializeField] private InventoryUI inventoryUI; + [SerializeField] private InventorySlotUI[] slots; + + [Header("Auto Find Names")] + [SerializeField] private string inventoryPanelName = "InventoryPanel"; + [SerializeField] private string titleTextName = "TitleText"; + [SerializeField] private string closeButtonName = "CloseButton"; + [SerializeField] private string categoryButtonsName = "CategoryButtons"; + [SerializeField] private string memoryProgressAreaName = "MemoryProgressArea"; + [SerializeField] private string slotContainerName = "SlotContainer"; + [SerializeField] private string recentLogAreaName = "RecentLogArea"; + [SerializeField] private string debugPanelName = "DebugPanel"; + [SerializeField] private string quickUseButtonsName = "QuickUseButtons"; + [SerializeField] private string tooltipPanelName = "TooltipPanel"; + [SerializeField] private string acquisitionPopupPanelName = "AcquisitionPopupPanel"; + [SerializeField] private string messagePanelName = "MessagePanel"; + [SerializeField] private string confirmationPanelName = "ConfirmationPanel"; + [SerializeField] private string detailPanelName = "DetailPanel"; + + [Header("Apply Settings")] + [SerializeField] private bool autoFindReferences = true; + [SerializeField] private bool autoAddMissingComponents = true; + [SerializeField] private bool applyKnownLayout = true; + [SerializeField] private bool applyCustomControlledTargets = true; + [SerializeField] private bool resetChildScaleToOne = true; + [SerializeField] private bool applyLayoutOnAwake = true; + [SerializeField] private bool applyModeOnAwake = true; + [Tooltip("InventoryUI.Start()의 visibleOnStart 처리 이후에 모드를 한 번 더 적용해 패널 ON/OFF 충돌을 줄입니다.")] + [SerializeField] private bool applyModeAfterOneFrame = true; + [SerializeField] private bool applyInEditor = true; + [SerializeField] private InventoryRootUIMode initialMode = InventoryRootUIMode.TestMode; + + [Header("Known Panel Layout")] + [SerializeField] private Vector2 inventoryPanelSize = new Vector2(760f, 460f); + [SerializeField] private Vector2 inventoryPanelPos = Vector2.zero; + [SerializeField] private Vector2 titleTextSize = new Vector2(360f, 50f); + [SerializeField] private Vector2 titleTextPos = new Vector2(0f, -18f); + [SerializeField] private Vector2 closeButtonSize = new Vector2(70f, 38f); + [SerializeField] private Vector2 closeButtonPos = new Vector2(-18f, -18f); + [SerializeField] private Vector2 categoryButtonsSize = new Vector2(620f, 45f); + [SerializeField] private Vector2 categoryButtonsPos = new Vector2(0f, -75f); + [SerializeField] private Vector2 memoryProgressAreaSize = new Vector2(620f, 55f); + [SerializeField] private Vector2 memoryProgressAreaPos = new Vector2(0f, -125f); + [SerializeField] private Vector2 slotContainerSize = new Vector2(500f, 145f); + [SerializeField] private Vector2 slotContainerPos = new Vector2(-80f, 20f); + [SerializeField] private Vector2 recentLogSize = new Vector2(340f, 110f); + [SerializeField] private Vector2 recentLogPos = new Vector2(25f, 25f); + [SerializeField] private Vector2 debugPanelSize = new Vector2(300f, 110f); + [SerializeField] private Vector2 debugPanelPos = new Vector2(-25f, 25f); + [SerializeField] private Vector2 quickUseButtonsSize = new Vector2(130f, 160f); + [SerializeField] private Vector2 quickUseButtonsPos = new Vector2(-20f, -35f); + + [Header("Known Popup / Detail Layout")] + [SerializeField] private Vector2 tooltipPanelSize = new Vector2(520f, 120f); + [SerializeField] private Vector2 tooltipPanelPos = new Vector2(0f, -15f); + [SerializeField] private Vector2 acquisitionPopupSize = new Vector2(360f, 70f); + [SerializeField] private Vector2 acquisitionPopupPos = new Vector2(0f, 40f); + [SerializeField] private Vector2 messagePanelSize = new Vector2(460f, 60f); + [SerializeField] private Vector2 messagePanelPos = new Vector2(0f, -85f); + [SerializeField] private Vector2 confirmationPanelSize = new Vector2(420f, 220f); + [SerializeField] private Vector2 confirmationPanelPos = Vector2.zero; + [SerializeField] private Vector2 detailPanelSize = new Vector2(260f, 340f); + [SerializeField] private Vector2 detailPanelPos = new Vector2(-25f, 0f); + + [Header("Known LayoutGroup Defaults")] + [SerializeField] private Vector2 slotCellSize = new Vector2(85f, 120f); + [SerializeField] private Vector2 slotSpacing = new Vector2(8f, 0f); + [SerializeField] private int slotColumnCount = 5; + [SerializeField] private Vector2 debugButtonCellSize = new Vector2(85f, 28f); + [SerializeField] private Vector2 debugButtonSpacing = new Vector2(5f, 5f); + [SerializeField] private int debugButtonColumnCount = 3; + [SerializeField] private Vector2 quickUseButtonCellSize = new Vector2(115f, 26f); + [SerializeField] private Vector2 quickUseButtonSpacing = new Vector2(0f, 5f); + + [Header("Known Slot Child Layout")] + [SerializeField] private bool arrangeSlotChildren = true; + [SerializeField] private Vector2 slotIconSize = new Vector2(64f, 64f); + [SerializeField] private Vector2 slotIconPos = new Vector2(0f, 18f); + [SerializeField] private Vector2 slotCountTextSize = new Vector2(100f, 28f); + [SerializeField] private Vector2 slotCountTextPos = new Vector2(0f, 8f); + [SerializeField] private Vector2 slotNewBadgeSize = new Vector2(52f, 24f); + [SerializeField] private Vector2 slotNewBadgePos = new Vector2(-4f, -4f); + + [Header("Mode Active States")] + [SerializeField] private bool testShowInventoryPanel = true; + [SerializeField] private bool testShowDebugPanel = true; + [SerializeField] private bool testShowRecentLogArea = true; + [SerializeField] private bool testShowCategoryButtons = true; + [SerializeField] private bool testShowMemoryProgressArea = true; + [SerializeField] private bool testShowQuickUseButtons = false; + + [SerializeField] private bool playShowInventoryPanel = false; + [SerializeField] private bool playShowDebugPanel = false; + [SerializeField] private bool playShowRecentLogArea = true; + [SerializeField] private bool playShowCategoryButtons = true; + [SerializeField] private bool playShowMemoryProgressArea = true; + [SerializeField] private bool playShowQuickUseButtons = false; + + [SerializeField] private bool buildShowInventoryPanel = false; + [SerializeField] private bool buildShowDebugPanel = false; + [SerializeField] private bool buildShowRecentLogArea = true; + [SerializeField] private bool buildShowCategoryButtons = true; + [SerializeField] private bool buildShowMemoryProgressArea = true; + [SerializeField] private bool buildShowQuickUseButtons = false; + + [Header("Custom Inspector-Controlled Targets")] + [Tooltip("패널, 영역, 빈 오브젝트 등 RectTransform 기준으로 제어할 대상입니다.")] + [SerializeField] private List controlledRects = new List(); + [Tooltip("패널 자식 TMP_Text의 위치, 크기, 폰트 크기, 정렬, Raycast를 제어합니다. Text 내용은 바꾸지 않습니다.")] + [SerializeField] private List controlledTexts = new List(); + [Tooltip("패널 자식 Image의 위치, 크기, 색상, Raycast를 제어합니다. Sprite는 Apply Sprite를 켰을 때만 바꿉니다.")] + [SerializeField] private List controlledImages = new List(); + [Tooltip("패널 자식 Button의 위치, 크기, Interactable, Raycast를 제어합니다.")] + [SerializeField] private List controlledButtons = new List(); + [Tooltip("SlotContainer, DebugPanel 같은 GridLayoutGroup의 Cell Size, Spacing, Count를 제어합니다.")] + [SerializeField] private List controlledGridLayouts = new List(); + + [Header("Basic Visual Theme")] + [SerializeField] private bool applyBasicVisualTheme = true; + [SerializeField] private bool styleKnownPanels = true; + [SerializeField] private bool styleKnownButtons = true; + [SerializeField] private bool styleKnownTexts = true; + [SerializeField] private bool styleKnownSlots = true; + [SerializeField] private bool addOutlineToKnownGraphics = true; + [SerializeField] private bool addShadowToKnownTexts = true; + + [Header("Theme Colors - Ocean VR")] + [SerializeField] private Color mainPanelColor = new Color(0.03f, 0.08f, 0.15f, 0.88f); + [SerializeField] private Color subPanelColor = new Color(0.04f, 0.14f, 0.24f, 0.82f); + [SerializeField] private Color popupPanelColor = new Color(0.02f, 0.10f, 0.18f, 0.92f); + [SerializeField] private Color slotColor = new Color(0.05f, 0.16f, 0.26f, 0.90f); + [SerializeField] private Color slotImportantGlowColor = new Color(1.0f, 0.72f, 0.20f, 0.38f); + [SerializeField] private Color filteredOverlayColor = new Color(0f, 0f, 0f, 0.55f); + [SerializeField] private Color newBadgeColor = new Color(1.0f, 0.82f, 0.12f, 0.95f); + [SerializeField] private Color mainTextColor = new Color(0.95f, 0.92f, 0.82f, 1f); + [SerializeField] private Color accentTextColor = new Color(1.0f, 0.78f, 0.35f, 1f); + [SerializeField] private Color mutedTextColor = new Color(0.70f, 0.86f, 0.95f, 1f); + [SerializeField] private Color outlineColor = new Color(0.18f, 0.76f, 1f, 0.65f); + [SerializeField] private Color goldOutlineColor = new Color(1.0f, 0.72f, 0.20f, 0.80f); + [SerializeField] private Color shadowColor = new Color(0f, 0f, 0f, 0.62f); + + [Header("Theme Button Colors")] + [SerializeField] private Color buttonNormalColor = new Color(0.06f, 0.20f, 0.33f, 0.95f); + [SerializeField] private Color buttonHighlightedColor = new Color(0.12f, 0.44f, 0.74f, 1f); + [SerializeField] private Color buttonPressedColor = new Color(0.03f, 0.12f, 0.22f, 1f); + [SerializeField] private Color buttonSelectedColor = new Color(0.16f, 0.50f, 0.82f, 1f); + [SerializeField] private Color buttonDisabledColor = new Color(0.20f, 0.22f, 0.24f, 0.45f); + [SerializeField] private Color debugButtonColor = new Color(0.07f, 0.22f, 0.32f, 0.95f); + [SerializeField] private Color dangerButtonColor = new Color(0.45f, 0.10f, 0.12f, 0.95f); + + [Header("Popup Groups")] + [SerializeField] private GameObject[] extraPopupPanelsToHide; + + [Header("Raycast / Component Fix")] + [SerializeField] private bool fixRaycastTargets = true; + [SerializeField] private bool fixCanvasGroups = true; + [SerializeField] private bool disableTextRaycasts = true; + [SerializeField] private bool disableNonInteractiveImageRaycasts = true; + [SerializeField] private bool setSliderInteractableFalse = true; + [SerializeField] private bool setSlotHoverSafeValues = true; + [SerializeField] private bool slotUseHoverScale = true; + [SerializeField] private float slotHoverScale = 1.03f; + [SerializeField] private bool slotBringToFrontOnHover = false; + + private bool isApplying; + + private void Reset() + { + AutoFindReferences(); + } + + private void Awake() + { + if (!Application.isPlaying) + return; + + if (autoFindReferences) + AutoFindReferences(); + + if (autoAddMissingComponents) + AutoSetupMissingComponents(); + + if (applyLayoutOnAwake) + ApplyFullInventoryRootLayout(); + + if (applyModeOnAwake) + ApplyInitialMode(); + } + + private System.Collections.IEnumerator Start() + { + if (!Application.isPlaying || !applyModeAfterOneFrame) + yield break; + + // InventoryUI.Start()의 visibleOnStart 적용이 끝난 뒤 모드를 다시 적용합니다. + yield return null; + ApplyInitialMode(); + } + +#if UNITY_EDITOR + private void OnValidate() + { + if (!applyInEditor) + return; + + EditorApplication.delayCall -= DelayedApplyInEditor; + EditorApplication.delayCall += DelayedApplyInEditor; + } + + private void DelayedApplyInEditor() + { + if (this == null || isApplying) + return; + + ApplyFullInventoryRootLayout(); + } +#endif + + [ContextMenu("Inventory UI/Apply Full Inventory Root Layout")] + public void ApplyFullInventoryRootLayout() + { + if (isApplying) + return; + + isApplying = true; + + if (autoFindReferences) + AutoFindReferences(); + + if (autoAddMissingComponents) + AutoSetupMissingComponents(); + + if (configureRootCanvas) + ConfigureRootCanvas(); + + if (applyKnownLayout) + ApplyKnownLayout(); + + if (arrangeSlotChildren) + ArrangeSlotChildren(); + + if (applyCustomControlledTargets) + ApplyCustomTargets(); + + if (applyBasicVisualTheme) + ApplyBasicVisualTheme(); + + if (fixRaycastTargets) + FixAllRaycastTargets(); + + isApplying = false; + } + + [ContextMenu("Inventory UI/Apply Custom Inspector Targets Only")] + public void ApplyCustomTargets() + { + ApplyControlledRectTargets(); + ApplyControlledTextTargets(); + ApplyControlledImageTargets(); + ApplyControlledButtonTargets(); + ApplyControlledGridLayoutTargets(); + } + + [ContextMenu("Inventory UI/Auto Find References")] + public void AutoFindReferences() + { + inventoryPanel = FindRectIfNull(inventoryPanel, inventoryPanelName); + titleText = FindRectIfNull(titleText, titleTextName); + closeButton = FindRectIfNull(closeButton, closeButtonName); + categoryButtons = FindRectIfNull(categoryButtons, categoryButtonsName); + memoryProgressArea = FindRectIfNull(memoryProgressArea, memoryProgressAreaName); + slotContainer = FindRectIfNull(slotContainer, slotContainerName); + recentLogArea = FindRectIfNull(recentLogArea, recentLogAreaName); + debugPanel = FindRectIfNull(debugPanel, debugPanelName); + quickUseButtons = FindRectIfNull(quickUseButtons, quickUseButtonsName); + tooltipPanel = FindRectIfNull(tooltipPanel, tooltipPanelName); + acquisitionPopupPanel = FindRectIfNull(acquisitionPopupPanel, acquisitionPopupPanelName); + messagePanel = FindRectIfNull(messagePanel, messagePanelName); + confirmationPanel = FindRectIfNull(confirmationPanel, confirmationPanelName); + detailPanel = FindRectIfNull(detailPanel, detailPanelName); + + if (inventoryUI == null) + inventoryUI = GetComponent(); + + if (slots == null || slots.Length == 0) + slots = GetComponentsInChildren(true); + } + + [ContextMenu("Inventory UI/Auto Setup Missing Components")] + public void AutoSetupMissingComponents() + { + Canvas canvas = GetOrAdd(gameObject); + canvas.renderMode = RenderMode.WorldSpace; + + GetOrAdd(gameObject); + + if (addGraphicRaycasterIfMissing) + GetOrAdd(gameObject); + + if (addTrackedDeviceGraphicRaycasterIfAvailable) + TryAddComponentByTypeName(gameObject, "UnityEngine.XR.Interaction.Toolkit.UI.TrackedDeviceGraphicRaycaster"); + + GetOrAdd(gameObject).playOnAwake = false; + + AddCanvasGroupIfNeeded(tooltipPanel, false, false); + AddCanvasGroupIfNeeded(acquisitionPopupPanel, false, false); + AddCanvasGroupIfNeeded(messagePanel, false, false); + AddCanvasGroupIfNeeded(confirmationPanel, true, true); + AddCanvasGroupIfNeeded(detailPanel, true, true); + + if (slotContainer != null) + GetOrAdd(slotContainer.gameObject); + + if (debugPanel != null) + GetOrAdd(debugPanel.gameObject); + + if (quickUseButtons != null && quickUseButtons.GetComponent() == null) + quickUseButtons.gameObject.AddComponent(); + } + + [ContextMenu("Inventory UI/Add Default Known Targets To Inspector Lists")] + public void AddDefaultKnownTargetsToInspectorLists() + { + AutoFindReferences(); + + AddControlledRect("InventoryPanel", inventoryPanel, null, InventoryUIAnchorPreset.MiddleCenter, inventoryPanelSize, inventoryPanelPos, false, true, true, true, false); + AddControlledRect("TitleText", titleText, null, InventoryUIAnchorPreset.TopCenter, titleTextSize, titleTextPos, false, true, true, true, false); + AddControlledRect("CloseButton", closeButton, null, InventoryUIAnchorPreset.TopRight, closeButtonSize, closeButtonPos, false, true, true, true, false); + AddControlledRect("CategoryButtons", categoryButtons, null, InventoryUIAnchorPreset.TopCenter, categoryButtonsSize, categoryButtonsPos, true, testShowCategoryButtons, playShowCategoryButtons, buildShowCategoryButtons, false); + AddControlledRect("MemoryProgressArea", memoryProgressArea, null, InventoryUIAnchorPreset.TopCenter, memoryProgressAreaSize, memoryProgressAreaPos, true, testShowMemoryProgressArea, playShowMemoryProgressArea, buildShowMemoryProgressArea, false); + AddControlledRect("SlotContainer", slotContainer, null, InventoryUIAnchorPreset.MiddleCenter, slotContainerSize, slotContainerPos, false, true, true, true, false); + AddControlledRect("RecentLogArea", recentLogArea, null, InventoryUIAnchorPreset.BottomLeft, recentLogSize, recentLogPos, true, testShowRecentLogArea, playShowRecentLogArea, buildShowRecentLogArea, false); + AddControlledRect("DebugPanel", debugPanel, null, InventoryUIAnchorPreset.BottomRight, debugPanelSize, debugPanelPos, true, testShowDebugPanel, playShowDebugPanel, buildShowDebugPanel, false); + AddControlledRect("QuickUseButtons", quickUseButtons, null, InventoryUIAnchorPreset.MiddleRight, quickUseButtonsSize, quickUseButtonsPos, true, testShowQuickUseButtons, playShowQuickUseButtons, buildShowQuickUseButtons, false); + AddControlledRect("TooltipPanel", tooltipPanel, null, InventoryUIAnchorPreset.BottomCenter, tooltipPanelSize, tooltipPanelPos, true, false, false, false, false); + AddControlledRect("AcquisitionPopupPanel", acquisitionPopupPanel, null, InventoryUIAnchorPreset.TopCenter, acquisitionPopupSize, acquisitionPopupPos, true, false, false, false, false); + AddControlledRect("MessagePanel", messagePanel, null, InventoryUIAnchorPreset.BottomCenter, messagePanelSize, messagePanelPos, true, false, false, false, false); + AddControlledRect("ConfirmationPanel", confirmationPanel, null, InventoryUIAnchorPreset.MiddleCenter, confirmationPanelSize, confirmationPanelPos, true, false, false, false, false); + AddControlledRect("DetailPanel", detailPanel, null, InventoryUIAnchorPreset.MiddleRight, detailPanelSize, detailPanelPos, true, false, false, false, false); + + AddGrid("SlotContainer Grid", slotContainer != null ? slotContainer.GetComponent() : null, slotCellSize, slotSpacing, GridLayoutGroup.Constraint.FixedColumnCount, slotColumnCount); + AddGrid("DebugPanel Grid", debugPanel != null ? debugPanel.GetComponent() : null, debugButtonCellSize, debugButtonSpacing, GridLayoutGroup.Constraint.FixedColumnCount, debugButtonColumnCount); + + AddChildrenOfPanelsToInspectorLists(); + } + + [ContextMenu("Inventory UI/Add Current Panel Children Texts Images Buttons")] + public void AddChildrenOfPanelsToInspectorLists() + { + RectTransform[] panels = new[] { inventoryPanel, tooltipPanel, acquisitionPopupPanel, messagePanel, confirmationPanel, detailPanel, recentLogArea, debugPanel }; + + foreach (RectTransform panel in panels) + { + if (panel == null) + continue; + + foreach (TMP_Text text in panel.GetComponentsInChildren(true)) + AddText(text.name, text); + + foreach (Image image in panel.GetComponentsInChildren(true)) + AddImage(image.name, image); + + foreach (Button button in panel.GetComponentsInChildren