网站开发个人博客,唐山建设集团招聘信息网站,企业所得税最新政策,电商小程序平台在Unity中#xff0c;背包系统是一种常见的游戏系统#xff0c;可以用于管理和展示玩家所持有的物品、道具或装备。
其中的拖拽功能非常有意思#xff0c;具体功能就是玩家可以通过拖拽物品图标来移动物品在背包中的位置#xff0c;或者将物品拖拽到其他位置或界面中…在Unity中背包系统是一种常见的游戏系统可以用于管理和展示玩家所持有的物品、道具或装备。
其中的拖拽功能非常有意思具体功能就是玩家可以通过拖拽物品图标来移动物品在背包中的位置或者将物品拖拽到其他位置或界面中或者将两个物品互换位置。
具体是如何实现的呢下面我们就来简单说说。
1、搭建个简单背包格子和物品 2、核心部分控制脚本
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections.Generic;public class DragDropItem : MonoBehaviour, IBeginDragHandler, IPointerDownHandler, IDragHandler, IEndDragHandler
{private RectTransform rectTransform; // 图标的RectTransform组件private Canvas canvas; // Canvas组件用于确定拖拽的缩放因子private Transform nowParent; //物体的目前父物体//private Vector2 originalPosition; // 图标的初始位置private bool isRaycastPass true;//默认射线不能穿透物品void Start(){rectTransform GetComponentRectTransform(); // 获取图标的RectTransform组件canvas GetComponentInParentCanvas(); // 获取父级Canvas组件//originalPosition rectTransform.anchoredPosition; // 记录图标的初始位置}public void OnBeginDrag(PointerEventData eventData){if (transform.GetComponentImage().raycastTarget) transform.GetComponentImage().raycastTarget false;nowParent transform.parent; //nowparent为被拖拽物体的当前父物体 transform.SetParent(canvas.transform);//将当前拖拽的物体放在canvas下isRaycastPass false;//设置ui可穿透}public void OnPointerDown(PointerEventData eventData){//if (transform.GetComponentImage().raycastTarget) transform.GetComponentImage().raycastTarget false;//originalPosition rectTransform.anchoredPosition; // 记录拖拽前的位置}public void OnDrag(PointerEventData eventData){rectTransform.anchoredPosition eventData.delta / canvas.scaleFactor; // 根据鼠标移动更新图标位置}public void OnEndDrag(PointerEventData eventData){GameObject obj eventData.pointerCurrentRaycast.gameObject;//获取到鼠标终点位置下的物体 if (obj ! null){if (obj.tag selected){// 检测到物体是指定的空格子则把物体放到该格子下。transform.SetParent(obj.transform);transform.position obj.transform.position; // 将图标移到放置位置 }else if(obj.tag weapon){// 检测到格子已有物体则物体替换位置。transform.SetParent(obj.transform.parent);transform.position obj.transform.parent.position; obj.transform.SetParent(nowParent);obj.transform.position nowParent.position;}else{transform.SetParent(nowParent);transform.position nowParent.position; // 如果没有合法放置位置将图标返回到初始位置}}else{transform.SetParent(nowParent);transform.position nowParent.position; // 如果没有合法放置位置将图标返回到初始位置}transform.GetComponentImage().raycastTarget true;isRaycastPass true;//设置ui不可穿透}}3、把脚本赋予每一个物品
4、至此背包系统中拖拽物体到指定位置或互换位置的效果就实现了。 Unity 背包系统中拖拽物体到指定位置或互换位置效果的实现