diff --git a/BlueWater/Assets/01.Scenes/02.Main.unity b/BlueWater/Assets/01.Scenes/02.Main.unity index 64024d2e1..e3cc88977 100644 --- a/BlueWater/Assets/01.Scenes/02.Main.unity +++ b/BlueWater/Assets/01.Scenes/02.Main.unity @@ -4284,6 +4284,7 @@ MonoBehaviour: _persistent: 0 mouseSpot: {fileID: 1347266192824951316, guid: 049de7a77e0534ced92b672937a0f8db, type: 3} + boat: {fileID: 2987405546353765599, guid: 96173da392e9a408d9aea814b4cfe00e, type: 3} --- !u!4 &107190135 Transform: m_ObjectHideFlags: 0 @@ -9332,6 +9333,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d3be018f5bcd344d2abd41e15265e325, type: 3} m_Name: m_EditorClassIdentifier: + maxDistance: 500 --- !u!114 &212218605 MonoBehaviour: m_ObjectHideFlags: 0 @@ -27911,6 +27913,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d3be018f5bcd344d2abd41e15265e325, type: 3} m_Name: m_EditorClassIdentifier: + maxDistance: 500 --- !u!114 &717949311 MonoBehaviour: m_ObjectHideFlags: 0 @@ -28476,6 +28479,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d3be018f5bcd344d2abd41e15265e325, type: 3} m_Name: m_EditorClassIdentifier: + maxDistance: 500 --- !u!222 &729135463 CanvasRenderer: m_ObjectHideFlags: 0 @@ -70792,7 +70796,7 @@ BoxCollider: m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 3 - m_Size: {x: 100, y: 4, z: 100} + m_Size: {x: 100, y: 0.1, z: 100} m_Center: {x: 0, y: 0, z: 0} --- !u!1 &1561538019 GameObject: @@ -70947,6 +70951,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d3be018f5bcd344d2abd41e15265e325, type: 3} m_Name: m_EditorClassIdentifier: + maxDistance: 500 --- !u!114 &1561538023 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/BlueWater/Assets/02.Scripts/AssaultMode/Boat.cs b/BlueWater/Assets/02.Scripts/AssaultMode/Boat.cs index f34ffaf31..c47daa113 100644 --- a/BlueWater/Assets/02.Scripts/AssaultMode/Boat.cs +++ b/BlueWater/Assets/02.Scripts/AssaultMode/Boat.cs @@ -13,6 +13,8 @@ public class Boat : MonoBehaviour private Coroutine draw; + public Vector3 target { get; set; } + public delegate void LandedEventHandler(); public event LandedEventHandler OnLanded; @@ -28,33 +30,26 @@ public class Boat : MonoBehaviour spot = Instantiate(DataManager.Inst.mouseSpot); } + private void Start() + { + agent.SetDestination(target); + + spot.gameObject.SetActive(true); + spot.transform.position = target; + + if (draw != null) StopCoroutine(draw); + draw = StartCoroutine(DrawPath()); + } + private void Update() { - if (Input.GetMouseButtonDown(0)) - { - var ray = Camera.main.ScreenPointToRay(Input.mousePosition); - RaycastHit hit; - - if (Physics.Raycast(ray, out hit, 1000f)) - { - agent.SetDestination(hit.point); - - spot.gameObject.SetActive(true); - spot.transform.position = hit.point; - - if (draw != null) StopCoroutine(draw); - draw = StartCoroutine(DrawPath()); - } - } - else if (agent.remainingDistance < 0.1f) - { - spot.gameObject.SetActive(false); + if (!(agent.remainingDistance < 0.1f && !agent.pathPending)) return; + spot.gameObject.SetActive(false); - lineRenderer.enabled = false; - if (draw != null) StopCoroutine(draw); + lineRenderer.enabled = false; + if (draw != null) StopCoroutine(draw); - OnLanded?.Invoke(); - } + OnLanded?.Invoke(); } private IEnumerator DrawPath() diff --git a/BlueWater/Assets/02.Scripts/AssaultMode/DraggableCard.cs b/BlueWater/Assets/02.Scripts/AssaultMode/DraggableCard.cs index 4be83d9c3..15a286a54 100644 --- a/BlueWater/Assets/02.Scripts/AssaultMode/DraggableCard.cs +++ b/BlueWater/Assets/02.Scripts/AssaultMode/DraggableCard.cs @@ -1,4 +1,6 @@ using System; +using System.Collections; +using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.EventSystems; @@ -8,6 +10,11 @@ public class DraggableCard : MonoBehaviour, IPointerDownHandler, IDragHandler, I private Vector3 originalScale; private CanvasGroup canvasGroup; + [InfoBox("카드가 작아지는 속도 입니다. 높을수록 천천히 작아집니다.")] [Range(0f, 1000f)] + public float maxDistance = 500f; + + private Coroutine scaleDown; + private void Start() { canvasGroup = GetComponent(); @@ -19,7 +26,9 @@ public class DraggableCard : MonoBehaviour, IPointerDownHandler, IDragHandler, I originalPosition = transform1.position; originalScale = transform1.localScale; canvasGroup.alpha = 0.5f; - transform1.localScale = new Vector3(0.3f, 0.3f, 1f); + //transform1.localScale = new Vector3(0.3f, 0.3f, 1f); + if (scaleDown != null) StopCoroutine(scaleDown); + scaleDown = StartCoroutine(ScaleDown()); } public void OnDrag(PointerEventData eventData) @@ -27,10 +36,9 @@ public class DraggableCard : MonoBehaviour, IPointerDownHandler, IDragHandler, I transform.position = Input.mousePosition; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; - if (Physics.Raycast(ray, out hit) && hit.collider.CompareTag("Ground")) + if (Physics.Raycast(ray, out hit) && hit.collider.CompareTag("Ground")) { // 마우스가 Ground 위에 있을 때 - } } @@ -39,6 +47,12 @@ public class DraggableCard : MonoBehaviour, IPointerDownHandler, IDragHandler, I // 지형에 올바르게 드롭되지 않으면 if (!IsDroppedOnTarget()) { + if (scaleDown != null) + { + StopCoroutine(scaleDown); + scaleDown = null; + } + var transform1 = transform; transform1.position = originalPosition; transform1.localScale = originalScale; @@ -49,16 +63,49 @@ public class DraggableCard : MonoBehaviour, IPointerDownHandler, IDragHandler, I private bool IsDroppedOnTarget() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); - RaycastHit hit; - - if (Physics.Raycast(ray, out hit)) + RaycastHit hit; + + if (Physics.Raycast(ray, out hit)) + { + print(hit.collider.tag); + if (hit.collider.CompareTag("Ground")) { - if (hit.collider.CompareTag("Ground")) - { - Destroy(gameObject); - return true; - } + Destroy(gameObject); + var obj = Instantiate(DataManager.Inst.boat, GameManager.Inst.player.transform.position, + Quaternion.identity); + obj.GetComponent().target = hit.point; + return true; } - return false; + } + + return false; } -} + + private IEnumerator ScaleDown() + { + var originalScale = transform.localScale; + var targetScale = new Vector3(0.3f, 0.3f, 1f); + + while (true) + { + // 현재 위치와 원래 위치 사이의 거리를 계산 + var distance = Vector3.Distance(originalPosition, transform.position); + + // 비율을 계산 (0 = 같은 위치, 1 = maxDistance만큼나 이상 떨어져 있음) + var ratio = Mathf.Min(distance / maxDistance, 1f); + + // SmoothStep 사용하면, 천천히 시작해서 점차 빠르게 변화합니다. + // float의 경우만 사용할 수 있으므로, Vector3의 모든 요소에 일일이 적용해야 합니다. + var newScale = new Vector3( + Mathf.SmoothStep(originalScale.x, targetScale.x, ratio), + Mathf.SmoothStep(originalScale.y, targetScale.y, ratio), + Mathf.SmoothStep(originalScale.z, targetScale.z, ratio) + ); + + // 조정한 스케일을 적용 + transform.localScale = newScale; + + yield return null; + } + } +} \ No newline at end of file diff --git a/BlueWater/Assets/02.Scripts/DataManager.cs b/BlueWater/Assets/02.Scripts/DataManager.cs index 9d57355ea..635548530 100644 --- a/BlueWater/Assets/02.Scripts/DataManager.cs +++ b/BlueWater/Assets/02.Scripts/DataManager.cs @@ -5,4 +5,5 @@ using UnityEngine; public class DataManager : Singleton { public GameObject mouseSpot; + public GameObject boat; } \ No newline at end of file diff --git a/BlueWater/Assets/05.Prefabs/Boat.prefab b/BlueWater/Assets/05.Prefabs/Boat.prefab index 1b57a77b1..e498ad313 100644 --- a/BlueWater/Assets/05.Prefabs/Boat.prefab +++ b/BlueWater/Assets/05.Prefabs/Boat.prefab @@ -53,7 +53,7 @@ BoxCollider: serializedVersion: 2 m_Bits: 0 m_LayerOverridePriority: 0 - m_IsTrigger: 0 + m_IsTrigger: 1 m_ProvidesContacts: 0 m_Enabled: 1 serializedVersion: 3 diff --git a/BlueWater/ProjectSettings/DynamicsManager.asset b/BlueWater/ProjectSettings/DynamicsManager.asset index f832e7963..429c890bc 100644 --- a/BlueWater/ProjectSettings/DynamicsManager.asset +++ b/BlueWater/ProjectSettings/DynamicsManager.asset @@ -18,7 +18,7 @@ PhysicsManager: m_ClothInterCollisionDistance: 0.1 m_ClothInterCollisionStiffness: 0.2 m_ContactsGeneration: 1 - m_LayerCollisionMatrix: 100000001000000010000000100f00001f080000000000000000000000000000080700000807000008070000181000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_LayerCollisionMatrix: 100000001000000010000000381f00001f080000080000000000000000000000080700000807000008070000181000000808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 m_SimulationMode: 0 m_AutoSyncTransforms: 0 m_ReuseCollisionCallbacks: 0