如何统一将一个对象的父级更改为另一个插槽父级?

how to change the parent of an object to another slot parent in unity?

我正在做一个剪刀石头布游戏,但不是众所周知的经典游戏,你有12张牌,每种类型3张蓝色牌(3张纸牌,3张石头牌,3张剪刀牌),2张紫色牌每种类型和最后一张同时包含纸和剪刀的卡片,要开始游戏,您必须将这些卡片排列在插槽中。 经过深思熟虑,我让它与拖放系统一起工作,但我遇到了一些问题:

using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.EventSystems;
 using UnityEngine.UI;
 
 public class DragDrop : MonoBehaviour, IPointerDownHandler,IBeginDragHandler,IEndDragHandler,IDragHandler
 {
     private RectTransform rectTransform;
     private CanvasGroup canvasGroup;
     public Text textField;
     [SerializeField] Canvas canvas;
     private Transform originalPos;
 
 
     private void Awake()
     {   
         rectTransform = GetComponent<RectTransform>();
         canvasGroup = GetComponent<CanvasGroup>();
     }
 
 
     public void OnBeginDrag(PointerEventData eventData)
     {
         canvasGroup.alpha = .5f;
         canvasGroup.blocksRaycasts = false;
         originalPos = transform.parent;
         transform.SetParent(transform.parent.parent);
     }
 
     public void OnDrag(PointerEventData eventData)
     {
         rectTransform.anchoredPosition += eventData.delta / canvas.scaleFactor;
     }
 
     public void OnEndDrag(PointerEventData eventData)
     {
         canvasGroup.alpha = 1f;
         canvasGroup.blocksRaycasts = true;
         transform.SetParent(originalPos);
         transform.localPosition = Vector3.zero;
         if (transform.localPosition == Vector3.zero)
         {
             textField.enabled = true;
         }
         
 
     }
 
     public void OnPointerDown(PointerEventData eventData)
     {
         
         
         textField.enabled = false;
         
         
     }
 }

这里是广告位代码:

using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.EventSystems;
 
 public class slots : MonoBehaviour, IDropHandler
 
 {
     public GameObject slot;
     public void OnDrop(PointerEventData eventData)
     {
         if(eventData.pointerDrag != null) 
         {
             eventData.pointerDrag.GetComponent<RectTransform>().anchoredPosition = GetComponent<RectTransform>().anchoredPosition;
         }
     }
 }

我真的很感激你能帮助我的任何事情,因为我已经被困在这个问题上 2 天了。

在我看来,您好像在 OnEndDrag 方法中将 Transform.parent 设置回 originalPos。您可能应该执行 MouseToWorldPoint 并找到您悬停的对象,然后将父级设置为该 gameObjects 转换。