[英]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.