/// <summary> /// 场景中的摄像机跟相对应的现实中实体摄像机的客流统计信息关联起来 /// </summary> /// <returns>The passenger flow info to camera.</returns> IEnumerator BindPassengerFlowInfoToCamera() { Logger.Instance.WriteLog("场景中的摄像机跟相对应的现实中实体摄像机的客流统计信息关联起来"); //找到摄像机,并用cameraLst集合存储 GameObject[] cameraLst = GameObject.FindGameObjectsWithTag("CameraFace"); //遍历摄像机集合 foreach (var item in cameraLst) { //给每台摄像机上添加PassengerFlowInfoCamera脚本 PassengerFlowInfoCamera pfic = item.AddComponent <PassengerFlowInfoCamera>(); //初始化客流信息 pfic.Init(item.GetComponent <MonitorInfoData>().Data); PFArea += pfic.UpdateData; } yield return(null); }
/// <summary> /// 加载客流统计区域,及加载当天最新统计信息, /// 画客流统计区域 /// </summary> /// <returns>The passenger flow area.</returns> IEnumerator LoadPassengerFlowArea() { Logger.Instance.WriteLog("加载客流统计区域,及加载当天最新统计信息"); Logger.Instance.WriteLog("加载客流统计区域"); //实例化一个PassengerFlowAreaDao类 PassengerFlowAreaDao pfaDao = new PassengerFlowAreaDao(); //调用PassengerFlowAreaDao中的Select001函数 pfaDao.Select001(); //将pfa.Result中的结构体赋值给infoLst infoLst = pfaDao.Result; //遍历infoLst集合 foreach (var info in infoLst) { //如果PassengerFlowAreaInfo中的Name为主客流 if (info.Name == "主客流") { //定义一个对象 GameObject g = new GameObject(); //将这个对象的位置初始化为原点 g.transform.position = Vector3.zero; //给这个对象上挂PassengerFlowInfoDetail脚本,并用p来接收这个脚本 PassengerFlowInfoDetail p = g.AddComponent <PassengerFlowInfoDetail>(); //给这四个材质变量赋初值 p.mat_red = mat_red; p.mat_green = mat_green; p.mat_yellow = mat_yellow; p.mat_orange = mat_orange; //得到人流控制面板UI p.PFInfoUI = PassengerInfo.GetComponent <PassengerFlowInfoUI>(); //初始化对象p结构体PassengerFlowAreaInfo的信息 p.Init(info, null); PFArea += p.UpdateData; continue; } //定义一个string类型的数组,并用"|"分割 string[] point = info.Points.Split('|'); //定义一个V3类型及的数组,长度为...? Vector3[] pts = new Vector3[point.Length / 3]; //定义一个V3类型的变量,并初始化为原点 Vector3 vec = Vector3.zero; //遍历客流统计区域顶点的集合 for (int i = 0; i < pts.Length; i++) { pts[i] = new Vector3(float.Parse(point[i * 3]), float.Parse(point[i * 3 + 1]), float.Parse(point[i * 3 + 2])); vec += pts[i]; } vec /= pts.Length; int[] triangles = new int[pts.Length]; for (int i = 0; i < triangles.Length; i++) { triangles[i] = i; } //定义一个对象 GameObject go = new GameObject(); //给这个对象设置层级 go.layer = LayerMask.NameToLayer("PassengerFlowArea"); //给go对象添加MeshRender组件 MeshRenderer meshrend = go.AddComponent <MeshRenderer>(); //meshrend.material.shader = Shader.Find("Particles/Alpha Blended"); //meshrend.material.SetColor("_TintColor",new Color(0,1,0,0.2f)); //给go对象赋值绿色材质 meshrend.material = mat_green; //给go对象添加MeshFilter组件 MeshFilter meshFilter = go.AddComponent <MeshFilter>(); //给网格定点赋上pts三角形面片 meshFilter.mesh.vertices = pts; //网格角度为triangles meshFilter.mesh.triangles = triangles; //重新计算网格的发现 meshFilter.mesh.RecalculateNormals(); //给go对象添加meshCollider组件 MeshCollider mc = go.AddComponent <MeshCollider>(); //将meshFilter的mesh赋值给MeshCollider的sharedMesh,作为共享网格 mc.sharedMesh = meshFilter.mesh; //给go对象重新赋值一个坐标 go.transform.position = new Vector3(0, 0.2f, 0); GameObject infoUI = Instantiate(PassengerFlowInfoShow) as GameObject; infoUI.transform.SetParent(PassengerFlowInfoShowParent); infoUI.transform.localScale = Vector3.one; infoUI.GetComponent <PassengerAreaUI>().Bind(vec, info.Name); //GameObject go = Instantiate(PassengerFlowAreaPrefab) as GameObject; PassengerFlowInfoDetail pfid = go.AddComponent <PassengerFlowInfoDetail>(); pfid.mat_red = mat_red; pfid.mat_green = mat_green; pfid.mat_yellow = mat_yellow; pfid.mat_orange = mat_orange; pfid.Init(info, infoUI.GetComponent <PassengerAreaUI>()); PFArea += pfid.UpdateData; } //从数据库加载当天最新的客流统计信息 Logger.Instance.WriteLog("从数据库加载当天最新的客流统计信息"); List <PassengerFlowInfoLog> InfoLogLst = pfaDao.Select003(DateTime.Now.ToString("yyyyMMdd") + "000000"); PassengerFlowData _pfData = new PassengerFlowData(); foreach (var logInfo in InfoLogLst) { _pfData.SumCount = int.Parse(logInfo.SumCount); _pfData.EnterCount = int.Parse(logInfo.EnterCount); _pfData.ExitCount = int.Parse(logInfo.ExitCount); DicPassengerFlowData[logInfo.PassengerFlowUrl] = _pfData; } if (PFArea != null) { PFArea.Invoke(DicPassengerFlowData); } yield return(infoLst); }