summaryrefslogtreecommitdiff
path: root/Assets/Scripts/PlayerDrag.cs
diff options
context:
space:
mode:
authorSmallFox <2806143047@qq.com>2026-01-31 12:31:28 +0800
committerSmallFox <2806143047@qq.com>2026-01-31 12:31:28 +0800
commit64e326ff1720ceb5e4bdcb9a763f62de8ffbee4f (patch)
tree7d2b321fb203b69e928641e5e1c49512bfcb694e /Assets/Scripts/PlayerDrag.cs
parent343a1aa731a85a8a866d0466d29931e5a9c8dfb0 (diff)
Drag
Diffstat (limited to 'Assets/Scripts/PlayerDrag.cs')
-rw-r--r--Assets/Scripts/PlayerDrag.cs70
1 files changed, 70 insertions, 0 deletions
diff --git a/Assets/Scripts/PlayerDrag.cs b/Assets/Scripts/PlayerDrag.cs
new file mode 100644
index 0000000..10300af
--- /dev/null
+++ b/Assets/Scripts/PlayerDrag.cs
@@ -0,0 +1,70 @@
+using UnityEngine;
+
+/// <summary>
+/// 简化版玩家拖拽脚本(Trigger触发判定,仅保留核心拖拽逻辑)
+/// </summary>
+public class PlayerDrag : MonoBehaviour
+{
+ // 拖拽核心配置
+ [SerializeField] private KeyCode grabKey = KeyCode.G; // 抓取按键
+
+ // 临时缓存:当前触发接触的可拖拽物品
+ private DragItem currentDragItem;
+ // 标记是否处于拖拽状态
+ private bool isDragging;
+
+ private void Update()
+ {
+ // 仅检测G键输入,控制抓取/松开(核心逻辑不变)
+ CheckGrabInput();
+ }
+
+
+ private void CheckGrabInput()
+ {
+ // 按下G键:抓取物品(仅当触发接触且未拖拽时生效)
+ if (Input.GetKeyDown(grabKey) && !isDragging && currentDragItem != null)
+ {
+ isDragging = true;
+ currentDragItem.dragger = this.transform; // 给物品赋值拖拽锚点(玩家)
+ }
+
+ // 松开G键:放下物品(解除关联)
+ if (Input.GetKeyUp(grabKey) && isDragging)
+ {
+ isDragging = false;
+ if (currentDragItem != null)
+ {
+ currentDragItem.dragger = null; // 清空物品的拖拽锚点
+ }
+ currentDragItem = null;
+ }
+ }
+
+ private void OnTriggerStay(Collider other)
+ {
+ // 如果已在拖拽状态,直接返回,不处理新物品
+ if (isDragging) return;
+
+ // 尝试获取对方的DragItem组件,缓存为当前可抓取物品
+ DragItem dragItem = other.GetComponent<DragItem>();
+ if (dragItem != null)
+ {
+ currentDragItem = dragItem;
+ }
+ }
+
+
+ private void OnTriggerExit(Collider other)
+ {
+ // 如果已在拖拽状态,直接返回(避免拖拽中丢失目标)
+ if (isDragging) return;
+
+ // 确认离开的是当前缓存的物品,清空缓存
+ DragItem dragItem = other.GetComponent<DragItem>();
+ if (dragItem != null && dragItem == currentDragItem)
+ {
+ currentDragItem = null;
+ }
+ }
+} \ No newline at end of file