Unity,C#。如何在运行时获取父项的所有子项?

时间:2016-09-10 10:29:53

标签: c# unity3d block puzzle

我正在使用drag& amp;团结一致。拼图就像俄罗斯方块,每个拼图由一组立方体组成。需要拖动拼图块,然后将其放入结构缺失立方体的槽中(例如矩形)。

Screenshot of the game

上面的截图说明我有一组名为" block1"它有3个孩子/立方体,它还说明游戏中有需要丢弃立方体的插槽。当我拖动" block1"然后掉入插槽,它只占用一个插槽,知道它有3个立方体。我想要的是当我放弃" block1" (它有3个三个立方体)进入插槽我希望每个立方体占据每个插槽(3个插槽)。所以,我认为我需要做的是当我把它放在插槽上时只获得block1的子节点。当我拖动它时,我拖动一个组但是当我放下时只有孩子会得到这样,每个立方体将填充一个插槽。我的问题是,如何让block1的所有孩子掉线?在我的slothandler scipt中它获得了整个块/块。提前谢谢!

这里是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



}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

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

transform.parent = [Parent Slot GameObject or Transform]

但如果你要按照自己的方式行事,那还可以。我不是这类游戏的专家,所以...... 但主要代码保持不变。使用上面的一行代码更改父级。

如果你想让立方体根本没有父母,你可以说:

transform.parent = null;

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

public GameObject parent;

...

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