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

C# 克隆对象打开所有克隆的所有UI菜单,c#,unity3d,C#,Unity3d,所以在unity中,我有一个包含画布的预置 这个预置是在运行时安装的,可以在整个游戏中多次实例化 现在让我们假设游戏中存在两个预制的营房 如果我点击兵营#1 private void OnBarrackClick(){ if(Input.GetMouseButtonDown(0)&&!GameManager.Instance.buildModeActive){ 雷卡斯特击中; if(Physics.Raycast(Camera.main.screenpointoray(Input.mousePo

所以在unity中,我有一个包含画布的预置

这个预置是在运行时安装的,可以在整个游戏中多次实例化

现在让我们假设游戏中存在两个预制的营房

如果我点击兵营#1

private void OnBarrackClick(){
if(Input.GetMouseButtonDown(0)&&!GameManager.Instance.buildModeActive){
雷卡斯特击中;
if(Physics.Raycast(Camera.main.screenpointoray(Input.mousePosition)、outhit、25.0f、LayerMask.GetMask(“兵营”)){
this.trainingMenu.SetActive(真);
}
}
}
然后,我将获得营房1和营房2的菜单

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

public void退出训练菜单(){
this.trainingMenu.SetActive(假);
}
此退出功能通过ui上的退出按钮调用,它仅退出该营房的菜单,而
SetActive
功能通过代码调用并显示所有菜单

应该发生的是,只显示被单击的营房的UI

我该如何修复这个bug以及它的原因是什么

为了更好地演示这一点,我在这里上传了一段视频


您没有将您的点击与单个建筑区分开来。你只是在检查

  • 老鼠下来了吗?(两个兵营都是如此)
  • GameManager.Instance.buildMode是否处于活动状态
    false?(两个兵营都是如此)
  • 针对“兵营”层的层遮罩进行光线投射(这对两个兵营都适用)
  • 如果所有这些都通过了,显示UI


    但你们有两个兵营。哪一个被击中了?是我的兵营对象还是其他兵营对象?

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

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

    注意:确保将碰撞器连接到游戏对象。

    明白了,只需添加一条语句,说明
    hit.point.transform.GetComponent().trainingMenu.SetActive(true)
    :)@FlamingGenius,在这种情况下,您只需要此脚本的一个副本(不清楚您发布的代码是否连接到预置)。你应该让它更通用:
    hit.point.transform.GetComponent().onBuildingClicked()
    ,让建筑决定会发生什么。(
    兵营
    将扩展
    建筑
    )。