Unity拖拽功能开发:OnDrop事件触发时切换图片(附脚本)
拖拽卡牌到槽位时切换图片的实现方案
先修正原脚本中的错误
原DragHandler脚本存在变量名不一致问题(比如itemBeingDragged和itemIsDragged、startPosition和StartPos),先统一变量并完善逻辑,避免运行报错。
修改后的完整脚本
1. 修正后的DragHandler脚本
using UnityEngine; using UnityEngine.EventSystems; public class DragHandler : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { public static GameObject itemBeingDragged; private Vector3 startPosition; private Transform startParent; private CanvasGroup canvasGroup; void Awake() { canvasGroup = GetComponent<CanvasGroup>(); } public void OnBeginDrag(PointerEventData eventData) { itemBeingDragged = gameObject; startPosition = transform.position; startParent = transform.parent; Debug.Log("On Begin Drag"); canvasGroup.blocksRaycasts = false; } public void OnDrag(PointerEventData eventData) { transform.position = Input.mousePosition; } public void OnEndDrag(PointerEventData eventData) { canvasGroup.alpha = 1f; itemBeingDragged = null; // 未放入有效槽位时返回原位置 if (transform.parent == startParent) { transform.position = startPosition; } canvasGroup.blocksRaycasts = true; } }
2. 添加图片切换逻辑的Slot脚本
在原Slot脚本基础上,增加目标图片引用和切换逻辑:
using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class Slot : MonoBehaviour, IDropHandler { // 拖拽到该槽位后要切换的目标图片,在Inspector中赋值 public Sprite targetSprite; public GameObject item { get { return transform.childCount > 0 ? transform.GetChild(0).gameObject : null; } } public void OnDrop(PointerEventData eventData) { if (!item) { GameObject draggedItem = DragHandler.itemBeingDragged; if (draggedItem != null) { // 将卡牌挂载到槽位下 draggedItem.transform.SetParent(transform); draggedItem.transform.localPosition = Vector3.zero; // 对齐槽位中心 // 切换卡牌图片 Image cardImage = draggedItem.GetComponent<Image>(); if (cardImage != null && targetSprite != null) { cardImage.sprite = targetSprite; } } } } }
使用步骤
- 给你的卡牌物体添加
Image组件,并设置初始显示的图片。 - 给卡牌物体添加
CanvasGroup组件(DragHandler会自动获取该组件)。 - 将DragHandler脚本挂载到卡牌物体上,Slot脚本挂载到槽位占位对象上。
- 在Slot物体的Inspector面板中,把
targetSprite设置为你想要切换到的图片资源。
内容的提问来源于stack exchange,提问作者Moazzam ali
相关产品推荐
相关产品推荐

