【Unity 入門】子オブジェクトとして生成して、回転させる
よくわからないタイトルになりましたが、
要はタイトル画面の背景として簡単なマップをジェネレートしたものを上空カメラがぐるぐる回る感じで
こんなマップだよ!と紹介したい訳です。
完成デモはこちら
タイトルとか入れたかったんだけど、時間が無かったのでマップをぐるぐる回す奴のみ。
1.floorオブジェクトの子としてマップを生成する
マップに関しては前にやったのでこちらを参照してください
でこのままだと回転させる時に複製したオブジェクトは回らない事になってしまうのでこれを
floorの下にCloneされたオブジェクトが入る様にしたいですなのでスクリプトを変更します
using UnityEngine; using System.Collections; public class TitleMapGenerator : MonoBehaviour { /** * @public propaties */ public GameObject wallPrefab; public GameObject defaultWallPrefab; /** * @private propaties */ //先に宣言しておく private GameObject clone; private GameObject floor; private int default_x_max = 19; private int default_z_max = 19; // Use this for initialization void Start () { //Floorを取得 floor = GameObject.Find("floor"); //initData string map_matrix = "222000222000000000:222111222111110000:252000522000010000:000000010000011110:000000011000000010:000000001000000010:000000522200000010:000000222200000010:000000222200000010:000000255200000110:000000000000000100:000000000000001100:000000000000001000:000000000000001000:000000000000001000:000000000000022222:000000000000023222:000000000000022222"; //wakucreate CreateMapWaku(); // mapcreate CreateMap(map_matrix); } //CreateWaku void CreateMapWaku() { for(int dx = 0; dx <= default_x_max; dx++){ //複製したプレハブをGameObjectに型キャストして入れます clone = (GameObject) Instantiate(defaultWallPrefab, new Vector3(dx, 0, 0), Quaternion.identity); //親オブジェクトの指定はこんな感じでできます。これを以下プレハブ複製箇所に全部適応 clone.transform.parent = floor.transform; clone = (GameObject) Instantiate(defaultWallPrefab, new Vector3(dx, 0, default_z_max), Quaternion.identity); clone.transform.parent = floor.transform; } for(int dz = 0; dz <= default_z_max; dz++){ clone = (GameObject) Instantiate(defaultWallPrefab, new Vector3(0, 0, dz), Quaternion.identity); clone.transform.parent = floor.transform; clone = (GameObject) Instantiate(defaultWallPrefab, new Vector3(default_x_max, 0, dz), Quaternion.identity); clone.transform.parent = floor.transform; } } //Createmap void CreateMap(string map_matrix) { string[] map_matrix_arr = map_matrix.Split(':'); for(int x = 0; x < map_matrix_arr.Length; x++){ string x_map = map_matrix_arr[x]; for(int z = 0; z < x_map.Length; z++){ int obj = int.Parse(x_map.Substring(z, 1)); if(obj == 0){ clone = (GameObject) Instantiate(wallPrefab, new Vector3(x + 1, 0, z + 1), Quaternion.identity); clone.transform.parent = floor.transform; } } } } }
そうするとこんな感じの階層でマップが出来上がります。
これで準備完了。
2.カメラを回すんじゃない、マップを回すんだ。
最初マップじゃなくてカメラ回そうと思ったんですけど、
それより断然カメラ位置を固定してマップを回した方が楽だよね。という事でマップを回す事にしました。
マップを回転させるスクリプトをfloorにアタッチします。
using UnityEngine; using System.Collections; public class TitleCameraWork : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { //これだけで回転する transform.Rotate(0, 25 * Time.deltaTime, 0); } }
これでこんな感じで背景マップが回転します。
あとはロゴをNGUIで重ねたり、ログイン処理をここに入れたりし無いと行けないなぁ。。