Game制作入門 day3

ブロック崩しの仕上げ

www.youtube.com

ボタンのイベントの処理、ゲームオーバー、ゲームクリア周りの処理を作成。ボタンのイベントが上手く行かなかったのは、GameObjectとして紐つけていたのが、C#スクリプトだったからぽい。GameObjectはヒエラルキーウィンドウに並んでいるのでそこからD&Dしなければならなかった。

VS Codeの補完が思ったより動かなくてJetBrains Riderとかが良い気がしたけどいきなりお金かけるのもな〜ということでもうしばらくはVS Codeで頑張ってみる。

Unityはドキュメントもたくさんあって助かる。補完が効かない場合はクラスリファレンスを当たればとりあえずだいたい分かる。 UnityEngine.SpriteRenderer - Unity スクリプトリファレンス

ブロック崩しのブロックを動的に生成する

ブロック崩しの動画では、ブロックを一つずつオブジェクトとしてシーンに配置していた。これだとかなり配置作業が大変なので、動的に生成することにした。

ブロックをPrefab化し、ゲームのスタート時にブロックを動的に生成する。Blockクラスに対して、動的生成はGameObjectになるので、型周りでやや迷ったがなんとかなった。

画面というかカメラのサイズ感がよくわからず、座標がマジックナンバーになってしまっている。 このあたりはまた別途調査しなければならない。

void Start()
{
    int columns = 10;
    int rows = 2;
    blocks = new GameObject[columns * rows];
    GameObject obj = (GameObject)Resources.Load("Block");
        
    Bounds bounds = obj.GetComponent<SpriteRenderer>().bounds;
    float width = bounds.size.x;
    float height = bounds.size.y;

    for (int i = 0; i < columns; i++)
    {
        for (int j = 0; j < rows; j++)
        {
            GameObject instance = (GameObject)Instantiate(
                obj,
                // アスペクト比や壁の配置などでマジックナンバーを模索した
                new Vector2(-2.65f + width * i, 3.0f + (j * height)),
                Quaternion.identity
            );
            blocks[i + columns * j] = instance;
        }
    }
}

動的に生成したブロック

動的生成だとプレビューに出ないし、またブロックのレイアウトが複雑になってくると管理が難しそうと分かった。おそらくこれはタイルマップで管理するのがいいんじゃないかという気がするが、タイルマップを使う方法が分かってないので調べる必要がある。

Unity ProjectをGithubで管理する

だんだんやれる事というか、やらないといけないことが分かってきて、そろそろ変更管理をしないと大変になりそう、ということでgitで管理することにした。

Githubだと.gitignoreでUnityのテンプレもあるので助かる。Unity Editorのwindowサイズなど、作業してたら頻繁に変更しそうな設定ファイルまでgitに含まれていたのが気になりどころ。しばらく触ってみて必要なさそうなら除外することにする。

Unity Pathway Explore Unity

小テストに合格したので続きに進んでいく。

learn.unity.com

Realtimeって何?とかGame Engineってなに?とか言った話。ゲーム以外でも幅広く使われている事例などを学んだ。Unityでのゲーム制作は完全に趣味だけど、もしかしたら本業なんかにも役立つときが来るのかもしれないな、などと思ったりした。