Unityの練習中なので、書籍「Javaグラフィックス」をUnityで実装してみることにしました。
Javaグラフィックスは2001年の書籍です。
Javaアプレットとか言っていた時代ですね。私の年齢層がバレますね。
結構面白いことができるので大事に保管していました。
今回は書籍の中で花を咲かせるというのをUnityでやってみることにします。
Unityの本に書いてあることをそのまま写経するのも練習になりますがJavaで書かれたコードをUnity+C#で実現しようとするとなかなか応用力が試されるのでいい練習になるのでやってみます。
花といっても円です。書籍では2Dなのですが3Dで実現してみることにしました。
Code
using System.Collections; using System.Collections.Generic; using UnityEditor.SceneManagement; using UnityEngine; public class GameManager : MonoBehaviour { public GameObject Prefab; // Start is called before the first frame update void Start() { for (int i = 0; i < 60; i++) { var rangeMax = 4f; var o = Instantiate(Prefab, new Vector3(Random.Range(-rangeMax, rangeMax), Random.Range(-rangeMax, rangeMax), Random.Range(-rangeMax, rangeMax)), Quaternion.identity); var size = Random.Range(0.5f, 1f); o.transform.localScale = new Vector3(size, size, size); o.GetComponent<Renderer>().material.color= Random.ColorHSV(0f, 1f, 1f, 1f, 0.5f, 1f); } } // Update is called once per frame void Update() { } }
3DObjectのSphereを直接生成できないのでPrefabを設定して、Instatiateする方にしています。
PrefabはSphereそのものでMaterialなどもデフォルトのままです。
CameraをOrthographicに指定して調整し、Cylinderの底を使い、2Dらしくするとこちら。
これが原本に近い形になるかなと。
using System.Collections; using System.Collections.Generic; using UnityEditor.SceneManagement; using UnityEngine; public class GameManager : MonoBehaviour { public GameObject Prefab; // Start is called before the first frame update void Start() { for (int i = 0; i < 240; i++) { var rangeMax = 4f; var position = new Vector3(Random.Range(-rangeMax, rangeMax), Random.Range(-rangeMax, rangeMax), 0); var o = Instantiate(Prefab); var size = Random.Range(0.5f, 1f); o.transform.localScale = new Vector3(size, size, size); o.transform.position = position; o.GetComponent<Renderer>().material.color = Random.ColorHSV(0f, 1f, 1f, 1f, 0.5f, 1f); } } // Update is called once per frame void Update() { } }
今日は、ここまで。まだまだこの本では色々できることがあるので実装しながら、Unityをやり込んでいきます。