using DefaultNamespace.ProcessMode; using System.Collections; using System.Collections.Generic; using System.Linq; using DefaultNamespace; using MotionFramework; using TMPro; using UnityEngine; using UnityEngine.UI; using static InterfaceManager; /// /// 模型处理器接口 - 用于处理不同模型的特定逻辑 /// public interface IModelProcessor { /// /// 处理模型检查逻辑 /// /// 模型GameObject /// 物料检查信息 /// 检查组件 void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood); } /// /// 10kV变压器处理器 /// public class Transformer10kVProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活10kV变压器模型 ModerController.SetChildActive(model.transform, "10kV变压器", true); // 确保10kV电缆终端模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示10kV变压器"); } else { // 激活10kV电缆终端模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保10kV变压器模型关闭 ModerController.SetChildActive(model.transform, "10kV变压器", false); Debug.Log("品类不一致 - 显示10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform transformer = ModerController.FindChild(model.transform, "10kV变压器"); Transform cableTerminal = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果10kV变压器是激活的,设置其好状态 if (transformer != null && transformer.gameObject.activeInHierarchy) { ModerController.SetChildActive(transformer, "10kV变压器_坏", false); ModerController.SetChildActive(transformer, "10kV变压器_好", true); Debug.Log("10kV变压器外观正常"); } // 如果10kV电缆终端是激活的,设置其好状态 else if (cableTerminal != null && cableTerminal.gameObject.activeInHierarchy) { ModerController.SetChildActive(cableTerminal, "10kV电缆终端-坏", false); ModerController.SetChildActive(cableTerminal, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端外观正常"); } } else { // 如果10kV变压器是激活的,设置其坏状态 if (transformer != null && transformer.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(transformer, "10kV变压器", true); ModerController.SetChildActive(transformer, "10kV变压器_好", false); Debug.Log("10kV变压器外观破损"); } // 如果10kV电缆终端是激活的,设置其坏状态 else if (cableTerminal != null && cableTerminal.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(cableTerminal, "10kV电缆终端", true); ModerController.SetChildActive(cableTerminal, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端外观破损"); } } } } } /// /// 1kV电缆终端处理器 /// public class CableTerminal1kVProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活1kV电缆终端模型 ModerController.SetChildActive(model.transform, "1kV电缆终端", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示1kV电缆终端"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保1kV电缆终端模型关闭 ModerController.SetChildActive(model.transform, "1kV电缆终端", false); Debug.Log("品类不一致 - 显示10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform cableTerminal = ModerController.FindChild(model.transform, "1kV电缆终端"); Transform otherModel = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果1kV电缆终端是激活的,设置其好状态 if (cableTerminal != null && cableTerminal.gameObject.activeInHierarchy) { ModerController.SetChildActive(cableTerminal, "1kV电缆终端-坏", false); ModerController.SetChildActive(cableTerminal, "1kV电缆终端-好", true); Debug.Log("1kV电缆终端外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "10kV电缆终端-坏", false); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端外观正常"); } } else { // 如果1kV电缆终端是激活的,设置其坏状态 if (cableTerminal != null && cableTerminal.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(cableTerminal, "1kV电缆终端", true); ModerController.SetChildActive(cableTerminal, "1kV电缆终端-好", false); Debug.Log("1kV电缆终端外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "10kV电缆终端", true); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端外观破损"); } } } } } /// /// 10kV三相隔离开关处理器 /// public class DisconnectSwitch10kVProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活10kV三相隔离开关模型 ModerController.SetChildActive(model.transform, "10kV三相隔离开关", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示10kV三相隔离开关"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保10kV三相隔离开关模型关闭 ModerController.SetChildActive(model.transform, "10kV三相隔离开关", false); Debug.Log("品类不一致 - 显示10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform disconnectSwitch = ModerController.FindChild(model.transform, "10kV三相隔离开关"); Transform otherModel = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果10kV三相隔离开关是激活的,设置其好状态 if (disconnectSwitch != null && disconnectSwitch.gameObject.activeInHierarchy) { ModerController.SetChildActive(disconnectSwitch, "10kV三相隔离开关-坏", false); ModerController.SetChildActive(disconnectSwitch, "10kV三相隔离开关-好", true); Debug.Log("10kV三相隔离开关外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "10kV电缆终端-坏", false); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端外观正常"); } } else { // 如果10kV三相隔离开关是激活的,设置其坏状态 if (disconnectSwitch != null && disconnectSwitch.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(disconnectSwitch, "10kV三相隔离开关", true); ModerController.SetChildActive(disconnectSwitch, "10kV三相隔离开关-好", false); Debug.Log("10kV三相隔离开关外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "10kV电缆终端", true); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端外观破损"); } } } } } /// /// 10kV电缆终端处理器 /// public class CableTerminal10kVProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活10kV电缆终端模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "交流盘形悬式瓷绝缘子", false); Debug.Log("品类一致 - 显示10kV电缆终端"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "交流盘形悬式瓷绝缘子", true); // 确保10kV电缆终端模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类不一致 - 交流盘形悬式瓷绝缘子"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform cableTerminal = ModerController.FindChild(model.transform, "10kV电缆终端"); Transform otherModel = ModerController.FindChild(model.transform, "交流盘形悬式瓷绝缘子"); if (materialCheck.CorrectAnswer == "完好") { // 如果10kV电缆终端是激活的,设置其好状态 if (cableTerminal != null && cableTerminal.gameObject.activeInHierarchy) { ModerController.SetChildActive(cableTerminal, "10kV电缆终端-坏", false); ModerController.SetChildActive(cableTerminal, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "交流盘形悬式瓷绝缘子-坏", false); ModerController.SetChildActive(otherModel, "交流盘形悬式瓷绝缘子-好", true); Debug.Log("交流盘形悬式瓷绝缘子"); } } else { // 如果10kV电缆终端是激活的,设置其坏状态 if (cableTerminal != null && cableTerminal.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(cableTerminal, "10kV电缆终端", true); ModerController.SetChildActive(cableTerminal, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "交流盘形悬式瓷绝缘子", true); ModerController.SetChildActive(otherModel, "交流盘形悬式瓷绝缘子-好", false); Debug.Log("交流盘形悬式瓷绝缘子"); } } } } } /// /// 交流盘形悬式瓷绝缘子处理器 /// public class PorcelainInsulatorProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活交流盘形悬式瓷绝缘子模型 ModerController.SetChildActive(model.transform, "交流盘形悬式瓷绝缘子", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示交流盘形悬式瓷绝缘子"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保交流盘形悬式瓷绝缘子模型关闭 ModerController.SetChildActive(model.transform, "交流盘形悬式瓷绝缘子", false); Debug.Log("品类不一致 - 10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform insulator = ModerController.FindChild(model.transform, "交流盘形悬式瓷绝缘子"); Transform otherModel = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果交流盘形悬式瓷绝缘子是激活的,设置其好状态 if (insulator != null && insulator.gameObject.activeInHierarchy) { ModerController.SetChildActive(insulator, "交流盘形悬式瓷绝缘子-坏", false); ModerController.SetChildActive(insulator, "交流盘形悬式瓷绝缘子-好", true); Debug.Log("交流盘形悬式瓷绝缘子外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "10kV电缆终端-坏", false); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端"); } } else { // 如果交流盘形悬式瓷绝缘子是激活的,设置其坏状态 if (insulator != null && insulator.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(insulator, "交流盘形悬式瓷绝缘子", true); ModerController.SetChildActive(insulator, "交流盘形悬式瓷绝缘子-好", false); Debug.Log("交流盘形悬式瓷绝缘子外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "10kV电缆终端", true); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端"); } } } } } /// /// 低压电流互感器处理器 /// public class LowVoltageCurrentTransformerProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活低压电流互感器模型 ModerController.SetChildActive(model.transform, "低压电流互感器", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示低压电流互感器"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保低压电流互感器模型关闭 ModerController.SetChildActive(model.transform, "低压电流互感器", false); Debug.Log("品类不一致 - 10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform currentTransformer = ModerController.FindChild(model.transform, "低压电流互感器"); Transform otherModel = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果低压电流互感器是激活的,设置其好状态 if (currentTransformer != null && currentTransformer.gameObject.activeInHierarchy) { ModerController.SetChildActive(currentTransformer, "低压电流互感器-坏", false); ModerController.SetChildActive(currentTransformer, "低压电流互感器-好", true); Debug.Log("低压电流互感器外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "10kV电缆终端-坏", false); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端"); } } else { // 如果低压电流互感器是激活的,设置其坏状态 if (currentTransformer != null && currentTransformer.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(currentTransformer, "低压电流互感器", true); ModerController.SetChildActive(currentTransformer, "低压电流互感器-好", false); Debug.Log("低压电流互感器外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "10kV电缆终端", true); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端"); } } } } } /// /// 布电线处理器 /// public class WireProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活布电线模型 ModerController.SetChildActive(model.transform, "布电线", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示布电线"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保布电线模型关闭 ModerController.SetChildActive(model.transform, "布电线", false); Debug.Log("品类不一致 - 显示10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform wire = ModerController.FindChild(model.transform, "布电线"); Transform otherModel = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果布电线是激活的,设置其好状态 if (wire != null && wire.gameObject.activeInHierarchy) { ModerController.SetChildActive(wire, "布电线-坏", false); ModerController.SetChildActive(wire, "布电线-好", true); Debug.Log("布电线外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "10kV电缆终端-坏", false); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端外观正常"); } } else { // 如果布电线是激活的,设置其坏状态 if (wire != null && wire.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(wire, "布电线", true); ModerController.SetChildActive(wire, "布电线-好", false); Debug.Log("布电线外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "10kV电缆终端", true); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端外观破损"); } } } } } /// /// 接地短路故障指示器处理器 /// public class GroundFaultIndicatorProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活接地短路故障指示器模型 ModerController.SetChildActive(model.transform, "接地短路故障指示器", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示接地短路故障指示器"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保接地短路故障指示器模型关闭 ModerController.SetChildActive(model.transform, "接地短路故障指示器", false); Debug.Log("品类不一致 - 显示10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform faultIndicator = ModerController.FindChild(model.transform, "接地短路故障指示器"); Transform otherModel = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果接地短路故障指示器是激活的,设置其好状态 if (faultIndicator != null && faultIndicator.gameObject.activeInHierarchy) { ModerController.SetChildActive(faultIndicator, "接地短路故障指示器-坏", false); ModerController.SetChildActive(faultIndicator, "接地短路故障指示器-好", true); Debug.Log("接地短路故障指示器外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "10kV电缆终端-坏", false); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端外观正常"); } } else { // 如果接地短路故障指示器是激活的,设置其坏状态 if (faultIndicator != null && faultIndicator.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(faultIndicator, "接地短路故障指示器", true); ModerController.SetChildActive(faultIndicator, "接地短路故障指示器-好", false); Debug.Log("接地短路故障指示器外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "10kV电缆终端", true); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端外观破损"); } } } } } /// /// 接续金具-接地线夹处理器 /// public class GroundClampProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活接续金具-接地线夹模型 ModerController.SetChildActive(model.transform, "接续金具-接地线夹", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示接续金具-接地线夹"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保接续金具-接地线夹模型关闭 ModerController.SetChildActive(model.transform, "接续金具-接地线夹", false); Debug.Log("品类不一致 - 显示10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform groundClamp = ModerController.FindChild(model.transform, "接续金具-接地线夹"); Transform otherModel = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果接续金具-接地线夹是激活的,设置其好状态 if (groundClamp != null && groundClamp.gameObject.activeInHierarchy) { ModerController.SetChildActive(groundClamp, "接续金具-接地线夹-坏", false); ModerController.SetChildActive(groundClamp, "接续金具-接地线夹-好", true); Debug.Log("接续金具-接地线夹外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "10kV电缆终端-坏", false); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端外观正常"); } } else { // 如果接续金具-接地线夹是激活的,设置其坏状态 if (groundClamp != null && groundClamp.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(groundClamp, "接续金具-接地线夹", true); ModerController.SetChildActive(groundClamp, "接续金具-接地线夹-好", false); Debug.Log("接续金具-接地线夹外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "10kV电缆终端", true); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端外观破损"); } } } } } /// /// 柱上断路器处理器 /// public class PoleCircuitBreakerProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活柱上断路器模型 ModerController.SetChildActive(model.transform, "柱上断路器", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示柱上断路器"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保柱上断路器模型关闭 ModerController.SetChildActive(model.transform, "柱上断路器", false); Debug.Log("品类不一致 - 显示10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform circuitBreaker = ModerController.FindChild(model.transform, "柱上断路器"); Transform otherModel = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果柱上断路器是激活的,设置其好状态 if (circuitBreaker != null && circuitBreaker.gameObject.activeInHierarchy) { ModerController.SetChildActive(circuitBreaker, "柱上断路器-坏", false); ModerController.SetChildActive(circuitBreaker, "柱上断路器-好", true); Debug.Log("柱上断路器外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "10kV电缆终端-坏", false); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端外观正常"); } } else { // 如果柱上断路器是激活的,设置其坏状态 if (circuitBreaker != null && circuitBreaker.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(circuitBreaker, "柱上断路器", true); ModerController.SetChildActive(circuitBreaker, "柱上断路器-好", false); Debug.Log("柱上断路器外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "10kV电缆终端", true); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端外观破损"); } } } } } /// /// 电力电缆处理器 /// public class PowerCableProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活电力电缆模型 ModerController.SetChildActive(model.transform, "电力电缆", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示电力电缆"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保电力电缆模型关闭 ModerController.SetChildActive(model.transform, "电力电缆", false); Debug.Log("品类不一致 - 显示10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform powerCable = ModerController.FindChild(model.transform, "电力电缆"); Transform otherModel = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果电力电缆是激活的,设置其好状态 if (powerCable != null && powerCable.gameObject.activeInHierarchy) { ModerController.SetChildActive(powerCable, "电力电缆-坏", false); ModerController.SetChildActive(powerCable, "电力电缆-好", true); Debug.Log("电力电缆外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "10kV电缆终端-坏", false); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端外观正常"); } } else { // 如果电力电缆是激活的,设置其坏状态 if (powerCable != null && powerCable.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(powerCable, "电力电缆", true); ModerController.SetChildActive(powerCable, "电力电缆-好", false); Debug.Log("电力电缆外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "10kV电缆终端", true); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端外观破损"); } } } } } /// /// 电缆分支箱处理器 /// public class CableBranchBoxProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活电缆分支箱模型 ModerController.SetChildActive(model.transform, "电缆分支箱", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示电缆分支箱"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保电缆分支箱模型关闭 ModerController.SetChildActive(model.transform, "电缆分支箱", false); Debug.Log("品类不一致 - 显示10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform branchBox = ModerController.FindChild(model.transform, "电缆分支箱"); Transform otherModel = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果电缆分支箱是激活的,设置其好状态 if (branchBox != null && branchBox.gameObject.activeInHierarchy) { ModerController.SetChildActive(branchBox, "电缆分支箱-坏", false); ModerController.SetChildActive(branchBox, "电缆分支箱-好", true); Debug.Log("电缆分支箱外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "10kV电缆终端-坏", false); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端外观正常"); } } else { // 如果电缆分支箱是激活的,设置其坏状态 if (branchBox != null && branchBox.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(branchBox, "电缆分支箱", true); ModerController.SetChildActive(branchBox, "电缆分支箱-好", false); Debug.Log("电缆分支箱外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "10kV电缆终端", true); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端外观破损"); } } } } } /// /// 线路柱式瓷绝缘子处理器 /// public class LinePorcelainInsulatorProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活线路柱式瓷绝缘子模型 ModerController.SetChildActive(model.transform, "线路柱式瓷绝缘子", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示线路柱式瓷绝缘子"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保线路柱式瓷绝缘子模型关闭 ModerController.SetChildActive(model.transform, "线路柱式瓷绝缘子", false); Debug.Log("品类不一致 - 显示10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform lineInsulator = ModerController.FindChild(model.transform, "线路柱式瓷绝缘子"); Transform otherModel = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果线路柱式瓷绝缘子是激活的,设置其好状态 if (lineInsulator != null && lineInsulator.gameObject.activeInHierarchy) { ModerController.SetChildActive(lineInsulator, "线路柱式瓷绝缘子-坏", false); ModerController.SetChildActive(lineInsulator, "线路柱式瓷绝缘子-好", true); Debug.Log("线路柱式瓷绝缘子外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "10kV电缆终端-坏", false); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端外观正常"); } } else { // 如果线路柱式瓷绝缘子是激活的,设置其坏状态 if (lineInsulator != null && lineInsulator.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(lineInsulator, "线路柱式瓷绝缘子", true); ModerController.SetChildActive(lineInsulator, "线路柱式瓷绝缘子-好", false); Debug.Log("线路柱式瓷绝缘子外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "10kV电缆终端", true); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端外观破损"); } } } } } /// /// 联结金具-直角挂板处理器 /// public class RightAngleHangerProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活联结金具-直角挂板模型 ModerController.SetChildActive(model.transform, "联结金具-直角挂板", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示联结金具-直角挂板"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保联结金具-直角挂板模型关闭 ModerController.SetChildActive(model.transform, "联结金具-直角挂板", false); Debug.Log("品类不一致 - 显示10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform hanger = ModerController.FindChild(model.transform, "联结金具-直角挂板"); Transform otherModel = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果联结金具-直角挂板是激活的,设置其好状态 if (hanger != null && hanger.gameObject.activeInHierarchy) { ModerController.SetChildActive(hanger, "联结金具-直角挂板-坏", false); ModerController.SetChildActive(hanger, "联结金具-直角挂板-好", true); Debug.Log("联结金具-直角挂板外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "10kV电缆终端-坏", false); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端外观正常"); } } else { // 如果联结金具-直角挂板是激活的,设置其坏状态 if (hanger != null && hanger.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(hanger, "联结金具-直角挂板", true); ModerController.SetChildActive(hanger, "联结金具-直角挂板-好", false); Debug.Log("联结金具-直角挂板外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "10kV电缆终端", true); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端外观破损"); } } } } } /// /// 联结金具-直角挂板袋装处理器 /// public class RightAngleHangerBagProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活联结金具-直角挂板袋装模型 ModerController.SetChildActive(model.transform, "联结金具-直角挂板袋装", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示联结金具-直角挂板袋装"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保联结金具-直角挂板袋装模型关闭 ModerController.SetChildActive(model.transform, "联结金具-直角挂板袋装", false); Debug.Log("品类不一致 - 显示10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform hangerBag = ModerController.FindChild(model.transform, "联结金具-直角挂板袋装"); Transform otherModel = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果联结金具-直角挂板袋装是激活的,设置其好状态 if (hangerBag != null && hangerBag.gameObject.activeInHierarchy) { ModerController.SetChildActive(hangerBag, "联结金具-直角挂板袋装-坏", false); ModerController.SetChildActive(hangerBag, "联结金具-直角挂板袋装-好", true); Debug.Log("联结金具-直角挂板袋装外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "10kV电缆终端-坏", false); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端外观正常"); } } else { // 如果联结金具-直角挂板袋装是激活的,设置其坏状态 if (hangerBag != null && hangerBag.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(hangerBag, "联结金具-直角挂板袋装", true); ModerController.SetChildActive(hangerBag, "联结金具-直角挂板袋装-好", false); Debug.Log("联结金具-直角挂板袋装外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "10kV电缆终端", true); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端外观破损"); } } } } } /// /// 蝶式绝缘子处理器 /// public class ButterflyInsulatorProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活蝶式绝缘子模型 ModerController.SetChildActive(model.transform, "蝶式绝缘子", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示蝶式绝缘子"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保蝶式绝缘子模型关闭 ModerController.SetChildActive(model.transform, "蝶式绝缘子", false); Debug.Log("品类不一致 - 显示10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform butterflyInsulator = ModerController.FindChild(model.transform, "蝶式绝缘子"); Transform otherModel = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果蝶式绝缘子是激活的,设置其好状态 if (butterflyInsulator != null && butterflyInsulator.gameObject.activeInHierarchy) { ModerController.SetChildActive(butterflyInsulator, "蝶式绝缘子-坏", false); ModerController.SetChildActive(butterflyInsulator, "蝶式绝缘子-好", true); Debug.Log("蝶式绝缘子外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "10kV电缆终端-坏", false); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端外观正常"); } } else { // 如果蝶式绝缘子是激活的,设置其坏状态 if (butterflyInsulator != null && butterflyInsulator.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(butterflyInsulator, "蝶式绝缘子", true); ModerController.SetChildActive(butterflyInsulator, "蝶式绝缘子-好", false); Debug.Log("蝶式绝缘子外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "10kV电缆终端", true); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端外观破损"); } } } } } /// /// 配电箱处理器 /// public class DistributionBoxProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活配电箱模型 ModerController.SetChildActive(model.transform, "配电箱", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示配电箱"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保配电箱模型关闭 ModerController.SetChildActive(model.transform, "配电箱", false); Debug.Log("品类不一致 - 显示10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform distributionBox = ModerController.FindChild(model.transform, "配电箱"); Transform otherModel = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果配电箱是激活的,设置其好状态 if (distributionBox != null && distributionBox.gameObject.activeInHierarchy) { ModerController.SetChildActive(distributionBox, "配电箱-坏", false); ModerController.SetChildActive(distributionBox, "配电箱-好", true); Debug.Log("配电箱外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "10kV电缆终端-坏", false); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端外观正常"); } } else { // 如果配电箱是激活的,设置其坏状态 if (distributionBox != null && distributionBox.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(distributionBox, "配电箱", true); ModerController.SetChildActive(distributionBox, "配电箱-好", false); Debug.Log("配电箱外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "10kV电缆终端", true); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端外观破损"); } } } } } /// /// 高压熔断器处理器 /// public class HighVoltageFuseProcessor : IModelProcessor { public void ProcessModel(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { // 根据检查类型进行不同处理 if (materialCheck.Question.Contains("物资品类是否一致")) { if (materialCheck.CorrectAnswer == "一致") { // 激活高压熔断器模型 ModerController.SetChildActive(model.transform, "高压熔断器", true); // 确保其他模型关闭 ModerController.SetChildActive(model.transform, "10kV电缆终端", false); Debug.Log("品类一致 - 显示高压熔断器"); } else { // 激活其他模型 ModerController.SetChildActive(model.transform, "10kV电缆终端", true); // 确保高压熔断器模型关闭 ModerController.SetChildActive(model.transform, "高压熔断器", false); Debug.Log("品类不一致 - 显示10kV电缆终端"); } } else if (materialCheck.Question.Contains("检查外观")) { // 检查当前激活的是哪个模型 Transform fuse = ModerController.FindChild(model.transform, "高压熔断器"); Transform otherModel = ModerController.FindChild(model.transform, "10kV电缆终端"); if (materialCheck.CorrectAnswer == "完好") { // 如果高压熔断器是激活的,设置其好状态 if (fuse != null && fuse.gameObject.activeInHierarchy) { ModerController.SetChildActive(fuse, "高压熔断器-坏", false); ModerController.SetChildActive(fuse, "高压熔断器-好", true); Debug.Log("高压熔断器外观正常"); } // 如果其他模型是激活的,设置其好状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetChildActive(otherModel, "10kV电缆终端-坏", false); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", true); Debug.Log("10kV电缆终端外观正常"); } } else { // 如果高压熔断器是激活的,设置其坏状态 if (fuse != null && fuse.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(fuse, "高压熔断器", true); ModerController.SetChildActive(fuse, "高压熔断器-好", false); Debug.Log("高压熔断器外观破损"); } // 如果其他模型是激活的,设置其坏状态 else if (otherModel != null && otherModel.gameObject.activeInHierarchy) { ModerController.SetRandomBrokenModelActive(otherModel, "10kV电缆终端", true); ModerController.SetChildActive(otherModel, "10kV电缆终端-好", false); Debug.Log("10kV电缆终端外观破损"); } } } } } /// /// MODER控制器 /// public class ModerController : MonoBehaviour { /// /// MODER控制器的单例 /// public static ModerController Instance; private void Awake() { Instance = this; } /// /// 要排列的模型预制体 /// public GameObject prefabModel; /// /// 入库检验区 /// public Transform WarehousingInspectionArea; /// /// 出库检验区 /// public Transform OutboundInspectionArea; /// /// 模型父物体 /// public Transform parentTransform; /// /// 需要生成的模型数量 /// public int modelCount; /// /// 每行模型数量 /// public int modelsPerRow = 5; /// /// 模型行间距 /// public float rowSpacing = 1.0f; /// /// 模型列间距 /// public float columnSpacing = 1.0f; /// /// 入库/出库/...类型 /// public string typeInboundOutbound; /// /// 物品列表 /// public List checkGoods = new List(); /// /// 是否已经佩戴安全帽 /// public bool isWearingSafetyHat = false; /// /// 是否已经佩戴安全帽 /// public bool iscomputer = false; /// /// 模型位置信息 /// [Header("模型位置信息")] public ModerPosition[] moderPositions; /// /// 模型处理器字典 /// private Dictionary modelProcessors; // Start is called before the first frame update /// /// 初始化模型处理器 /// public void InitializeModelProcessors() { modelProcessors = new Dictionary { { "10kV变压器", new Transformer10kVProcessor() }, { "1kV电缆终端", new CableTerminal1kVProcessor() }, { "10kV三相隔离开关", new DisconnectSwitch10kVProcessor() }, { "10kV电缆终端", new CableTerminal10kVProcessor() }, { "交流盘形悬式瓷绝缘子", new PorcelainInsulatorProcessor() }, { "低压电流互感器", new LowVoltageCurrentTransformerProcessor() }, { "布电线", new WireProcessor() }, { "接地短路故障指示器", new GroundFaultIndicatorProcessor() }, { "接续金具-接地线夹", new GroundClampProcessor() }, { "柱上断路器", new PoleCircuitBreakerProcessor() }, { "电力电缆", new PowerCableProcessor() }, { "电缆分支箱", new CableBranchBoxProcessor() }, { "线路柱式瓷绝缘子", new LinePorcelainInsulatorProcessor() }, { "联结金具-直角挂板", new RightAngleHangerProcessor() }, { "联结金具-直角挂板袋装", new RightAngleHangerBagProcessor() }, { "蝶式绝缘子", new ButterflyInsulatorProcessor() }, { "配电箱", new DistributionBoxProcessor() }, { "高压熔断器", new HighVoltageFuseProcessor() }, }; } /// /// 初始化并排列模型 /// /// public void Init(string prefabName) { prefabModel = Resources.Load("Prefabs/Moder/" + prefabName); ModerPosition moderPosition = moderPositions.FirstOrDefault(x => x.prefabName == prefabName); if (moderPosition != null) { //每行模型数量 modelsPerRow = moderPosition.modelsPerRow; //模型行间距 rowSpacing = moderPosition.rowSpacing; //模型列间距 columnSpacing = moderPosition.columnSpacing; } else { return; } //模型生成区域 出库/入库 WarehousingInspectionArea = FindObjectByName("WarehousingInspectionArea"); OutboundInspectionArea = FindObjectByName("OutboundInspectionArea"); if (MotionEngine.GetModule().ExamName.Contains("出库")) { typeInboundOutbound = "出库"; } else { typeInboundOutbound = "入库"; } switch (typeInboundOutbound) { case "入库": parentTransform = WarehousingInspectionArea; break; case "出库": parentTransform = OutboundInspectionArea; break; default: break; } CombinedClass combinedClass = GameManager.Instance.combinedClass; //实例化模型数量 modelCount = int.Parse(combinedClass.incomeQuantity); //加载PLCJ //StartCoroutine(LoadPLCJ()); ArrangeModels(prefabName); } /// /// 初始化并排列模型 /// /// /// 初始化并排列模型 - 根据题目类型选择不同的生成方式 /// /// 模型名称 public void ArrangeModels(string modelname) { if (prefabModel == null || parentTransform == null || modelCount <= 0) { Debug.LogWarning("预制体为空,父物体为空或模型数量小于等于0,无法生成模型。"); return; } // 清除父物体下的所有子物体 foreach (Transform child in parentTransform) { Destroy(child.gameObject); } int rows = Mathf.CeilToInt(modelCount / (float)modelsPerRow); Debug.Log("总共生成行数= " + rows); // 根据题目名称判断使用哪种生成方式 string examName = MotionEngine.GetModule().ExamName; bool isOutboundExam = examName.Contains("出库"); Debug.Log($"【生成模式判断】题目名称: {examName}, 是否出库: {isOutboundExam}"); if (isOutboundExam) { // 出库场景:使用简单的按数量生成逻辑 Debug.Log("【出库模式】使用简单按数量生成逻辑"); GenerateModelsByCount(modelname); } else { // 非出库场景:使用复杂的物料分组生成逻辑 Debug.Log("【入库模式】使用物料分组生成逻辑"); GenerateModelsByMaterialGroups(modelname); } } /// /// 出库场景:按数量简单生成模型 /// /// 模型名称 private void GenerateModelsByCount(string modelname) { Debug.Log($"【出库模式】开始生成 {modelCount} 个模型"); for (int i = 0; i < modelCount; i++) { // 计算当前模型的位置 int row = i / modelsPerRow; int column = i % modelsPerRow; // 实例化模型并设置其位置 GameObject model = Instantiate(prefabModel, parentTransform); CheckGoods checkGood = model.GetComponent(); if (checkGood != null) { checkGoods.Add(checkGood); Debug.Log($" - 成功创建第 {i + 1} 个模型的检查组件"); } model.gameObject.SetActive(true); model.transform.name = $"{prefabModel.name}_{i + 1}"; model.transform.localPosition = new Vector3(column * columnSpacing, 0, row * rowSpacing); Debug.Log($" - 模型 {i + 1} 位置: 行={row}, 列={column}, 坐标=({column * columnSpacing}, 0, {row * rowSpacing})"); model.GetComponent().Init(); } Debug.Log($"【出库模式】生成完成,总共生成了 {modelCount} 个模型"); } /// /// 入库场景:按物料分组生成模型 /// /// 模型名称 private void GenerateModelsByMaterialGroups(string modelname) { List materialCheckInfoList = MotionEngine.GetModule().materialCheckInfoList; Debug.Log($"【入库模式】物料检查信息总共加载了 {materialCheckInfoList.Count} 个检查项目"); // 重构:按物料编号分组,确保每个物料只生成一个对象 var materialGroups = materialCheckInfoList .GroupBy(d => ExtractMaterialNumberFromQuestion(d.Question)) .Where(g => !string.IsNullOrEmpty(g.Key) && g.Key != "未知") .OrderBy(g => int.Parse(g.Key)) .ToList(); Debug.Log($"【入库模式】物料分组识别到 {materialGroups.Count} 个不同的物料"); if (materialGroups.Count > 0) { for (int i = 0; i < modelCount; i++) { var materialGroup = materialGroups[i]; string materialNumber = materialGroup.Key; var materialChecks = materialGroup.ToList(); Debug.Log($"\n【物料 {materialNumber}】开始生成,包含 {materialChecks.Count} 个检查项目"); // 记录该物料的所有检查类型 foreach (var check in materialChecks) { string checkType = GetCheckType(check.Question); Debug.Log($" - 检查类型: {checkType}, 正确答案: {check.CorrectAnswer}"); } // 计算当前模型的位置 int row = i / modelsPerRow; int column = i % modelsPerRow; // 实例化模型并设置其位置 GameObject model = Instantiate(prefabModel, parentTransform); CheckGoods checkGood = model.GetComponent(); if (checkGood != null) { checkGoods.Add(checkGood); Debug.Log($" - 成功创建物料 {materialNumber} 的检查组件"); } model.gameObject.SetActive(true); model.transform.name = $"{prefabModel.name}_物料{materialNumber}"; model.transform.localPosition = new Vector3(column * columnSpacing, 0, row * rowSpacing); Debug.Log($" - 物料 {materialNumber} 位置: 行={row}, 列={column}, 坐标=({column * columnSpacing}, 0, {row * rowSpacing})"); model.GetComponent().Init(); // 处理该物料的所有检查项目 for (int j = 0; j < materialChecks.Count; j++) { Debug.Log($" - 处理检查项目 {j + 1}: {materialChecks[j].Question}"); // 使用通用模型处理方法 ProcessModelCheck(model, materialChecks[j], checkGood, modelname); } Debug.Log($"【物料 {materialNumber}】生成完成,共处理 {materialChecks.Count} 个检查项目"); } } Debug.Log($"【入库模式】物料生成完成,总共生成了 {materialGroups.Count} 个物料对象,而不是之前的 {materialCheckInfoList.Count} 个"); } /// /// 检查物品是否全部完成 /// public void CheckGoodsCheckCompleted() { //检查checkGoods所有成员的isCheckCompleted是否都为true bool isAllCheckCompleted = true; foreach (CheckGoods checkGood in checkGoods) { if (!checkGood.name.Contains("电力电缆")) { if (!checkGood.isCheckCompleted) { isAllCheckCompleted = false; break; } } else { if (!checkGood.isCheckCompleted || checkGood.arrowObj2.activeInHierarchy) { isAllCheckCompleted = false; break; } } } if (isAllCheckCompleted) { //全部完成,通知UI List goodsName = new List(); for (int i = 0; i < checkGoods.Count; i++) { CheckGoods checkGood = checkGoods[i]; Toggle TogPL = checkGood.TogPLGood.isOn ? checkGood.TogPLGood : checkGood.TogPLBad; Toggle TogSL = checkGood.TogCJGood.isOn ? checkGood.TogCJGood : checkGood.TogCJBad; Toggle Tog = checkGood.TogGood.isOn ? checkGood.TogGood : checkGood.TogBad; goodsName.Add(TogPL.name); goodsName.Add(TogSL.name); goodsName.Add(Tog.name); if (i == checkGoods.Count - 1) { if (MotionFramework.MotionEngine.GetModule().HandleClick(goodsName)) { Debug.Log("处理成功"); if (GameManager.Instance.combinedClass.Subjectname.Contains("不可用办理实物退库") || MotionEngine.GetModule().ExamName.Contains("废旧物资入库")) { LoadTriggerNextGuide("关闭"); ; //TutorialGuideComponent.Instance.ShowGUIde(); } else { LoadTriggerNextGuide(); } } } } } } /// /// 加载PLCJ /// public IEnumerator LoadPLCJ() { yield return new WaitForSeconds(1.0f); List materialChecks = GameManager.Instance.materialChecks; for (int i = 0; i < materialChecks.Count; i++) { if (i < checkGoods.Count) checkGoods[i].PLCJ(materialChecks[i].materialCategory, materialChecks[i].manufacturer, materialChecks[i].appearanceCheck); } } [ContextMenu("AddArrangeModelsInGrid")] public void AddArrangeModelsInGrid() { ArrangeModels("1kV电缆终端"); } /// /// 物资品类一致高亮(外部调用) /// public void MaterialVerification() { if (MotionFramework.MotionEngine.GetModule()._currentMode == ProcessMode.教学模式) { for (int i = 0; i < checkGoods.Count; i++) { checkGoods[i].arrowObj.SetActive(true); if (checkGoods[i].arrowObj2 != null) { checkGoods[i].arrowObj2.SetActive(true); } } } } /// /// 模型高亮显示 /// public void HighlightModel() { for (int i = 0; i < checkGoods.Count; i++) { checkGoods[i].highlightEffect.SetHighlighted(true); } } /// /// 通用模型处理方法 - 处理不同模型的检查逻辑 /// /// 模型GameObject /// 物料检查信息 /// 检查组件 /// 模型名称 public void ProcessModelCheck(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood, string modelName) { // 获取对应的模型处理器 if (modelProcessors.TryGetValue(modelName, out IModelProcessor processor)) { // 调用特定模型的处理器 processor.ProcessModel(model, materialCheck, checkGood); } else { Debug.LogWarning($"未找到模型 {modelName} 的处理器,使用默认处理逻辑"); // 默认处理逻辑 ProcessDefaultModelCheck(model, materialCheck, checkGood); } // 通用的检查逻辑 - 所有模型都需要检查品类一致性和外观 ProcessCommonChecks(materialCheck); } /// /// 默认模型处理逻辑 /// /// 模型GameObject /// 物料检查信息 /// 检查组件 private void ProcessDefaultModelCheck(GameObject model, MaterialCheckInfo materialCheck, CheckGoods checkGood) { if (materialCheck.IsNormal) { Debug.Log($"{model.name} - 物料正常"); } else { Debug.Log($"{model.name} - 物料缺陷"); } } /// /// 通用检查逻辑 - 处理品类一致性和外观检查 /// /// 物料检查信息 private void ProcessCommonChecks(MaterialCheckInfo materialCheck) { if (materialCheck.Question.Contains("物资品类是否一致")) { string status = materialCheck.IsCategoryConsistent ? "一致" : "不一致"; Debug.Log($" 品类一致性: {status}"); } else if (materialCheck.Question.Contains("厂家是否一致")) { string status = materialCheck.CorrectAnswer.Contains("一致") ? "一致" : "不一致"; Debug.Log($" 厂家一致性: {status}"); } else if (materialCheck.Question.Contains("检查外观")) { string status = materialCheck.IsNormal ? "完好" : materialCheck.IsDamaged ? "破损" : "无法确定"; Debug.Log($" 外观检查: {status}"); } } /// /// 注册新的模型处理器 /// /// 模型名称 /// 处理器实例 public void RegisterModelProcessor(string modelName, IModelProcessor processor) { if (modelProcessors == null) { modelProcessors = new Dictionary(); } if (modelProcessors.ContainsKey(modelName)) { Debug.LogWarning($"模型处理器 {modelName} 已存在,将被覆盖"); } modelProcessors[modelName] = processor; Debug.Log($"成功注册模型处理器: {modelName}"); } /// /// 获取所有已注册的模型名称 /// /// 模型名称列表 public List GetRegisteredModelNames() { if (modelProcessors == null) { return new List(); } return modelProcessors.Keys.ToList(); } /// /// 检查是否支持指定模型 /// /// 模型名称 /// 是否支持 public bool IsModelSupported(string modelName) { return modelProcessors != null && modelProcessors.ContainsKey(modelName); } /// /// 公用查询子对象方法 - 安全地查找子对象并进行SetActive操作 /// /// 父对象 /// 子对象名称 /// 是否激活 /// 是否成功找到并设置 public static bool SetChildActive(Transform parent, string childName, bool active) { if (parent == null) { Debug.LogWarning($"父对象为空,无法查找子对象: {childName}"); return false; } Transform child = parent.Find(childName); if (child == null) { Debug.LogWarning($"在父对象 {parent.name} 中未找到子对象: {childName}"); return false; } child.gameObject.SetActive(active); Debug.Log($"成功设置 {parent.name}/{childName} 的激活状态为: {active}"); return true; } /// /// 公用查询子对象方法 - 查找子对象并返回 /// /// 父对象 /// 子对象名称 /// 找到的子对象,未找到返回null public static Transform FindChild(Transform parent, string childName) { if (parent == null) { Debug.LogWarning($"父对象为空,无法查找子对象: {childName}"); return null; } Transform child = parent.Find(childName); if (child == null) { Debug.LogWarning($"在父对象 {parent.name} 中未找到子对象: {childName}"); return null; } return child; } /// /// 随机选择并激活损坏模型变体 /// 支持格式:{baseModelName}-坏、{baseModelName}-坏-Da、{baseModelName}-坏-Db、{baseModelName}-坏-Dc、{baseModelName}-坏-Dd /// /// 父对象 /// 基础模型名称 /// 是否激活 /// 是否成功找到并设置 public static bool SetRandomBrokenModelActive(Transform parent, string baseModelName, bool active) { if (parent == null) { Debug.LogWarning($"父对象为空,无法查找损坏模型: {baseModelName}"); return false; } if (string.IsNullOrEmpty(baseModelName)) { Debug.LogWarning("基础模型名称为空,无法查找损坏模型"); return false; } // 收集所有可能的损坏模型变体 List possibleBrokenModels = new List(); // 添加基础损坏模型 string baseBrokenModel = $"{baseModelName}-坏"; possibleBrokenModels.Add(baseBrokenModel); // 添加变体损坏模型(Da, Db, Dc, Dd) string[] variants = { "Da", "Db", "Dc", "Dd" }; foreach (string variant in variants) { string variantBrokenModel = $"{baseModelName}-坏-{variant}"; possibleBrokenModels.Add(variantBrokenModel); } // 检查哪些损坏模型实际存在 List existingBrokenModels = new List(); foreach (string modelName in possibleBrokenModels) { Transform child = parent.Find(modelName); if (child != null) { existingBrokenModels.Add(modelName); Debug.Log($"找到损坏模型: {modelName}"); } } if (existingBrokenModels.Count == 0) { Debug.LogWarning($"未找到任何损坏模型变体,基础模型: {baseModelName}"); return false; } if (active) { // 随机选择一个损坏模型变体 int randomIndex = Random.Range(0, existingBrokenModels.Count); string selectedBrokenModel = existingBrokenModels[randomIndex]; // 激活选中的损坏模型 Transform selectedChild = parent.Find(selectedBrokenModel); if (selectedChild != null) { selectedChild.gameObject.SetActive(true); Debug.Log($"随机选择并激活损坏模型: {selectedBrokenModel}"); } // 关闭所有其他损坏模型 foreach (string modelName in existingBrokenModels) { if (modelName != selectedBrokenModel) { Transform otherChild = parent.Find(modelName); if (otherChild != null) { otherChild.gameObject.SetActive(false); } } } } else { // 关闭所有损坏模型 foreach (string modelName in existingBrokenModels) { Transform child = parent.Find(modelName); if (child != null) { child.gameObject.SetActive(false); } } Debug.Log($"关闭所有损坏模型,基础模型: {baseModelName}"); } return true; } /// /// 从问题文本中提取物料编号 - 重构版本:更准确的提取逻辑 /// /// 问题文本 /// 物料编号字符串 private static string ExtractMaterialNumberFromQuestion(string questionText) { if (string.IsNullOrEmpty(questionText)) { Debug.LogWarning("问题文本为空,无法提取物料编号"); return "未知"; } try { // 使用正则表达式提取物料编号,支持"物料X"格式 var match = System.Text.RegularExpressions.Regex.Match(questionText, @"物料(\d+)"); if (match.Success) { string materialNumber = match.Groups[1].Value; Debug.Log($"从问题文本 '{questionText}' 中成功提取物料编号: {materialNumber}"); return materialNumber; } else { Debug.LogWarning($"无法从问题文本 '{questionText}' 中提取物料编号"); return "未知"; } } catch (System.Exception ex) { Debug.LogError($"提取物料编号时发生异常: {ex.Message}"); return "未知"; } } /// /// 获取检查类型描述 - 根据问题文本判断检查类型 /// /// 问题文本 /// 检查类型描述 private static string GetCheckType(string questionText) { if (string.IsNullOrEmpty(questionText)) { return "未知检查类型"; } if (questionText.Contains("物资品类是否一致")) { return "物资品类一致性检查"; } else if (questionText.Contains("厂家是否一致")) { return "厂家一致性检查"; } else if (questionText.Contains("检查外观")) { return "外观质量检查"; } else { return "其他检查类型"; } } } /// /// 模型位置 /// [System.Serializable] public class ModerPosition { /// /// 加载预制体名称 /// [Header("加载预制体名称")] public string prefabName; /// /// 每行模型数量 /// [Header("每行模型数量")] public int modelsPerRow; /// /// 模型行间距 /// [Header("模型行间距")] public float rowSpacing; /// /// 模型列间距 /// [Header("模型列间距")] public float columnSpacing; }