团结,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
}
你可以将碰撞器添加到插槽中,并在碰撞侦听器中检查它是否完全到位,然后像这样更改父类:
transform.parent = [Parent Slot GameObject or Transform]
但是如果你要走你的路,那也没关系。我不是这方面的专家,所以…但是主代码保持不变。用上面的一行代码修改父节点。
如果你想让多维数据集没有父元素,你可以说:
transform.parent = null;
或者如果你有所有这些的父对象,就像我在你的截图中说的(块,面板或画布),你可以将其作为公共对象添加到脚本中,并使其成为父对象。
public GameObject parent;
...
// when you wanna ungroup the objects
transform.parent = parent;