using System; using System.Collections; using System.Collections.Generic; using System.Globalization; using TMPro; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; struct RequiredInformation//提供参数来生成浮标 { public string SNWithdeviceName; public Vector3 localPosition; public string customName;//这个是浮标上面的文本,自己命的名 public string pictureSerialNumber;//MT开头的图片 public string tag;//用tag来显示sorting Icons public RequiredInformation(string sn, Vector3 pos, string name, string picSn,string tag) { SNWithdeviceName = sn; localPosition = pos; customName = name; pictureSerialNumber = picSn; this.tag = tag; } public RequiredInformation(string sn, string name, string picSn, string tag) { SNWithdeviceName = sn; localPosition = Vector3.zero; customName = name; pictureSerialNumber = picSn; this.tag = tag; } } public class AskForWEBInfomation : MonoBehaviour { public GameObject ICONSPosition;//把ICONSPosition拖进来提供我的这些浮标的位置 public Camera cam; public GameObject buoy;//把BUoy预制体拖进来,使用代码自动生成ICON的子物体 // public List pictures = new List();//把图片预制体都拖过来 /* [Serializable] public class IdentifierTextBinding { public string identifier; public TMP_Text targetText; }*/ [Header("认证")] [TextArea(2, 4)] string authorization = "tenantCode=DEMO&accessToken=225e1a7ffede96cb5adab3aa98775660f4c6a066"; [Header("编辑器测试地址")] string editorFullUrl = "https://3d.gzckgc.cn/api.php/Device/deviceDetail"; [Header("设备SN列表")] public List deviceSnList = new List { "ys_2026020420","ys_2026020419","ys_2026020418","ys_2026020417","ys_2026020416","ys_2026020415" }; List infos = new List() { //构造函数现在可以使用4参数构造, new RequiredInformation("ys_2026042701_sb_duopule001","流量计1","MT019","流量监测") , new RequiredInformation("ys_2026042702_sb_duopule002","流量计2","MT019","流量监测") , new RequiredInformation("ys_2026042703_sb_duopule003","流量计3","MT019","流量监测") , new RequiredInformation("ys_2026042704_sb_duopule004","流量计4","MT019","流量监测") , new RequiredInformation("ys_2026042705_sb_duopule005","流量计5","MT019","流量监测") , new RequiredInformation("ys_2026042701_sb_leidashuiweiji001","雷达水位计1","MT011RainfallANDWaterlevel","水位监测") , new RequiredInformation("ys_2026042702_sb_leidashuiweiji002","雷达水位计2","MT011RainfallANDWaterlevel","水位监测") , new RequiredInformation("ys_2026042703_sb_leidashuiweiji003","雷达水位计3","MT011RainfallANDWaterlevel","水位监测") , new RequiredInformation("ys_2026042704_sb_leidashuiweiji004","雷达水位计4","MT011RainfallANDWaterlevel","水位监测") , new RequiredInformation("ys_2026042705_sb_leidashuiweiji005","雷达水位计5","MT011RainfallANDWaterlevel","水位监测") , new RequiredInformation("ys_2026042701_sb_shuizhi_diandaolv001","电导率1","水质","水质监测") , new RequiredInformation("ys_2026042702_sb_shuizhi_diandaolv002","电导率2","水质","水质监测") , new RequiredInformation("ys_2026042703_sb_shuizhi_diandaolv003","电导率3","水质","水质监测") , new RequiredInformation("ys_2026042704_sb_shuizhi_diandaolv004","电导率4","水质","水质监测") , new RequiredInformation("ys_2026042705_sb_shuizhi_diandaolv005","电导率5","水质","水质监测") , new RequiredInformation("ys_2026042701_sb_shuizhi_PH001","pH1","水质","水质监测") , new RequiredInformation("ys_2026042702_sb_shuizhi_PH002","pH2","水质","水质监测") , new RequiredInformation("ys_2026042703_sb_shuizhi_PH003","pH3","水质","水质监测") , new RequiredInformation("ys_2026042704_sb_shuizhi_PH004","pH4","水质","水质监测") , new RequiredInformation("ys_2026042705_sb_shuizhi_PH005","pH5","水质","水质监测") , new RequiredInformation("ys_2026042701_sb_shuizhi_zhuodu001","浊度1","水质","水质监测") , new RequiredInformation("ys_2026042702_sb_shuizhi_zhuodu002","浊度2","水质","水质监测") , new RequiredInformation("ys_2026042703_sb_shuizhi_zhuodu003","浊度3","水质","水质监测") , new RequiredInformation("ys_2026042704_sb_shuizhi_zhuodu004","浊度4","水质","水质监测") , new RequiredInformation("ys_2026042705_sb_shuizhi_zhuodu005","浊度5","水质","水质监测") }; /* [Header("手动拖拽绑定:identifier -> TMP_Text")] public List bindings = new List();*/ [Header("显示设置")] public string valueFormat = "0.##"; public bool includeUnit = true; private Dictionary textMap = new Dictionary(); public bool _isRunning = false;//这个东西只是用来防止手动连点 private void Awake() { cam = Camera.main; InitiateICONS(); //BuildBindingMap(); } private void InitiateICONS() { //使用 info 之前要先用 ICONPosition 来调整一下里面的位置,用 foreach 还不能改,只能用 for 循环慢慢改回去 for (int i = 0; i < infos.Count; i++) { RequiredInformation info = infos[i]; info.localPosition = ICONSPosition.transform.Find(info.SNWithdeviceName).localPosition; infos[i] = info; } //开始用修改好的infos来工作 foreach (RequiredInformation info in infos) { //生成一个预制体 GameObject obj = Instantiate(buoy); obj.name = info.SNWithdeviceName; obj.transform.SetParent(transform); obj.transform.localPosition = info.localPosition; obj.tag = info.tag;//添加标签 //开始修理预制体下面的响应函数和text int first = obj.name.IndexOf("_"); int second = obj.name.IndexOf('_', first + 1);//second 是第二个下划线的索引,索引是从0开始的 string deviceSn = obj.name.Substring(0, second);//前半部分,比如ys_2026030415,末尾没有下划线,但是这部分不重要,重要的是后半部分。 //这里second表示长度,第二个下划线索引是9,也就是第10位,但是索引做长度正好把第十位丢掉了 string deviceName = obj.name.Substring(second + 1); //设备名,也就是后半部分,从指定索引开始到结尾 //第一个子物体主要负责浮标的响应函数 obj.transform.GetChild(0).name = deviceName + "ICON"; obj.transform.GetChild(0).GetComponent