畫圓(顏色漸變的光點圖)
阿新 • • 發佈:2019-02-09
首先,此處畫的圓是由等距的圓點拼成的。專案所需,畫了9圈,根據一個值改變顏色。
整體程式碼如下:
InitSpot函式初始化圓點,通過兩個for迴圈,根據半徑畫出9個圓,個數以及半徑可自行更改。using System.Collections; using UnityEngine; public class LightSpots: MonoBehaviour { public GameObject circleModel;//要排布的物體 public float changeAngle = 0;//旋轉改變的角度 private int count;//旋轉一週需要的預製物體個數 private float angle = 0;//當前角度 private float r;//半徑 private Color colorRed;//紅色 private Color colorYellow;//黃色 private Color colorBlue;//藍色 private Color colorWhite;//淺藍 private void Awake() { colorRed = Color.red; colorYellow = Color.yellow; colorBlue = Color.blue; colorWhite = Color.white; } // Use this for initialization private void Start() { InitSpot(); ChangeColor(0.08f); } /// <summary> /// 初始化所有點 /// </summary> private void InitSpot() { for (r = 0.1f; r < 0.51f; r += 0.05f) { float changeAngle1 = changeAngle / r; count = (int)(360 / changeAngle1); for (int i = 0; i < count; i++) { Vector3 center = circleModel.transform.position; GameObject obj = (GameObject)Instantiate(circleModel); obj.transform.parent = gameObject.transform; obj.transform.localScale = new Vector3(1, 1, 1); float hudu = (angle / 180) * Mathf.PI; float xx = center.x + r * Mathf.Cos(hudu); float yy = center.y + r * Mathf.Sin(hudu); obj.transform.position = new Vector3(xx, yy, 0); obj.tag = "Lap" +((int)(r*20-1)).ToString(); angle += changeAngle1; } } } /// <summary> /// 更改顏色 /// </summary> public void ChangeColor(float diameter) { float m = 62831853 * diameter * diameter; float n = Mathf.Sqrt(1 + 1764 * diameter * diameter); float o = m / n; for (int i=36;i<=180;i+=18) { if (o / i > 2000) ColorControl(i, colorRed); else if (o / i > 1000) ColorControl(i, Color.Lerp(colorRed, colorYellow, 0.33f)); else if (o / i > 600) ColorControl(i, Color.Lerp(colorRed, colorYellow, 0.67f)); else if (o / i > 400) ColorControl(i, colorYellow); else if (o / i > 300) ColorControl(i, Color.Lerp(colorYellow, colorBlue, 0.33f)); else if (o / i > 200) ColorControl(i, Color.Lerp(colorYellow, colorBlue, 0.67f)); else if (o / i > 100) ColorControl(i, colorBlue); else if (o / i > 50) ColorControl(i, Color.Lerp(colorBlue, colorWhite, 0.05f)); else if (o / i >= 0) ColorControl(i, Color.Lerp(colorBlue, colorWhite, 0.1f)); print(o / i); } } /// <summary> /// 控制每一圈的顏色 /// </summary> /// <param name="radius"></param> /// <param name="color"></param> private void ColorControl(int radius,Color color) { for (int j = 0; j < GameObject.FindGameObjectsWithTag("Lap" + (radius/18-1).ToString()).Length; j++) GameObject.FindGameObjectsWithTag("Lap" + (radius / 18 - 1).ToString())[j].GetComponent<UISprite>().color = color; } }
呼叫ChangeColor方法可改變顏色。
結果圖如下(中間圓點忽略):