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; } } }