找到GameObject并检查用户是否已单击它

时间:2014-11-21 18:39:45

标签: c# unity3d

我最近一直在制作我正在制作的游戏的用户界面并遇到了问题。 我一直试图在新的Unity 4.6中找到一种方法,让用户能够点击一张播放器卡并让它选择他们点击的播放器。

public void Panel1Click()
{
    GameManager.Player1Select ();
}

这就是我现在这样做的方式,当玩家点击Panel 1时会调用它,每个人还有3个。

我一直在研究如何找到玩家点击执行正确选择代码的对象的不同方法。

if (GameObject.Find ("Panel 1")) 
{
    print ("Click Panel 1");
    GameManager.Player1Select();
} 

这是我尝试的方法之一,但没有任何东西被调用。 (因为它只是检查对象是否存在/是真的吗?我想)。

所有这些方法都链接到面板上的EventSystem组件。

是否有更有效的方法来缩小所有功能,只需检查玩家点击哪个面板?

3 个答案:

答案 0 :(得分:0)

您实际上可以为点击处理程序提供一个参数。支持的类型包括:intfloatstringobject reference。所以你可以这样定义你的处理程序:

public void SelectCharacter(int character) {
    GameManager.PlayerSelect(character)
}

然后只需在事件触发器中设置参数。

答案 1 :(得分:0)

你可以在游戏对象(精灵)中添加一个碰撞器,然后在 OnMouseDown 函数中测试它是否被点击。

选择卡片 - >添加一个盒子对撞机 - >添加MonoBehaviour脚本并附加到卡上 - >在脚本中,添加功能:

 bool bClicked = false;
 void OnMouseDown()
 {
     Debug.Log(gameObject.name + " is clicked");        
     bClicked = true;
 }

答案 2 :(得分:0)

创建一个脚本,并将其放在要与之交互的对象(面板)上,然后尝试使用此代码。在此示例中,它找到了父面板并将其设置为非活动

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);
    }

}