見出し画像

役に立たないゲーム制作の話。カメラ切り替え編

以前作ったゲーム、基本はunityのスタンダードアセットのマルチポーズ何たらってカメラ使ってたんですが、ラストバトルのシーンである事に気づきました。

三人称の後ろからカメラがプレイヤーを追っかけるやつ。

これだとラスボスの攻撃から逃げる時にボスがカメラに映らず、せっかく作った攻撃モーションやらが見れない!

という事でラスボス専用のサブカメラを作りました。

やろうとしてる事は、

ボスが攻撃に移行する

サブカメラに切り替わる

ボスとプレイヤーの延長線上でなおかつプレイヤーから少し引いた場所にカメラ固定。

まずはボスのオブジェクトの子にカメラを配置

マダムラフランボワというのがボスオブジェクトです。その子にSubCameraという名前でカメラをクリエイト。

次にスクリプトを書きます。

プレイヤーとボスのオブジェクトと位置情報を格納する変数を宣言。

Start()で全部参照するんですが、ちゃんとできてるか後で確認したいのでpubricにしておきます。

赤枠のbossAndPlayer変数はボスとプレイヤーの距離を計算。

最後の行でカメラの位置を指示しています。

Vector3の後のy軸の0.2fはカメラの位置が低すぎたので。

z軸の/5の除算をしておかないとプレイヤーとボスの距離に比例してカメラがはるか遠くに行ってしまうのを防いでます。

その後の+1.0fでプレイヤーからどれだけ引いた位置でカメラを向けるか決めています。

この辺の細かい数値こそpublicな変数でやれよという話なんですがね。

このスクリプトをSubCameraにアタッチしてインスペクターでいじいじします。

まずはtransformのrotationのyを180に。これでカメラはボスの方を向きます。xはお好みで。

次にcameraのチェックを外しておきます。ボスのアクションを管理するスクリプト側でここをゲットコンポーネントしておけばカメラの切り替えできます。

Depthは描写するカメラの優先度なのでメインカメラより数値を大きくしておけばオケ。

あとaudio listenerはチェックを外します。消してもいいかも。

これで、

ボスが攻撃してる時はちゃんとプレイヤーから少し離れた位置からボスを捉えてます。

でも実はこれ、ボスが攻撃に移る時は必ずプレイヤーの方を向くように指示してあるんですよね。

なので正しくはこうです。

ボスの向いてる方向のプレイヤーとの距離+aの位置にカメラをボスに向けて配置。

というプログラムになります。

ボスがプレイヤーの方を向いていなければプレイヤーはカメラ外に行ってしまうのが弱点です…

わしの頭ではこれが限界でした。

このゲームに関してはこれでオッケーだったのでまあ良しです。

この記事が気に入ったらサポートをしてみませんか?