找到一个游戏对象并检查用户是否点击了它
本文关键字:是否 用户 检查 对象 游戏 一个 | 更新日期: 2023-09-27 18:31:21
我最近一直在为我正在创建的游戏制作UI,但遇到了一个问题。我一直在尝试在新的Unity 4.6中找到一种方法,让用户能够单击玩家卡并让它选择他们单击的玩家。
public void Panel1Click()
{
GameManager.Player1Select ();
}
这就是我目前的做法,当玩家点击面板 1 时调用它,每个面板还有 3 个。
我一直在研究如何找到玩家单击的对象以执行正确的选择代码的不同方法。
if (GameObject.Find ("Panel 1"))
{
print ("Click Panel 1");
GameManager.Player1Select();
}
这是我尝试过的方法之一,但是没有调用任何内容。(因为它只是检查对象是否存在/为真?我认为)。
所有这些方法都链接到面板上的EventSystem
组件。
有没有更有效的方法来压缩所有功能并只检查播放器点击哪个面板?
您可以向游戏对象(精灵)添加碰撞体,然后在 OnMouseDown 函数中测试是否单击了它。
选择卡 --> 向其添加盒式碰撞体 --> 添加单行为脚本并附加到卡 --> 在脚本中,添加函数:
bool bClicked = false;
void OnMouseDown()
{
Debug.Log(gameObject.name + " is clicked");
bClicked = true;
}
您实际上可以为单击处理程序设置一个参数。支持的类型有:int
、float
、string
和object reference
。因此,您可以像这样定义处理程序:
public void SelectCharacter(int character) {
GameManager.PlayerSelect(character)
}
然后只需在事件触发器中设置参数即可。
创建一个脚本并将其放在要与之交互的对象(面板)上,然后尝试此代码。在此示例中,它找到父面板并将其设置为非活动状态
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);
}
}