From 64e326ff1720ceb5e4bdcb9a763f62de8ffbee4f Mon Sep 17 00:00:00 2001
From: SmallFox <2806143047@qq.com>
Date: Sat, 31 Jan 2026 12:31:28 +0800
Subject: Drag
---
Assets/Scripts/PlayerDrag.cs | 70 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 70 insertions(+)
create mode 100644 Assets/Scripts/PlayerDrag.cs
(limited to 'Assets/Scripts/PlayerDrag.cs')
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;
+
+///
+/// 简化版玩家拖拽脚本(Trigger触发判定,仅保留核心拖拽逻辑)
+///
+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();
+ if (dragItem != null)
+ {
+ currentDragItem = dragItem;
+ }
+ }
+
+
+ private void OnTriggerExit(Collider other)
+ {
+ // 如果已在拖拽状态,直接返回(避免拖拽中丢失目标)
+ if (isDragging) return;
+
+ // 确认离开的是当前缓存的物品,清空缓存
+ DragItem dragItem = other.GetComponent();
+ if (dragItem != null && dragItem == currentDragItem)
+ {
+ currentDragItem = null;
+ }
+ }
+}
\ No newline at end of file
--
cgit