克隆对象打开所有克隆的所有UI菜单

时间:2018-03-03 07:56:23

标签: c# unity3d

所以在统一中我有一个包含画布的预制件

此预制件在运行时实例化,可在整个游戏中多次实例化

现在让我们假设游戏中存在2个预制件Barracks

如果我点击Barracks#1

private void OnBarrackClick(){
        if (Input.GetMouseButtonDown (0) && !GameManager.Instance.buildModeActive) {
            RaycastHit hit;
            if (Physics.Raycast (Camera.main.ScreenPointToRay (Input.mousePosition), out hit, 25.0f, LayerMask.GetMask ("Barrack"))) {
                this.trainingMenu.SetActive (true);
            }
        }
    }

然后我将获得军营#1和#2

的菜单

但是我在这个UI上也有一个退出按钮

public void ExitTrainingMenu(){
        this.trainingMenu.SetActive (false);
    }

通过位于ui上的退出按钮调用此退出功能,只有通过代码调用SetActive功能并显示所有菜单时,它才会退出该兵营的菜单

应该发生的事情只是点击营房的用户界面应该显示

如何修复此错误并了解其原因?

为了更好地证明这一点,我在这里上传了一个视频

http://kot90.altervista.org/survius/display.php?name=IGt6yCrYgV

2 个答案:

答案 0 :(得分:2)

您不会将点击次数与单个建筑物区分开来。你只是在检查...

  1. 鼠标是否已关闭? (两个军营都是如此)
  2. GameManager.Instance.buildModeActive是假的吗? (两个军营都是如此)
  3. 针对" Barrack"的层面罩的光线投射层(两个兵营都是如此)
  4. 如果所有这些事情都过去了,请显示用户界面。

    但你有两个营房。哪一个被击中了?它是我的营房对象还是其他一些军营对象?

答案 1 :(得分:0)

Draco18s已经解释了原因,但实现目标的最简单方法是使用

void OnMouseDown()
{
    Debug.Log("OnMouseDown");
    canvasObject.SetActive(true);
}

注意:确保将对撞机附加到游戏对象。