「【Unity】ブロック崩し(3D)の制作手順を解説!反射角度・速度調整・クリア判定まで」をやってみた。
例によって、問題点、不明点があったところだけ書く。
「概要」
「Projectの新規作成」
「シーンを保存する」
「メインカメラの調整」
ちょっとピンと来ない。
このサイトのGIF動画丸投げの解説は私は波長が合わない。
まあ、特に重要な部分ではないのでスルーした。
Scene Windowの右下にCamera Previewが表示されるので、
それを見ながらカメラ位置を変更すればいいと思う。
「壁の作成」
「ボール(Ball)の作成」
「ボールに物理演算を加える」
「ボールが動くように初速を与える」
1 |
Rigidbody rb = this.GetComponent<Rigidbody>(); |
が
1 |
Rigidbody rb = this.GetComponent<Rigidbody>(); |
になってる。
このサイトの記事は書きっぱなしでチェックがされていない感じ。
「正しく反射するように設定する」
「パドル(Bar)の作成」
Create > Cube でなくて Create > 3D Object > Cube
1 |
< |
が
1 |
< |
になってる。
「ブロック(Block)の作成」
手作業でBlockを作っても何の発展性も無いので以下のサイトを参考にする。
「PrefabとInstantiateの基本(1)ブロックをScriptで配置」
「PrefabとInstantiateの基本(2)効率的にBlockを並べる」
下のように30個のBlockをスクリプトで並べるようにした。
「ゲームクリアの判定」
(1)ではpublic GameObject blockPrefab;
(2)ではpublic Transform blockPrefab;
となっていて、Transformとして宣言してもエラーが出なかった。
親子関係を変更するのに返り値を利用しようとしたらエラーが出た。
error CS0029: Cannot implicitly convert type ‘UnityEngine.Transform’ to ‘UnityEngine.GameObject’
public GameObject blockPrefab;
でエラーは出なくなった。
下に30個のBlockをBlocksの子として作成するスクリプトを載せる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
using UnityEngine; using System.Collections; public class BlockControl : MonoBehaviour { //public Transform blockPrefab; public GameObject blockPrefab; // Use this for initialization void Start() { for (int j = 0; j < 6; j++) { //配置する座標を設定 Vector3 placePosition = new Vector3(-15, 10 + j*(3.5f), 0); //配置する回転角を設定 Quaternion q = new Quaternion(); q = Quaternion.identity; //配置 //Instantiate(blockPrefab, placePosition, q); for (int i = 0; i < 5; i++) { GameObject cloneObject = Instantiate(blockPrefab, placePosition, q); cloneObject.transform.parent = GameObject.Find("Blocks").transform; placePosition.x += blockPrefab.transform.localScale.x; } } } // Update is called once per frame void Update() { } } |
Tagの設定での8の手順の
開かれたダイアログのSaveを選んで保存します。
は見当たらなかった。
「ゲームオーバーの判定」