2016-08-04 2 views
0

Так что я делаю простую игру, чтобы поместить правильный ответ в нужном слоте. который, когда вы кладете правильную наклейку на слот, вы получили оценку. для примера, если вы положили наклейку «a» в слот «b», тогда вы получили точку. а затем наклейку «a», наклейка станет дочерней слот «b». проблема в том, что я использую имя игрового объекта, это не работает, я попытался использовать debug.log, чтобы показать оценку, но он не работает. этот скрипт является компонентом слота. Драгандлер из другого сценария, скрипт является компонентом наклейки. Вот кодКак сравнить имя GameObject в Unity

public void OnDrop (PointerEventData eventData) 
{ 
    if (!item) { 
     DragHandler.itemBeingDragged.transform.SetParent (transform); 
     if (DragHandler.itemBeingDragged.gameObject.name == "b" && DragHandler.itemBeingDragged.transform.parent.name == "slot2") { 
      score = score + 25; 
      nilai = score.ToString(); 
      Debug.Log ("score: "+nilai); 
     }}} 

но когда я использовал этот код, чтобы показать имя слота и наклейки это работа

public void OnDrop (PointerEventData eventData) 
{ 
    if (!item) { 
     DragHandler.itemBeingDragged.transform.SetParent (transform); 
     Debug.Log ("slot: "+DragHandler.itemBeingDragged.transform.parent.name + "item : "+DragHandler.itemBeingDragged.gameObject.name); 
     } 
    } 

это код draghandler

using UnityEngine; 

с использованием System.Collections; с использованием UnityEngine.EventSystems;

класс DragHandler общественности: MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler {

public static GameObject itemBeingDragged; 
Vector3 startPosition; 
Transform startParent; 

#region IBeginDragHandler implementation 

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

#endregion 

#region IDragHandler implementation 
public void OnDrag (PointerEventData eventData) 
{ 
    startPosition = Input.mousePosition; 
    //Debug.Log ("namanya : " + itemBeingDragged.name); 
} 
#endregion 

#region IEndDragHandler implementation 

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

#endregion 

}

Если что-то не хватает с моим объяснением, дайте мне знать. Спасибо.

ответ

0

Я не вижу код для обработчика перетаскивания, но он бросает элемент после его выпуска? Если это так, у него может не быть элемента, который перетаскивается. Поэтому, возможно, когда вы проверите DragHandler.itemBeingDragged, он может вернуть значение null.

+0

Я только что отредактировал свой вопрос с кодом драгандлера. OnEndDrag itembeingdragged = null - это проблема? –

+0

Наверное, да. Возможно, вы проверяете itemBeingDragged после окончания перетаскивания. – LongarMD

Смежные вопросы