|  |  |  | @ -0,0 +1,104 @@ | 
			
		
	
		
			
				
					|  |  |  |  | using System.Collections; | 
			
		
	
		
			
				
					|  |  |  |  | using System.Collections.Generic; | 
			
		
	
		
			
				
					|  |  |  |  | using UnityEngine; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | public class RoadSys : MonoBehaviour | 
			
		
	
		
			
				
					|  |  |  |  | { | 
			
		
	
		
			
				
					|  |  |  |  |     /// <summary> | 
			
		
	
		
			
				
					|  |  |  |  |     /// 路段检测数据字典 | 
			
		
	
		
			
				
					|  |  |  |  |     /// </summary> | 
			
		
	
		
			
				
					|  |  |  |  |     public Dictionary<string, int> roadCheckerDict = new Dictionary<string, int>(); | 
			
		
	
		
			
				
					|  |  |  |  |     /// <summary> | 
			
		
	
		
			
				
					|  |  |  |  |     /// 2D地图中路段状态的对象的字典 | 
			
		
	
		
			
				
					|  |  |  |  |     /// </summary> | 
			
		
	
		
			
				
					|  |  |  |  |     public Dictionary<string, GameObject> roadStateDict = new Dictionary<string, GameObject>(); | 
			
		
	
		
			
				
					|  |  |  |  |     private float timer = 0; | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     public void Init() | 
			
		
	
		
			
				
					|  |  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |  |         InitChecker(); | 
			
		
	
		
			
				
					|  |  |  |  |          | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     //检索检测器和2D地图路段状态器 | 
			
		
	
		
			
				
					|  |  |  |  |     public void InitChecker() | 
			
		
	
		
			
				
					|  |  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |  |         //检测器 | 
			
		
	
		
			
				
					|  |  |  |  |         GameObject[] checkers = GameObject.FindGameObjectsWithTag("CarFlowChecker"); | 
			
		
	
		
			
				
					|  |  |  |  |         for (int i = 0; i < checkers.Length; i++) | 
			
		
	
		
			
				
					|  |  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |  |             if (checkers[i] != null) | 
			
		
	
		
			
				
					|  |  |  |  |             { | 
			
		
	
		
			
				
					|  |  |  |  |                 roadCheckerDict.Add(checkers[i].name, 0);//初始化阶段,车辆数量默认0 | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |         ///状态器 | 
			
		
	
		
			
				
					|  |  |  |  |         GameObject[] states= GameObject.FindGameObjectsWithTag("CarFlowState"); | 
			
		
	
		
			
				
					|  |  |  |  |         for (int i = 0; i < states.Length; i++) | 
			
		
	
		
			
				
					|  |  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |  |             if (states[i] != null) | 
			
		
	
		
			
				
					|  |  |  |  |             { | 
			
		
	
		
			
				
					|  |  |  |  |                 roadStateDict.Add(states[i].name, states[i]);//初始化阶段,车辆数量默认0 | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     /// <summary> | 
			
		
	
		
			
				
					|  |  |  |  |     /// 路段字典键值修改 | 
			
		
	
		
			
				
					|  |  |  |  |     /// </summary> | 
			
		
	
		
			
				
					|  |  |  |  |     /// <param name="roadName"></param> | 
			
		
	
		
			
				
					|  |  |  |  |     /// <param name="value"></param> | 
			
		
	
		
			
				
					|  |  |  |  |     public void SetCheckerValue(string roadName,int value) | 
			
		
	
		
			
				
					|  |  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |  |         if (roadCheckerDict.ContainsKey(roadName)) | 
			
		
	
		
			
				
					|  |  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |  |             //改变值 | 
			
		
	
		
			
				
					|  |  |  |  |             int numble = roadCheckerDict[roadName]; | 
			
		
	
		
			
				
					|  |  |  |  |             numble += value; | 
			
		
	
		
			
				
					|  |  |  |  |             //加入字典 | 
			
		
	
		
			
				
					|  |  |  |  |             roadCheckerDict.Remove(roadName); | 
			
		
	
		
			
				
					|  |  |  |  |             roadCheckerDict.Add(roadName, numble); | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |     /// <summary> | 
			
		
	
		
			
				
					|  |  |  |  |     /// 路况更新函数 | 
			
		
	
		
			
				
					|  |  |  |  |     /// </summary> | 
			
		
	
		
			
				
					|  |  |  |  |     /// <param name="time">间隔时间</param> | 
			
		
	
		
			
				
					|  |  |  |  |     public void RoadStateUpdate(float time) | 
			
		
	
		
			
				
					|  |  |  |  |     { | 
			
		
	
		
			
				
					|  |  |  |  |         timer += Time.deltaTime; | 
			
		
	
		
			
				
					|  |  |  |  |         if (timer >= time) | 
			
		
	
		
			
				
					|  |  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |  |             foreach (var item in roadCheckerDict) | 
			
		
	
		
			
				
					|  |  |  |  |             { | 
			
		
	
		
			
				
					|  |  |  |  |                 GameObject state_object = null; | 
			
		
	
		
			
				
					|  |  |  |  |                 //获取到状态表示器 | 
			
		
	
		
			
				
					|  |  |  |  |                 if(roadStateDict.TryGetValue(item.Key, out state_object)) | 
			
		
	
		
			
				
					|  |  |  |  |                 { | 
			
		
	
		
			
				
					|  |  |  |  |                     int numble = item.Value;//监控的车辆数量 | 
			
		
	
		
			
				
					|  |  |  |  |                      | 
			
		
	
		
			
				
					|  |  |  |  |                     if (numble >= 0 && numble <= 6)//绿色状态 | 
			
		
	
		
			
				
					|  |  |  |  |                     { | 
			
		
	
		
			
				
					|  |  |  |  |                         state_object.GetComponent<MeshRenderer>().material.color = Color.green; | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |  |                     else if(numble > 6 && numble <= 12)//黄色状态 | 
			
		
	
		
			
				
					|  |  |  |  |                     { | 
			
		
	
		
			
				
					|  |  |  |  |                         state_object.GetComponent<MeshRenderer>().material.color = Color.yellow; | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |  |                     else if (numble > 12 )//红色拥堵 | 
			
		
	
		
			
				
					|  |  |  |  |                     { | 
			
		
	
		
			
				
					|  |  |  |  |                         state_object.GetComponent<MeshRenderer>().material.color = Color.red; | 
			
		
	
		
			
				
					|  |  |  |  |                     } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |                 else | 
			
		
	
		
			
				
					|  |  |  |  |                 { | 
			
		
	
		
			
				
					|  |  |  |  |                     Debug.LogError("没有获取到状态表示器:" + item.Key); | 
			
		
	
		
			
				
					|  |  |  |  |                 } | 
			
		
	
		
			
				
					|  |  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |             timer = 0; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | } |