public void SetStations(List <string> names, BeefMap beefmap) { List <Vector3> pos = new List <Vector3>(); for (int i = 0; i < Stations.Length; i++) { if (i < names.Count) { Stations[i].gameObject.SetActive(true); Tails[i].gameObject.SetActive(true); Stations[i].GetComponentInChildren <Text>().text = names[i]; var start = raceCamera.WorldToScreenPoint(beefmap.stationWorldPositions[names[i]]); Vector2 p; RectTransformUtility.ScreenPointToLocalPointInRectangle(Stations[i].transform.parent.GetComponent <RectTransform>(), start, uiCamera, out p); var local = Stations[i].transform.localPosition; var parent = Stations[i].transform.parent.GetComponent <RectTransform>(); float min = parent.rect.xMin + (Stations[i].sizeDelta.x / 2 + 10); local.x = Mathf.Max(p.x, min);// 左画面外対応 Stations[i].transform.localPosition = local; Tails[i].focusPosition = start; } else { Stations[i].gameObject.SetActive(false); Tails[i].gameObject.SetActive(false); } } // 重ねないように一つずつ右へずらす for (int i = 1; i < names.Count; i++) { var lhs = Stations[i - 1].transform.localPosition; var width = Stations[i - 1].sizeDelta.x + 10;// / 2 + 10; var rhs = Stations[i].transform.localPosition; rhs.x = Mathf.Max(rhs.x, lhs.x + width); Stations[i].transform.localPosition = rhs; } // 右へ画面外になる場合、左側へ float?max = null; for (int i = names.Count - 1; i >= 0; i--) { var p = Stations[i].transform.parent.GetComponent <RectTransform>(); if (!max.HasValue) { // 初回 max = p.rect.xMax - (Stations[i].sizeDelta.x / 2 + 10); } else { max = max.Value - (Stations[i].sizeDelta.x + 10); } var local = Stations[i].transform.localPosition; local.x = Mathf.Min(local.x, max.Value); Stations[i].transform.localPosition = local; } }
/// <summary> /// バイナリからロードする /// </summary> /// <param name="bytes"></param> public IEnumerator LoadAsync(byte[] bytes, Vector2 worldCenter, Vector2 worldScale) { var thread = new Thread(new ParameterizedThreadStart(LoadAsyncInternal)); thread.Start(new Parameter { beefmap = this, bytes = bytes, worldCenter = worldCenter, worldScale = worldScale }); while (thread.ThreadState == ThreadState.Running) { yield return(null); } Current = this; }