C# 克隆对象打开所有克隆的所有UI菜单
所以在unity中,我有一个包含画布的预置 这个预置是在运行时安装的,可以在整个游戏中多次实例化 现在让我们假设游戏中存在两个预制的营房 如果我点击兵营#1C# 克隆对象打开所有克隆的所有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
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?(两个兵营都是如此)但你们有两个兵营。哪一个被击中了?是我的兵营对象还是其他兵营对象?原因已经由Draco18s解释过了,但实现目标的最简单方法是使用
void OnMouseDown()
{
Debug.Log("OnMouseDown");
canvasObject.SetActive(true);
}
注意:确保将碰撞器连接到游戏对象。明白了,只需添加一条语句,说明
hit.point.transform.GetComponent().trainingMenu.SetActive(true)
:)@FlamingGenius,在这种情况下,您只需要此脚本的一个副本(不清楚您发布的代码是否连接到预置)。你应该让它更通用:hit.point.transform.GetComponent().onBuildingClicked()
,让建筑决定会发生什么。(兵营
将扩展建筑
)。