繁体   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