public void SetupObstacItems(float radius = 0.25f) { oriRadius = radius; //level related to diff ObstacLevel = LogicManager.Instance.difficulty; if (setUpTimer < setUpInver && obstacItems.Count > 0) { return; } setUpTimer = 0; while (obstacItems.Count > 0) { ObstacItem tempOItem = obstacItems[0]; obstacItems.Remove(tempOItem); GameObject.Destroy(tempOItem.gameObject); } for (int i = 1; i <= ObstacLevel; ++i) { GameObject prefab = ObstacPrefab[UnityEngine.Random.Range(0, ObstacPrefab.Count)]; int obstaNum = UnityEngine.Random.Range(ObstacNumMin, ObstacNumMax + 1); float r = radius / ObstacLevel * i * UnityEngine.Random.Range(0.9f, 1.1f); float size = scaleCurve.Evaluate(1.0f * i / ObstacLevel); SetUpOneLevel(prefab, obstaNum, r, size); } }
public void SetUpOneLevel(GameObject prefab, int obsNumber, float radius, float size) { float initAngle = UnityEngine.Random.Range(0, 2f * Mathf.PI); for (int i = 0; i < obsNumber; ++i) { GameObject obj = Instantiate(prefab) as GameObject; float angle = 2f * Mathf.PI * i / obsNumber + initAngle; float x = Mathf.Sin(angle) * radius; float y = -Mathf.Cos(angle) * radius; obj.transform.parent = this.transform; obj.transform.localPosition = new Vector3(x, y, 0); obj.transform.Rotate(new Vector3(0, 0, angle * 180f / Mathf.PI)); obj.transform.localScale = Vector3.one * size; ObstacItem obsItem = obj.GetComponent <ObstacItem>(); obsItem.Init(); obsItem.SetAlpha(0); obstacItems.Add(obsItem); } }