团结,c#.如何在运行时获得父类的所有子类

本文关键字:父类 子类 运行时 团结 | 更新日期: 2023-09-27 18:06:24

我正在制作一个使用拖拽&团结一致。拼图就像俄罗斯方块,每个拼图都是由一组立方体组成的。拼图需要被拖拽,然后放入结构中缺失的立方体的插槽中(例如:矩形)。

游戏截图

上面的截图说明了我有一组名为"block1"的立方体,它有3个孩子/立方体,它还说明了游戏中有需要丢弃立方体的插槽。当我拖拽"block1"然后放入槽中,它只占用一个槽,因为它知道它有3个立方体。我想要的是,当我将"block1"(它有3个立方体)放入槽中时,我希望每个立方体占据每个槽(3个槽)。所以,我想我需要做的是,当我把block1丢到槽里时,只得到它的子结点。当我拖拽它的时候,我拖拽了一组,但是当我放下它的时候,只有子立方体会得到,所以每个立方体都会填满一个槽。我的问题是,如何让block1 on的所有子元素被删除?在我的slothandler脚本中,它获得了整个块/块。提前感谢!

SlotHandler脚本

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class SlotHandler : MonoBehaviour, IDropHandler{	
	
	public GameObject item {
		get {
			if(transform.childCount>0){
				return transform.GetChild (0).gameObject;
			}
			return null;
		}
	}
	#region IDropHandler implementation
	public void OnDrop (PointerEventData eventData)
	{
		if(!item){
			DragHandler.piece.transform.SetParent (transform);
		}
	}
	#endregion
}
 

和DragHandler脚本

using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class DragHandler : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler{
	public static GameObject piece;
	Vector3 startPosition;
	Transform startParent;
	#region IBeginDragHandler implementation
	public void OnBeginDrag (PointerEventData eventData)
	{
		
		piece = gameObject;
		startPosition = transform.position;
		startParent = transform.parent;
		GetComponent<CanvasGroup>().blocksRaycasts = false;
	}
	#region IDragHandler implementation
	public void OnDrag (PointerEventData eventData)
	{
		transform.position = eventData.position;
	}
	#endregion
	#region IEndDragHandler implementation
	public void OnEndDrag (PointerEventData eventData)
	{
		piece = null;
		GetComponent<CanvasGroup>().blocksRaycasts = false;
		if(transform.parent == startParent){
			transform.position = startPosition;
			GetComponent<CanvasGroup>().blocksRaycasts = true;
		}
	}
	#endregion
}

团结,c#.如何在运行时获得父类的所有子类

你可以将碰撞器添加到插槽中,并在碰撞侦听器中检查它是否完全到位,然后像这样更改父类:

transform.parent = [Parent Slot GameObject or Transform]

但是如果你要走你的路,那也没关系。我不是这方面的专家,所以…但是主代码保持不变。用上面的一行代码修改父节点。

如果你想让多维数据集没有父元素,你可以说:

transform.parent = null;

或者如果你有所有这些的父对象,就像我在你的截图中说的(块,面板或画布),你可以将其作为公共对象添加到脚本中,并使其成为父对象。

public GameObject parent;
...
// when you wanna ungroup the objects
transform.parent = parent;