using UnityEngine; using UnityEngine.UI; /// /// 交通灯功能设置 /// public class TraficLightSet : MonoBehaviour { public Sprite upTImg, downTImg, leftTImg, rightTImg,crossRoadImg; public TraficTimeSet upSet, downSet, leftSet, rightSet; [Header("UI组件")] public Button setOverBtn; public Image roadBGImg; public GameObject lightUIPrefab; public GameObject lightModelPrefab; private TraficLightPut currentPut; private void Start() { setOverBtn.onClick.AddListener(CheckSet); } /// /// 检查设置是否完成 /// private void CheckSet() { PutTraficLight(); this.gameObject.SetActive(false); } /// /// 放置红绿灯模型和UI /// private void PutTraficLight() { switch (currentPut.traficType) { case TraficRoadType.十: int num = 4; GameObject[] group = new GameObject[num]; TraficLightUI[] uiGroup = new TraficLightUI[num]; for (int i = 0; i < num; i++) { GameObject go = GameObject.Instantiate(lightModelPrefab); group[i] = go; GameObject ui = GameObject.Instantiate(lightUIPrefab); uiGroup[i] = ui.GetComponent(); uiGroup[i].collider = group[i].GetComponent(); } group[0].transform.position = currentPut.upPoint; group[1].transform.position = currentPut.downPoint; group[2].transform.position = currentPut.leftPoint; group[3].transform.position = currentPut.rightPoint; //转向设置 group[2].transform.eulerAngles = new Vector3(group[2].transform.eulerAngles.x,90, group[2].transform.eulerAngles.z); group[3].transform.eulerAngles = new Vector3(group[3].transform.eulerAngles.x, 90, group[3].transform.eulerAngles.z); float random = Random.Range(0f, 1f); bool isGreen = random > 0.5f ? true : false; uiGroup[0].Init(isGreen,upSet, currentPut.upPoint,LightDir.up, uiGroup[2]);//上 uiGroup[1].Init(isGreen, downSet, currentPut.downPoint,LightDir.down, uiGroup[3]);//下 uiGroup[2].Init(!isGreen, leftSet, currentPut.leftPoint,LightDir.left, uiGroup[0]);//左 uiGroup[3].Init(!isGreen, rightSet, currentPut.rightPoint,LightDir.right, uiGroup[1]);//右 break; case TraficRoadType.leftT: int numLT = 3; GameObject[] groupLT = new GameObject[numLT]; TraficLightUI[] uiGroupLT = new TraficLightUI[numLT]; for (int i = 0; i < numLT; i++) { GameObject go = GameObject.Instantiate(lightModelPrefab); groupLT[i] = go; GameObject ui = GameObject.Instantiate(lightUIPrefab); uiGroupLT[i] = ui.GetComponent(); uiGroupLT[i].collider = groupLT[i].GetComponent(); } groupLT[0].transform.position = currentPut.upPoint; groupLT[1].transform.position = currentPut.downPoint; groupLT[2].transform.position = currentPut.leftPoint; //转向设置 groupLT[2].transform.eulerAngles = new Vector3(groupLT[2].transform.eulerAngles.x, 90, groupLT[2].transform.eulerAngles.z); float randomLT = Random.Range(0f, 1f); bool isGreenLT = randomLT > 0.5f ? true : false; uiGroupLT[0].Init(isGreenLT, upSet, currentPut.upPoint, LightDir.up, uiGroupLT[2]);//上 uiGroupLT[1].Init(isGreenLT, downSet, currentPut.downPoint, LightDir.down,null,uiGroupLT[0]);//下 uiGroupLT[2].Init(!isGreenLT, leftSet, currentPut.leftPoint, LightDir.left, uiGroupLT[0],null);//左 break; case TraficRoadType.rightT: int numRT = 3; GameObject[] groupRT = new GameObject[numRT]; TraficLightUI[] uiGroupRT = new TraficLightUI[numRT]; for (int i = 0; i < numRT; i++) { GameObject go = GameObject.Instantiate(lightModelPrefab); groupRT[i] = go; GameObject ui = GameObject.Instantiate(lightUIPrefab); uiGroupRT[i] = ui.GetComponent(); uiGroupRT[i].collider = groupRT[i].GetComponent(); } groupRT[0].transform.position = currentPut.upPoint; groupRT[1].transform.position = currentPut.downPoint; groupRT[2].transform.position = currentPut.rightPoint; //转向设置 groupRT[2].transform.eulerAngles = new Vector3(groupRT[2].transform.eulerAngles.x, 90, groupRT[2].transform.eulerAngles.z); float randomRT = Random.Range(0f, 1f); bool isGreenRT = randomRT > 0.5f ? true : false; uiGroupRT[0].Init(isGreenRT, upSet, currentPut.upPoint, LightDir.up, uiGroupRT[2]);//上 uiGroupRT[1].Init(isGreenRT, downSet, currentPut.downPoint, LightDir.down,null, uiGroupRT[0]);//下 uiGroupRT[2].Init(!isGreenRT, rightSet, currentPut.rightPoint, LightDir.right, uiGroupRT[0]);//右 break; case TraficRoadType.upT: int numUT = 3; GameObject[] groupUT = new GameObject[numUT]; TraficLightUI[] uiGroupUT = new TraficLightUI[numUT]; for (int i = 0; i < numUT; i++) { GameObject go = GameObject.Instantiate(lightModelPrefab); groupUT[i] = go; GameObject ui = GameObject.Instantiate(lightUIPrefab); uiGroupUT[i] = ui.GetComponent(); uiGroupUT[i].collider = groupUT[i].GetComponent(); } groupUT[0].transform.position = currentPut.upPoint; groupUT[1].transform.position = currentPut.leftPoint; groupUT[2].transform.position = currentPut.rightPoint; //转向设置 groupUT[2].transform.eulerAngles = new Vector3(groupUT[2].transform.eulerAngles.x, 90, groupUT[2].transform.eulerAngles.z); groupUT[1].transform.eulerAngles = new Vector3(groupUT[1].transform.eulerAngles.x, 90, groupUT[1].transform.eulerAngles.z); float randomUT = Random.Range(0f, 1f); bool isGreenUT = randomUT > 0.5f ? true : false; uiGroupUT[0].Init(isGreenUT, upSet, currentPut.upPoint, LightDir.up, uiGroupUT[2]);//上 uiGroupUT[1].Init(isGreenUT, leftSet, currentPut.leftPoint, LightDir.left,null, uiGroupUT[2]);//zuo uiGroupUT[2].Init(!isGreenUT, rightSet, currentPut.rightPoint, LightDir.right, uiGroupUT[0]);//右 break; case TraficRoadType.downT: int numDT = 3; GameObject[] groupDT = new GameObject[numDT]; TraficLightUI[] uiGroupDT = new TraficLightUI[numDT]; for (int i = 0; i < numDT; i++) { GameObject go = GameObject.Instantiate(lightModelPrefab); groupDT[i] = go; GameObject ui = GameObject.Instantiate(lightUIPrefab); uiGroupDT[i] = ui.GetComponent(); uiGroupDT[i].collider = groupDT[i].GetComponent(); } groupDT[0].transform.position = currentPut.downPoint; groupDT[1].transform.position = currentPut.leftPoint; groupDT[2].transform.position = currentPut.rightPoint; //转向设置 groupDT[2].transform.eulerAngles = new Vector3(groupDT[2].transform.eulerAngles.x, 90, groupDT[2].transform.eulerAngles.z); groupDT[1].transform.eulerAngles = new Vector3(groupDT[1].transform.eulerAngles.x, 90, groupDT[1].transform.eulerAngles.z); float randomDT = Random.Range(0f, 1f); bool isGreenDT = randomDT > 0.5f ? true : false; uiGroupDT[0].Init(isGreenDT, downSet, currentPut.downPoint, LightDir.down, uiGroupDT[2]); uiGroupDT[1].Init(isGreenDT, leftSet, currentPut.leftPoint, LightDir.left, null, uiGroupDT[2]); uiGroupDT[2].Init(!isGreenDT, rightSet, currentPut.rightPoint, LightDir.right, uiGroupDT[0]); break; } currentPut.gridInfo.isPlaceLight = true; Debug.Log(currentPut.name + "交通灯:"+ currentPut.gridInfo.isPlaceLight); } public void ShowTraficSetPanel(TraficRoadType type,TraficLightPut put) { switch (type) { case TraficRoadType.十: upSet.gameObject.SetActive(true); downSet.gameObject.SetActive(true); leftSet.gameObject.SetActive(true); rightSet.gameObject.SetActive(true); upSet.SetPaterner(downSet); leftSet.SetPaterner(rightSet); //道路背景图设置 roadBGImg.sprite = crossRoadImg; break; case TraficRoadType.leftT: upSet.gameObject.SetActive(true); downSet.gameObject.SetActive(true); leftSet.gameObject.SetActive(true); rightSet.gameObject.SetActive(false); upSet.SetPaterner(downSet); //道路背景图设置 roadBGImg.sprite = leftTImg; break; case TraficRoadType.rightT: upSet.gameObject.SetActive(true); downSet.gameObject.SetActive(true); leftSet.gameObject.SetActive(false); rightSet.gameObject.SetActive(true); upSet.SetPaterner(downSet); //道路背景图设置 roadBGImg.sprite = rightTImg; break; case TraficRoadType.upT: upSet.gameObject.SetActive(false); downSet.gameObject.SetActive(true); leftSet.gameObject.SetActive(true); rightSet.gameObject.SetActive(true); leftSet.SetPaterner(rightSet); //道路背景图设置 roadBGImg.sprite = leftTImg; break; case TraficRoadType.downT: upSet.gameObject.SetActive(false); downSet.gameObject.SetActive(true); leftSet.gameObject.SetActive(true); rightSet.gameObject.SetActive(true); leftSet.SetPaterner(rightSet); //道路背景图设置 roadBGImg.sprite = downTImg; break; } //反馈完成设置 this.gameObject.SetActive(true); currentPut = put; } }