ご覧になっていただきありがとうございます。「ひさよろ」です。
“ありたい自分” で人生を楽しむ大人を増やす
という理念のもと、コーチングを使って
日本人が大志を抱けるゲームをつくる
プロフィールページでご説明した通り、私は上記のような夢を持ち、会社員ながら完全未経験の『ゲーム制作』と『コーチング』を掛け合わせた活動を行っています。
2024年10月現在、私はオンラインスクール「TechAcademy」(以下、テクアカ)のUnityコースで学んでいるところで、前回2回にわたってLesson5(ピンボールゲーム制作)の過程をお話ししました。
無事に課題提出も完了したのですが、実際のところ内容をキチンと理解したとは言えません…。指示通りにやったらできたという感じです。なので次のレッスンには進まず、2週間ほど立ち止まって理解を深めることにしました。今回はその中で得た私の理解を文章にしたり、図解にしたりしてご紹介します。
ゲーム制作を学び始めた人の参考になったら嬉しいです。
せっかくなので宣伝しておきます↓
よく分からなかったこと
Lesson5を最後までやり切りましたが、よく分からなかったことは主に以下の3つ。
- 「ゲームオブジェクト」ってなに?
- 「クラスとインスタンス」ってなに?
- 「関数」ってどうやってつくるの?
さらっと説明を受けただけだと、ワケわかめ。ここで学んだことを別のゲームに応用できるかと聞かれたら、「できません!」と自信を持って答えます。なので、Unity公式の説明やインターネット上の先輩方の解説(非常に助かります!)を読んだり、テクアカのメンターさんの説明を聞いて「あぁ、そういうことか」と納得できたことを書いていきます。
ちなみにLesson5で作ったピンボールゲームはこんな感じ↓
「ゲームオブジェクト」ってなに?
Unity公式のリファレンス(ver.2018.4)を読むと、こう書かれています。
ゲームオブジェクトは空の料理鍋、コンポーネントはゲームのレシピに含まれる様々な材料と考えるとよいでしょう。
ゲームオブジェクト – Unity マニュアル (unity3d.com)
それを図にあらわしたのが↑です。ゲームオブジェクトは色んなコンポーネントの情報を持っているんだ。そして主要なコンポーネントは5つあるんだな。と覚えました。
「クラスとインスタンス」ってなに?
これは本当に「?」状態でした。変数や関数は数学用語ですし、Excelでも使う言葉なのでイメージできますが、「クラス」って?しかもそれを「インスタンス」するって?ついていけない状態で、当たり前のように説明されます。普通に生活していると出会うことのない概念。こういうのが挫折のきっかけになるんですよね。
私の中でしっくりきた説明は、クラス=設計図。便利な機能が最初から準備されていて、その中から必要な機能を使う。設計図は実態ではないので、使う場合はインスタンス=実体化させる。
書いていて「これ、きちんと理解できたと言えるのか?」と思い始めましたが、概念なんぞは このくらいのイメージができれば十分でしょう。
クラスについては、次の関数でもいろいろ出てきますが、都度覚えていくしかないですね。
関数ってどうやってつくるの?
ゲームオブジェクトに思い通りの動きをさせるには、スクリプト(=プログラム)を書かないといけません。そこで駆使するのが関数です。ピンボールゲームを作っただけでもたくさんの関数が出てきます。覚えられねぇ…。ということで、関数の基本(書き方)を理解しておくことは大事なので↑のようにまとめました。
ちなみに、ピンボールゲームで使った関数は以下の通りです。別のゲームでも必要になりそうな関数だなぁ。
※実際にスクリプトを書くときは、クラスと関数の間にドット(.)が必要です。例:transform.Rotate()
クラス | 関数 | 機能/Lesson5で使い道 |
---|---|---|
transform | Rotate() | オブジェクトのTransformのRotation(回転角度)を変更する 星型オブジェクトがゲーム中回転するようにした |
transform | localScale() | オブジェクトのTransformのScale(サイズの拡大率)を変更する 雲型オブジェクトがゲーム中に拡大縮小するようにした |
Random | Range() | 指定範囲の値をランダムに出力する 星型のオブジェクトの初期の回転位置をランダム化した |
Mathf | Sin() | ある角度のSin値を出力する。引数はラジアンでないといけない 雲の拡大縮小、ボール衝突時にピカピカ光らせる=一定の範囲内で大きくなったり小さくなったりと時間変化させたいときに使った |
Mathf | Deg2Rad | 度からラジアンに変換する定数 度でないとどのくらいの角度かイメージできないので使った |
Time | time | ゲーム開始から何秒経ったかを出力する Sin()の中で使うと、一定の範囲内を行ったり来たりする変化を与えられる |
Input | GetKeyDown() | キーを押した瞬間だけ入力を取得 フリッパーを跳ね上げさせた |
Input | GetKeyUp() | キーを離した瞬間だけ入力を取得 フリッパーを元の位置に戻した |
Material | SetColor | オブジェクトの色を変更する EmissionColorをボールが衝突するときに変更させた(光らせた) |
↓な感じで関数の書き方の説明をまとめようと思いましたが、大変過ぎてやめました。
というわけで
テクアカでのゲーム制作学習は1週間立ち止まり、Lesson5の内容理解に努めました。そこで気づいたのは、オブジェクトをどう動かしたいのか、スクリプトをどのような流れで書けば実現できるかの全体像=フローを描いたうえで学習を進めないと理解しづらいということ。早く自分がつくりたいゲームに取り掛かりたいという思いもありますが、今はUnityやC#の理解や、プログラミング脳を鍛えるために時間をかけていきます。次回からLesson6だ!
というわけで最後にいつもの、
みんなだんばれ!!
頑なに張るの「がんばる」ではなく、
弾むように張るの「だんばる」で、
一緒に人生を楽しみませんか?
最後までご覧になってくださったあなた、ぜひぜひX(旧Twitter)で交流しましょう!ゲーム制作をしていない方もウェルカムです。人生や働くことを楽しむために、日々くだらないことをつぶやいています。
以上です。
コメント