Я делаю головоломку, используя перетащить & падение единства. Кусочек головоломки похож на кусок Тетриса, каждый кусочек головоломки состоит из группы кубов. кусок головоломки нужно перетащить, а затем опустить в слоты отсутствующих кубов структуры (например, прямоугольника).Единство, C#. Как получить все дочерние элементы родителя во время выполнения?
На скриншоте выше показано, что у меня есть группа кубов, названных «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
}
извините, но когда я «transform.parent = родителю» имеет ошибку о том, что «Не удается неявно преобразовать тип„UnityEngine.GameObject“до„UnityEngine.GameTransform“. Как я могу решить это? Я просто хочу для разгруппировки блока – Critics
transform.parent = parent.transform –
или вы можете получить преобразование как общедоступную переменную. изменить public var на 'public Transform parent' –