From fc06825972eeea24edc768eefda2d0f42124cdf3 Mon Sep 17 00:00:00 2001 From: nakjun Date: Fri, 17 Jul 2026 12:45:12 +0900 Subject: [PATCH] =?UTF-8?q?=EB=AC=BC=ED=92=88=EB=93=A4=20=EC=83=81?= =?UTF-8?q?=ED=98=B8=EC=9E=91=EC=9A=A9=20=EB=8B=AC=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/01_Scenes/Hischool_Chapter2.unity | 4 +- .../Communication/Dialog/DialogCondition.cs | 7 ++ Assets/02_Scripts/Managers/StoryManager.cs | 12 +++ Assets/02_Scripts/Mission.meta | 8 ++ Assets/02_Scripts/Mission/Mission.cs | 82 +++++++++++++++++++ Assets/02_Scripts/Mission/Mission.cs.meta | 2 + Assets/02_Scripts/Mission/MissionObjective.cs | 16 ++++ .../Mission/MissionObjective.cs.meta | 2 + .../Mission/MoveItemsToZoneObjective.cs | 67 +++++++++++++++ .../Mission/MoveItemsToZoneObjective.cs.meta | 2 + Assets/02_Scripts/Story/StoryState.cs | 5 ++ .../obj/Basketball/Prefabs/Basketball.prefab | 4 +- .../obj/Box/Prefabs/CardboardBox_LP.prefab | 4 +- .../obj/Cardigan/Prefabs/Cardigan.prefab | 4 +- .../obj/Dumbbell/Prefabs/Dumbbell.prefab | 4 +- .../obj/FoxDoll/Prefabs/FoxDoll.prefab | 4 +- .../Prefabs/Mannequin_Dress.prefab | 4 +- .../obj/Money/Prefabs/Money Stacks.prefab | 4 +- Assets/04_Models/obj/Saw/Prefabs/Saw.prefab | 4 +- .../obj/ScreamMask/Prefabs/MaskV2.prefab | 4 +- .../obj/TeddyBear/Prefabs/TeddyBear.prefab | 4 +- .../obj/ToolBox/Prefabs/ToolBox.prefab | 4 +- .../WaterBottle/Prefabs/WaterBottle.prefab | 4 +- 23 files changed, 229 insertions(+), 26 deletions(-) create mode 100644 Assets/02_Scripts/Mission.meta create mode 100644 Assets/02_Scripts/Mission/Mission.cs create mode 100644 Assets/02_Scripts/Mission/Mission.cs.meta create mode 100644 Assets/02_Scripts/Mission/MissionObjective.cs create mode 100644 Assets/02_Scripts/Mission/MissionObjective.cs.meta create mode 100644 Assets/02_Scripts/Mission/MoveItemsToZoneObjective.cs create mode 100644 Assets/02_Scripts/Mission/MoveItemsToZoneObjective.cs.meta diff --git a/Assets/01_Scenes/Hischool_Chapter2.unity b/Assets/01_Scenes/Hischool_Chapter2.unity index 43050f30..ae410132 100644 --- a/Assets/01_Scenes/Hischool_Chapter2.unity +++ b/Assets/01_Scenes/Hischool_Chapter2.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:067dbedb1ea8169618628246125d83097ba95fe9ab8a3c0324dc0f5e19df122f -size 4197175 +oid sha256:a1bc26b94ab01e58e549882914909d9bd4f8d88d52db31de74d2aa14d63fa449 +size 4184301 diff --git a/Assets/02_Scripts/Communication/Dialog/DialogCondition.cs b/Assets/02_Scripts/Communication/Dialog/DialogCondition.cs index 0e69d885..1086f767 100644 --- a/Assets/02_Scripts/Communication/Dialog/DialogCondition.cs +++ b/Assets/02_Scripts/Communication/Dialog/DialogCondition.cs @@ -23,6 +23,9 @@ public class DialogCondition [Tooltip("골랐어야 하는 선택지 Code들 (전부 필요)")] public List RequiredChoiceCodes = new(); + [Tooltip("완료했어야 하는 미션 Id들 (전부 필요)")] + public List RequiredMissionIds = new(); + [Tooltip("밟았어야 하는 이벤트존 Id들 (전부 필요)")] public List RequiredZoneIds = new(); @@ -54,6 +57,10 @@ public bool IsMet(CharacterData affectionTarget) if (!string.IsNullOrEmpty(code) && !story.HasChosen(code)) return false; + foreach (var missionId in RequiredMissionIds) + if (!string.IsNullOrEmpty(missionId) && !story.IsMissionCompleted(missionId)) + return false; + foreach (var zoneId in RequiredZoneIds) if (!string.IsNullOrEmpty(zoneId) && !story.HasTriggeredZone(zoneId)) return false; diff --git a/Assets/02_Scripts/Managers/StoryManager.cs b/Assets/02_Scripts/Managers/StoryManager.cs index 0a0b6d79..7f3a0b90 100644 --- a/Assets/02_Scripts/Managers/StoryManager.cs +++ b/Assets/02_Scripts/Managers/StoryManager.cs @@ -82,6 +82,18 @@ public void RecordChoice(string code) Changed?.Invoke(); } + // ── 미션 이력 ──────────────────────────────────────────────── + public bool IsMissionCompleted(string missionId) => _state.CompletedMissions.Contains(missionId); + + // 완료 기록. 처음 완료한 경우에만 true (진행도 보상 중복 방지용) + public bool MarkMissionCompleted(string missionId) + { + if (string.IsNullOrEmpty(missionId) || !_state.CompletedMissions.Add(missionId)) + return false; + Changed?.Invoke(); + return true; + } + // ── 이벤트존 이력 ──────────────────────────────────────────── public bool HasTriggeredZone(string zoneId) => _state.TriggeredZones.Contains(zoneId); diff --git a/Assets/02_Scripts/Mission.meta b/Assets/02_Scripts/Mission.meta new file mode 100644 index 00000000..f1827a1f --- /dev/null +++ b/Assets/02_Scripts/Mission.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ea41e03a449add349badcd8bcee6714d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02_Scripts/Mission/Mission.cs b/Assets/02_Scripts/Mission/Mission.cs new file mode 100644 index 00000000..cd6c9593 --- /dev/null +++ b/Assets/02_Scripts/Mission/Mission.cs @@ -0,0 +1,82 @@ +using UnityEngine; +using UnityEngine.Events; + +// 미션 하나. 자식의 MissionObjective들이 전부 완료되면 미션이 완료된다. +// 시작은 Activate()를 UnityEvent(대화 노드 이벤트, 이벤트존, 버튼 등)로 호출하거나 +// ActivateOnStart를 켠다. 완료는 StoryState에 영구 기록되므로 +// DialogCondition의 RequiredMissionIds로 대화 활성화 조건에 쓸 수 있다. +public class Mission : MonoBehaviour +{ + public enum MissionState { Inactive, Active, Completed } + + [Tooltip("StoryState에 기록되는 Id. 비워두면 오브젝트 이름 사용 (DialogCondition의 RequiredMissionIds에서 참조)")] + [SerializeField] private string _id; + + [Tooltip("씬 시작 시 자동으로 시작. 끄면 Activate()를 대화 노드 이벤트/존/버튼 등에서 호출할 것")] + [SerializeField] private bool _activateOnStart; + + [Tooltip("이 미션을 처음 완료하면 메인 진행도 +N")] + [Min(0)] [SerializeField] private int _progressOnComplete; + + [Header("Events")] + public UnityEvent OnActivated; // 미션 시작 시 (안내 대사, 미션 UI 표시 등) + public UnityEvent OnCompleted; // 미션 완료 시 (보상 대사, VFX, UI 숨김 등) + + public MissionState State { get; private set; } = MissionState.Inactive; + public string Id => string.IsNullOrEmpty(_id) ? name : _id; + + private MissionObjective[] _objectives; + + private void Awake() + { + _objectives = GetComponentsInChildren(true); + foreach (var objective in _objectives) + objective.Changed += Reevaluate; + } + + private void Start() + { + // 저장된 상태에 이미 완료로 기록돼 있으면(이어하기 등) 이벤트 없이 완료 상태로 시작 + if (StoryManager.Instance.IsMissionCompleted(Id)) + State = MissionState.Completed; + else if (_activateOnStart) + Activate(); + } + + // UnityEvent 연결용 — 대화의 '수락' 노드 이벤트 등에서 호출 + public void Activate() + { + if (State != MissionState.Inactive) return; + if (StoryManager.Instance.IsMissionCompleted(Id)) + { + State = MissionState.Completed; + return; + } + + State = MissionState.Active; + OnActivated?.Invoke(); + Reevaluate(); // 이미 조건이 갖춰져 있을 수도 있다 (물건을 미리 옮겨둔 경우) + } + + private void Reevaluate() + { + if (State != MissionState.Active) return; + foreach (var objective in _objectives) + if (!objective.IsComplete) return; + Complete(); + } + + private void Complete() + { + State = MissionState.Completed; + + var story = StoryManager.Instance; + bool firstTime = story.MarkMissionCompleted(Id); + if (firstTime && _progressOnComplete > 0) + story.MainProgress += _progressOnComplete; + story.Save(); + + OnCompleted?.Invoke(); + Debug.Log($"[Mission] 완료: {Id}"); + } +} diff --git a/Assets/02_Scripts/Mission/Mission.cs.meta b/Assets/02_Scripts/Mission/Mission.cs.meta new file mode 100644 index 00000000..7cbfc18d --- /dev/null +++ b/Assets/02_Scripts/Mission/Mission.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d878a406b99ed614bbbce6a14c14f8c2 \ No newline at end of file diff --git a/Assets/02_Scripts/Mission/MissionObjective.cs b/Assets/02_Scripts/Mission/MissionObjective.cs new file mode 100644 index 00000000..48388550 --- /dev/null +++ b/Assets/02_Scripts/Mission/MissionObjective.cs @@ -0,0 +1,16 @@ +using System; +using UnityEngine; + +// 미션 목표 하나의 베이스. Mission 오브젝트의 자식으로 두면 자동 수집된다. +// 새 종류의 미션이 필요하면 이걸 상속해서 IsComplete 구현 + 상태가 바뀔 때 +// RaiseChanged()만 호출하면 된다 (예: 물건 옮기기, 특정 위치 방문, NPC에게 아이템 전달). +public abstract class MissionObjective : MonoBehaviour +{ + // 목표 달성 여부 — 되돌릴 수 있는 목표(물건을 도로 빼는 등)는 false로 돌아가도 된다. + // 미션 완료는 "모든 목표가 동시에 true"인 순간 Mission 쪽에서 확정(래치)된다. + public abstract bool IsComplete { get; } + + // 달성 상태가 바뀔 때마다 발행 — Mission이 구독해서 완료를 재판정한다 + public event Action Changed; + protected void RaiseChanged() => Changed?.Invoke(); +} diff --git a/Assets/02_Scripts/Mission/MissionObjective.cs.meta b/Assets/02_Scripts/Mission/MissionObjective.cs.meta new file mode 100644 index 00000000..99c01e7d --- /dev/null +++ b/Assets/02_Scripts/Mission/MissionObjective.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 6486c131b8f11624fbd409cea08cbbde \ No newline at end of file diff --git a/Assets/02_Scripts/Mission/MoveItemsToZoneObjective.cs b/Assets/02_Scripts/Mission/MoveItemsToZoneObjective.cs new file mode 100644 index 00000000..52d68654 --- /dev/null +++ b/Assets/02_Scripts/Mission/MoveItemsToZoneObjective.cs @@ -0,0 +1,67 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +// "지정한 물건들을 전부 이 존 안으로 옮기기" 목표. +// 트리거 콜라이더가 붙은 존 오브젝트에 추가하고 물건들을 목록에 등록한다. +// 물건 쪽에 Rigidbody가 있어야 트리거 이벤트가 발생한다 (XRGrabInteractable이면 이미 있음). +[RequireComponent(typeof(Collider))] +public class MoveItemsToZoneObjective : MissionObjective +{ + [Tooltip("이 존 안으로 옮겨야 하는 물건들 (씬 오브젝트 루트)")] + [SerializeField] private List _requiredItems = new(); + + [Tooltip("들어온 개수가 바뀔 때마다 (현재 개수, 전체 개수) — 진행 UI 연결용")] + public UnityEvent OnCountChanged; + + [Tooltip("대사 텍스트에서 {키}로 진행 상황을 쓰려면 키 이름 지정 (값 예: \"3/5\"). 비우면 안 씀")] + [SerializeField] private string _dialogVariableKey; + + private readonly HashSet _inside = new(); + + public int Count => _inside.Count; + public int Total => _requiredItems.Count; + public override bool IsComplete => Count >= Total; + + private void Awake() + { + var col = GetComponent(); + if (!col.isTrigger) + Debug.LogWarning($"[MoveItemsToZoneObjective] 콜라이더가 트리거가 아님: {name}"); + } + + private void Start() => Publish(); // UI/대사 변수 초기값 (0/N) + + private void OnTriggerEnter(Collider other) + { + var item = FindRequiredItem(other); + if (item != null && _inside.Add(item)) Publish(); + } + + private void OnTriggerExit(Collider other) + { + var item = FindRequiredItem(other); + if (item != null && _inside.Remove(item)) Publish(); + } + + // 콜라이더에서 등록된 물건을 찾는다 (자식 콜라이더 대응 — 부모로 거슬러 올라가며 확인) + private Transform FindRequiredItem(Collider col) + { + var t = col.attachedRigidbody != null ? col.attachedRigidbody.transform : col.transform; + while (t != null) + { + if (_requiredItems.Contains(t)) return t; + t = t.parent; + } + return null; + } + + private void Publish() + { + _inside.RemoveWhere(t => t == null); // 파괴된 물건 정리 + if (!string.IsNullOrEmpty(_dialogVariableKey)) + DialogVariables.Set(_dialogVariableKey, $"{Count}/{Total}"); + OnCountChanged?.Invoke(Count, Total); + RaiseChanged(); + } +} diff --git a/Assets/02_Scripts/Mission/MoveItemsToZoneObjective.cs.meta b/Assets/02_Scripts/Mission/MoveItemsToZoneObjective.cs.meta new file mode 100644 index 00000000..97588dd5 --- /dev/null +++ b/Assets/02_Scripts/Mission/MoveItemsToZoneObjective.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 2c0d5ca4a604f5142873570997cb5fac \ No newline at end of file diff --git a/Assets/02_Scripts/Story/StoryState.cs b/Assets/02_Scripts/Story/StoryState.cs index cbe7b41f..1e055597 100644 --- a/Assets/02_Scripts/Story/StoryState.cs +++ b/Assets/02_Scripts/Story/StoryState.cs @@ -11,6 +11,7 @@ public class StoryState public readonly HashSet CompletedDialogs = new(); // 완료한 DialogGroup 이름 public readonly HashSet ChosenCodes = new(); // 골랐던 선택지 Code public readonly HashSet TriggeredZones = new(); // 밟았던 이벤트 존(Timeline/Trigger) Id + public readonly HashSet CompletedMissions = new(); // 완료한 미션 Id public void Clear() { @@ -19,6 +20,7 @@ public void Clear() CompletedDialogs.Clear(); ChosenCodes.Clear(); TriggeredZones.Clear(); + CompletedMissions.Clear(); } // ── JSON 변환 ──────────────────────────────────────────────── @@ -32,6 +34,7 @@ private class JsonData public List CompletedDialogs = new(); public List ChosenCodes = new(); public List TriggeredZones = new(); + public List CompletedMissions = new(); } public string ToJson() @@ -45,6 +48,7 @@ public string ToJson() data.CompletedDialogs.AddRange(CompletedDialogs); data.ChosenCodes.AddRange(ChosenCodes); data.TriggeredZones.AddRange(TriggeredZones); + data.CompletedMissions.AddRange(CompletedMissions); return JsonUtility.ToJson(data, prettyPrint: true); } @@ -60,6 +64,7 @@ public static StoryState FromJson(string json) state.CompletedDialogs.UnionWith(data.CompletedDialogs); state.ChosenCodes.UnionWith(data.ChosenCodes); state.TriggeredZones.UnionWith(data.TriggeredZones); + state.CompletedMissions.UnionWith(data.CompletedMissions); return state; } } diff --git a/Assets/04_Models/obj/Basketball/Prefabs/Basketball.prefab b/Assets/04_Models/obj/Basketball/Prefabs/Basketball.prefab index 34bc7958..1af6d97c 100644 --- a/Assets/04_Models/obj/Basketball/Prefabs/Basketball.prefab +++ b/Assets/04_Models/obj/Basketball/Prefabs/Basketball.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5cf537c8aec4286d46ba7df602f65a74a9dc16e28d66bff983d152c539794f04 -size 3019 +oid sha256:2c29ac753db4b2f399f78d8af7d36d5155d74a717d667ad0d50502639aeca9a5 +size 17475 diff --git a/Assets/04_Models/obj/Box/Prefabs/CardboardBox_LP.prefab b/Assets/04_Models/obj/Box/Prefabs/CardboardBox_LP.prefab index b0dd773c..a308aa5e 100644 --- a/Assets/04_Models/obj/Box/Prefabs/CardboardBox_LP.prefab +++ b/Assets/04_Models/obj/Box/Prefabs/CardboardBox_LP.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:141a55adaee59f60e84e9e15f79fdfa7b9eadc6924444354b156c7871bcf1b87 -size 2480 +oid sha256:3d7533fd645ed4d6a2231a64f6e7a2c242ad627d56d8cbe61f3b94d0a6a02e83 +size 16957 diff --git a/Assets/04_Models/obj/Cardigan/Prefabs/Cardigan.prefab b/Assets/04_Models/obj/Cardigan/Prefabs/Cardigan.prefab index bf075382..89f095a0 100644 --- a/Assets/04_Models/obj/Cardigan/Prefabs/Cardigan.prefab +++ b/Assets/04_Models/obj/Cardigan/Prefabs/Cardigan.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ed349dd18530445f9f3eb8da7ab88dd7161baaa08969043a4134d8216e3f83be -size 2476 +oid sha256:57b0a77247675428d609c112e9fe9c5edae6e967007d448bb9cdf9256782bf07 +size 16979 diff --git a/Assets/04_Models/obj/Dumbbell/Prefabs/Dumbbell.prefab b/Assets/04_Models/obj/Dumbbell/Prefabs/Dumbbell.prefab index 3646cda0..d279edf6 100644 --- a/Assets/04_Models/obj/Dumbbell/Prefabs/Dumbbell.prefab +++ b/Assets/04_Models/obj/Dumbbell/Prefabs/Dumbbell.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0514c9b280ba97caf5abde72aa776579fb1a8b4835dcc9edc55c84794173d2e5 -size 2469 +oid sha256:d76b3e2ba7dfda6f3af454869489020cce2cc357d373eab5957d37e5acb7eab6 +size 16976 diff --git a/Assets/04_Models/obj/FoxDoll/Prefabs/FoxDoll.prefab b/Assets/04_Models/obj/FoxDoll/Prefabs/FoxDoll.prefab index 57a2a102..c62310d7 100644 --- a/Assets/04_Models/obj/FoxDoll/Prefabs/FoxDoll.prefab +++ b/Assets/04_Models/obj/FoxDoll/Prefabs/FoxDoll.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c21ed85d92fade8fa570eef4c5269f0e77a0b8dad021093acd402852f522806e -size 3026 +oid sha256:48d8e8d15cbb913823b814a53a0b68bc6dfe1135bc087d9a3842300661205501 +size 17508 diff --git a/Assets/04_Models/obj/Mannequin_Dress/Prefabs/Mannequin_Dress.prefab b/Assets/04_Models/obj/Mannequin_Dress/Prefabs/Mannequin_Dress.prefab index d5c8daec..635e990a 100644 --- a/Assets/04_Models/obj/Mannequin_Dress/Prefabs/Mannequin_Dress.prefab +++ b/Assets/04_Models/obj/Mannequin_Dress/Prefabs/Mannequin_Dress.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:133200c2fd0bc0cb1d35350b324b016dc01807811ab7c6c40757f422ea969ea6 -size 2480 +oid sha256:df387a4eab50feb82d6da961a2a2111919da6c8838592aae49ee8225f17ac70f +size 16957 diff --git a/Assets/04_Models/obj/Money/Prefabs/Money Stacks.prefab b/Assets/04_Models/obj/Money/Prefabs/Money Stacks.prefab index 0fc69b47..b5492061 100644 --- a/Assets/04_Models/obj/Money/Prefabs/Money Stacks.prefab +++ b/Assets/04_Models/obj/Money/Prefabs/Money Stacks.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:312694cc458ce2ad74434f8dff58a843ad7b4f97f5d90ec12a98e50c4bf86372 -size 2497 +oid sha256:354079b09d7f09024048a1364b49d34e449e1ac8e37d16f3d1a186bdadf8895b +size 17355 diff --git a/Assets/04_Models/obj/Saw/Prefabs/Saw.prefab b/Assets/04_Models/obj/Saw/Prefabs/Saw.prefab index a58b5060..49a628e6 100644 --- a/Assets/04_Models/obj/Saw/Prefabs/Saw.prefab +++ b/Assets/04_Models/obj/Saw/Prefabs/Saw.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1439f0d17f6486a6a7ca865e443ab57b458475d2e2b6c18ca6de7a50490ce1b7 -size 3269 +oid sha256:1869332ff82cdc6deccf8189b53897ff166bb11f1dc639c9028f539bda148195 +size 17779 diff --git a/Assets/04_Models/obj/ScreamMask/Prefabs/MaskV2.prefab b/Assets/04_Models/obj/ScreamMask/Prefabs/MaskV2.prefab index b624aa6a..45c7a4a7 100644 --- a/Assets/04_Models/obj/ScreamMask/Prefabs/MaskV2.prefab +++ b/Assets/04_Models/obj/ScreamMask/Prefabs/MaskV2.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2b190105b8052c0213a403000aae8f44940b575910fe15dcb5aecd7e86beac1e -size 2474 +oid sha256:d6d7022d6333bbb135e468e0788f98ca1cb68f98c93af7865dfe409a0882f82c +size 17552 diff --git a/Assets/04_Models/obj/TeddyBear/Prefabs/TeddyBear.prefab b/Assets/04_Models/obj/TeddyBear/Prefabs/TeddyBear.prefab index 8c7452bb..d5bc2538 100644 --- a/Assets/04_Models/obj/TeddyBear/Prefabs/TeddyBear.prefab +++ b/Assets/04_Models/obj/TeddyBear/Prefabs/TeddyBear.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:abdfff873dc389ed104e8cba5270622f2f49050aeac92b9dceb3dc89565728f4 -size 2478 +oid sha256:4bcc15228373b34ae9caa3f78607776f2d11a5130776b214960bd2a4a7d102ae +size 16951 diff --git a/Assets/04_Models/obj/ToolBox/Prefabs/ToolBox.prefab b/Assets/04_Models/obj/ToolBox/Prefabs/ToolBox.prefab index e2bcda2a..86aa743c 100644 --- a/Assets/04_Models/obj/ToolBox/Prefabs/ToolBox.prefab +++ b/Assets/04_Models/obj/ToolBox/Prefabs/ToolBox.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d3b94002b22862aea64d3c80dec6113a3c503e92c728d8e68be94529393bb46b -size 3022 +oid sha256:30b7a9152135e8b8184fb88749b4548e6f87b874409a7fcd880b3521384a51c2 +size 17504 diff --git a/Assets/04_Models/obj/WaterBottle/Prefabs/WaterBottle.prefab b/Assets/04_Models/obj/WaterBottle/Prefabs/WaterBottle.prefab index fdae34c4..5f7e2a2e 100644 --- a/Assets/04_Models/obj/WaterBottle/Prefabs/WaterBottle.prefab +++ b/Assets/04_Models/obj/WaterBottle/Prefabs/WaterBottle.prefab @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:99d6720d08476764ddc7bf6237d87505b35ee665b153e43f97fc310a8c7d5edb -size 2496 +oid sha256:25357ed9e0cef9e15c429a0fa6dbde5a9be8a78cf19e27d410d709ff9ef45626 +size 17345