2016-09-10 8 views
0

Я делаю головоломку, используя перетащить & падение единства. Кусочек головоломки похож на кусок Тетриса, каждый кусочек головоломки состоит из группы кубов. кусок головоломки нужно перетащить, а затем опустить в слоты отсутствующих кубов структуры (например, прямоугольника).Единство, C#. Как получить все дочерние элементы родителя во время выполнения?

Screenshot of the game

На скриншоте выше показано, что у меня есть группа кубов, названных «block1», который имеет 3 детей/кубы, он также показывает, что игра имеет слоты, где кубики должен быть отброшен. Когда я перетаскиваю «block1», а затем опускаюсь в слоты, он занимает только один слот, зная, что он имеет 3 куба. То, что я хочу, - это когда я уронил блок «block1» (который имеет 3 трех куба) в слоты, я хочу, чтобы каждый куб занимал каждый слот (3 слота). Итак, я думаю, что мне нужно сделать, чтобы получить только детей block1, когда я уронил его на слоты. Когда я перетаскиваю его, я перетаскиваю группу, но когда я бросаю только детей, они получат так, чтобы каждый куб заполнил слот. Мой вопрос в том, как убрать всех детей блока 1 при удалении? В моем slothandler scipt он получает весь блок/часть. Заранее спасибо!

Вот SlotHandler Script

using UnityEngine; 
 
using System.Collections; 
 
using UnityEngine.EventSystems; 
 
using UnityEngine.UI; 
 

 
public class SlotHandler : MonoBehaviour, IDropHandler{ \t 
 
\t 
 

 
\t public GameObject item { 
 
\t \t get { 
 
\t \t \t if(transform.childCount>0){ 
 
\t \t \t \t return transform.GetChild (0).gameObject; 
 
\t \t \t } 
 
\t \t \t return null; 
 
\t \t } 
 
\t } 
 

 
\t #region IDropHandler implementation 
 
\t public void OnDrop (PointerEventData eventData) 
 
\t { 
 
\t \t if(!item){ 
 
\t \t \t DragHandler.piece.transform.SetParent (transform); 
 
\t \t } 
 
\t } 
 
\t #endregion 
 
} 
 

 

и DragHandler Script

using UnityEngine; 
 
using System.Collections; 
 
using UnityEngine.EventSystems; 
 

 
public class DragHandler : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler{ 
 

 
\t public static GameObject piece; 
 
\t Vector3 startPosition; 
 
\t Transform startParent; 
 

 

 
\t #region IBeginDragHandler implementation 
 

 
\t public void OnBeginDrag (PointerEventData eventData) 
 
\t { 
 
\t \t 
 
\t \t piece = gameObject; 
 
\t \t startPosition = transform.position; 
 
\t \t startParent = transform.parent; 
 
\t \t GetComponent<CanvasGroup>().blocksRaycasts = false; 
 

 
\t } 
 

 
\t #region IDragHandler implementation 
 

 
\t public void OnDrag (PointerEventData eventData) 
 
\t { 
 
\t \t transform.position = eventData.position; 
 

 
\t } 
 

 
\t #endregion 
 

 
\t #region IEndDragHandler implementation 
 

 
\t public void OnEndDrag (PointerEventData eventData) 
 
\t { 
 
\t \t piece = null; 
 
\t \t GetComponent<CanvasGroup>().blocksRaycasts = false; 
 
\t \t if(transform.parent == startParent){ 
 
\t \t \t transform.position = startPosition; 
 
\t \t \t GetComponent<CanvasGroup>().blocksRaycasts = true; 
 
\t \t } 
 
\t } 
 

 
\t #endregion 
 

 

 

 
}

ответ

0

вы можете добавить коллайдеров к слотам, и в таранной слушателя, проверьте, если он полностью на месте, а затем изменить родителя так:

transform.parent = [Parent Slot GameObject or Transform] 

но если ты собираешься идти свой путь, до сих пор это не ok.I'm эксперт в этом виде игры, поэтому ... , но основной код остается неподвижным. измените родительский код на один строчный код выше.

если вы хотите куб не иметь родителя вообще, вы можете сказать:

transform.parent = null; 

или если у вас есть родительский объект для всех из них, как я говорю в вашем скриншоте (блоки, панели или canvas), вы можете добавить это как открытый объект к скрипту и сделать его родителем.

public GameObject parent; 

... 

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

извините, но когда я «transform.parent = родителю» имеет ошибку о том, что «Не удается неявно преобразовать тип„UnityEngine.GameObject“до„UnityEngine.GameTransform“. Как я могу решить это? Я просто хочу для разгруппировки блока – Critics

+0

transform.parent = parent.transform –

+0

или вы можете получить преобразование как общедоступную переменную. изменить public var на 'public Transform parent' –