[英]Find a GameObject and check if the user has clicked on it
我最近一直在為自己正在創建的游戲制作UI,但遇到了問題。 我一直在嘗試在新的Unity 4.6中找到一種方法,使用戶能夠單擊播放器卡並讓其選擇他們單擊的播放器。
public void Panel1Click()
{
GameManager.Player1Select ();
}
這是我目前的操作方式,當播放器單擊面板1時調用此名稱,每個面板還有3個。
我一直在研究不同的方法,如何找到玩家單擊的對象,然后執行正確的選擇代碼。
if (GameObject.Find ("Panel 1"))
{
print ("Click Panel 1");
GameManager.Player1Select();
}
這是我嘗試過的方法之一,但是什么也沒叫。 (因為它只是檢查對象是否存在/是真的?我想)。
所有這些方法都鏈接到面板上的EventSystem
組件。
有沒有更有效的方法來濃縮所有功能並僅檢查播放器單擊哪個面板?
實際上,您的點擊處理程序可以有一個參數。 支持的類型為: int
, float
, string
和object reference
。 因此,您可以這樣定義處理程序:
public void SelectCharacter(int character) {
GameManager.PlayerSelect(character)
}
然后只需在事件觸發器中設置參數即可。
您可以將對撞機添加到游戲對象(精靈),然后在OnMouseDown函數中測試是否單擊了對撞機。
選擇卡->向其中添加盒對撞機->添加MonoBehaviour腳本並附加到卡上->在腳本中,添加功能:
bool bClicked = false;
void OnMouseDown()
{
Debug.Log(gameObject.name + " is clicked");
bClicked = true;
}
創建一個腳本並將其放在要與之交互的對象(面板)上,然后嘗試使用此代碼。 在此示例中,它找到父面板並將其設置為非活動狀態
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class CloseInventory : MonoBehaviour, IPointerDownHandler
{
GameObject inventoryPanel;
// Use this for initialization
void Start()
{
inventoryPanel = GameObject.Find("Inventory Panel");
}
public void OnPointerDown(PointerEventData eventData)
{
//SET WHAT TO DO HERE
inventoryPanel.SetActive(false);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.