どうも音無サノトです。
Unity でのゲーム制作を学びなおしています。公式HPにある初級チュートリアルの玉転がしゲームを作成中です。
前回は Player の動作処理を作成しました。実際にキーボード入力でボールが動くのをゲームシーンで確認できましたが、このままだとカメラが固定されたまんまなのでゲームらしくないです。
そこで今回は Player に焦点を当てるようにカメラの動作処理を作成します。
カメラのデフォルト位置を変更
まず、Hierarchy ウィンドウからカメラを選択してください。
現在の位置でカメラが映しているゲームシーンが右下に表示されます。
真横から見ている状態ですね。このデフォルトの状態を変更します。
Inspector ウィンドウの Transform の値を次の様に変更します。
これで再生すると上から俯瞰した状態に変わります。
オブジェクトの親子関係
オブジェクトの親子関係について説明します。
Hierarchy ウィンドウで Main Camera を Player にドラッグ&ドロップします。
これでカメラオブジェクトは Player オブジェクトの子オブジェクトになります。
こうすることで、Player の動きにカメラがついてくるようになります。
Player のX軸、Z軸を変更すると、それに合わせてカメラの座標も変わります。
実際に Player の座標を変更してみると分かります。
Unity ではこのオブジェクトの親子関係はよく使うので、覚えておいた方がいいです。
しかし、この方法だとゲーム再生時にボールの転がりに合わせてカメラも動くので、画面がぐるぐると回ってしまいます。
そこでカメラはプログラミングで動作させるようにしなければなりません。
Main Camera を元に戻し、スクリプトを作成していきます。
カメラの動作処理
「CameraContoller」という名前のスクリプトを作成し、Main Camera にアタッチします。スクリプトは Project ウィンドウの Scripts フォルダに入れることを忘れないようにします。
CameraContoller の処理は以下のようになります。
まずは、GameObject を格納できる変数とデフォルトの距離を保持しておく変数を用意します。
Start 関数でこのこのオブジェクトの距離と player 変数に格納されたオブジェクトの距離の差分を offset に代入します。
ゲームオブジェクトの位置は transform.position で取得できます。
transform.position と書くと、このスクリプトがアタッチされているゲームオブジェクトの位置を取得します。今回だとカメラの位置です。
player.transform.position は上で宣言した player という変数に格納されているゲームオブジェクトの位置になります。
次に、LateUpdate 関数でゲームオブジェクトの位置を変更します。
LateUpade は Update の処理の後に実行されるので、カメラの追従に適しているそうです。まず、Player を操作すると、Player のポジションが変わります。それが描画された後にカメラのポジションを変更するという流れです。
GameContoller に表示されている Playerのところに、Hierarchy ウィンドウから Player オブジェクトをドラッグ&ドロップします。
これでスクリプト内での player という変数は、Player オブジェクトを指すことになります。
実際にゲームを再生させてみると、Player の動きに合わせてカメラが追いかけてくるようになります。
ただし、このままだと床からはみ出したところで、ボールが永遠に落下し続けることになるので、次回はエリアを作成します。
本日は以上となります。最後まで読んでいただきありがとうございました!