10日で学ぶUnity5 2Dゲーム入門(3)

Unity

6日目 ステージ背景とカメラワーク

背景を追加して、カメラをプレイヤーキャラに追従するようにします。

背景も1枚だけだと流れていってしまいます。

プレイヤーキャラにカメラ追従させる場合、今回は左右移動にだけ対応したいので専用スクリプトを記述してメインカメラに追加します。
キャラ移動時、上下左右のカメラ追従の場合は簡単で、カメラとキャラを「親子」関係にしてしまえば良いみたいです。エディター上でメインカメラオブジェクトをプレイヤーキャラオブジェクトにドラッグするのみ!

背景ループは、メインカメラに対して背景用スクリプトを記述して追加します。
本書通りに記述すれば、1枚の背景を3つ並べ、尚且つカメラが移動すると見えなくなった左背景を消し見えてくる右側背景を表示してくれるようになります。
つまり3枚背景がループするようになります。
スクリプトは「配列」なども使用して組み立ててあるようですが、さっぱりなので模写するのみです。

しかしエラーが出たり背景ループがうまく機能しなかったりで、だいぶ悪戦苦闘。
本書の記述ミスである if文を「;」で閉じていない部分を見つけたものの、背景が綺麗に並ばないし、3回表示後に途切れて無限ループしない状態。
もともと「配列」は理解していないので、どこが間違っているのかも分からないでござる(#^ω^)

そこで思い出したのがAI「ChatGPT」ちゃん。
コード丸投げで「これだと背景がループせんのやけど!?」と助けを求めてみました。

「配列ミスで1枚目の背景が残ってしまい、背景が無限スクロールしません。」

ミスの指摘とともに解答コードも表示してくれる仕事の出来るヤツ。
そうはいってもよく分からないので、そのまま教えてくれたコードをコピペでうまくいきました。
UnityやC#は有名どころで情報も安定しているため、こういうときにAIは大変便利ですね。
ネットで調べるよりもピンポイントなので時間短縮にもなるというものです。
これからもどしどし助けてもらおうと心に決めました。

案の定「配列」でミスしてた模様…

本書「課外授業」にて「でこぼこな地面の作り方」が解説されていましたが、でこぼこ衝突判定スクリプトやら無限ループ対応スクリプトを見ても訳が分からなくなる一方だったので割愛。
「ランダム性」「衝突範囲」「無限ループ」
そういうことができるのだということだけ覚えておくことにしましょう。

カメラ追従だけなら簡単!分からないことはChatoGPTに聞け!

カメラの制御は、プレイヤーキャラ座標・カメラ座標を各自に取得し、その差などを使っていくようだ。
横スクロールアクションでジャンプ時に上下にずれないようにするためには必要だが、基本的には「親子」でよさそうな気もする。
あとは控えめに言ってChatoGPTちゃん最高。

7日目 敵キャラクターの追加

  • 触れると加速して流される「ストリーム
    当たり判定。
    衝突したのがプレイヤーでなければスクリプト終了。
    衝突がプレイヤーの場合、右方向へチカラを加えるスクリプト。
  • 触れるとつり上げられてゲームオーバーな「釣り針
    針の部分のみ当たり判定。
    登場する座標をランダムにする。
    衝突したのがプレイヤーでなければスクリプト終了。
    衝突がプレイヤーの場合、画像切替え、画面上へ移動するスクリプト。
  • 画面の上側一定距離に近づくとすくわれる「
    すくわれるアニメーション。
    プレイヤーが画面外(上)へでないようにするための当たり判定。
    捕まる当たり判定。
    衝突したのがプレイヤーでなければスクリプト終了。
    すくわれるアニメーションの任意のタイミングでイベント(プレイヤーを消す)を発生させる。

アニメーションの任意のタイミングでスクリプトを呼びさせるのは面白い。

  • 一定距離に近づくと食べられる「ウナギ
    「前で食らいつく」「上に伸びて食らいつく」のアニメーション2種類。
    「前」と「上」に2つの当たり判定。
    衝突したのがプレイヤーでなければスクリプト終了。
    各当たり判定による各アニメーションへの切替え。

敵キャラの挙動は、当たり判定と各スクリプト。

ここまでの章で、カメラワーク・プレイヤーキャラ操作・敵キャラ挙動など基本的な動作を実装してきました。
スクリプトの意味は後々理解していくとして、本書において感じたのは、
C#を学んでいくというよりもUnity専用C#を使って組み上げていく ということです。
Unityでのゲーム制作の過程、仕組み、やり方などを学ぶ感じになっているので、C#自体を学びたい場合は専門で勉強する必要がありますね。

「UnityはC#を使って制作していく」というプログラミング要素が大きそうだと認識していましたが、確かにそうなのだが、だいたい使用していく記述のパターンがあるので、そこまで苦手意識を持たなくても良さそうだと感じられました。

コメント