簡體   English   中英

找到一個GameObject並檢查用戶是否單擊了它

[英]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組件。

有沒有更有效的方法來濃縮所有功能並僅檢查播放器單擊哪個面板?

實際上,您的點擊處理程序可以有一個參數。 支持的類型為: intfloatstringobject 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM