読者です 読者をやめる 読者になる 読者になる

Redhuのゲーム開発Fragments

UnityやUEでゲームを作る際に学んだことを、これからなにか作りたい人に向けて。あるいは復習する自分に向けて記す。

自作ゲームリメイク中-カメラシステム編-(Unity制作)

今回はカメラ操作のシステムについてです。

 

前回

自作ゲームリメイク中-モーションシステム修正編-(Unity制作) - Redhuのゲーム開発Fragments

 

まずウチでは、カメラは以下のように用意してあります

f:id:redhu:20150723003602p:plain

MainCameraBoxという空のオブジェクトを用意し、それに実際のMainCameraとUIを表示する用のUICameraを入れています。

なんでこういうふうにしてあるかはのちのち。

 

ゲーム中のメインカメラ(自機視点)の仕様について。

  • カメラは自機の背後すこし横に位置し、追従する
  • マウスによって操作する
  • 自機の移動に対して一瞬遅れて追従する
  • 左右旋回時、旋回方向によって背後からのカメラ位置を左右切り替える

と言った感じです。

 

さて説明。

GitHub使ったらコードを簡単に見せれるみたいだから使ってみようかと

gist504b7efbcd4ae984d6c8

 

・・・長い 長くない?(バーとかで省略できないんかこれ)

これはPlayerにくっつけるスクリプトです。

シーンが始まると、シーン内に置かれているMainCameraBoxを探して、自機の位置に同調させます。

んでBox内のMainCameraのローカル位置を調節し、機体背後からの視点位置にセットしています。

 

カメラ制御はFixedUpdateを使っています。通常のUpdateで処理するとめっちゃガタついて見れたもんじゃありませんヴォェ(酔

 

Vector3.Lerpを使って、自機の移動に遅延追従する仕組みを入れています。

さらに、縦方向の遅延追従は無しにするようにY座標だけは上書きしています。

いざ動かしてみて縦方向の遅延追従がなんか気持ちよくなかったからですが、べつに上書きして無効化しなくたって問題無いです。

さらにマウスの左右移動値を取ってPlayer自体を回転させます。

機体の旋回はこのスクリプトが行っているということです。

 

さらに左右旋回値の値がそれぞれ一定以上/以下の時に、カメラの背後左右位置を切り替えています。

 

そして、マウスの前後入力値を使って上下視点操作をしています。

回転が0~360度じゃなくて-180~180みたいにゼロをまたいでいるので、そこら辺を修正変換する仕組みをいれつつ。

最後にMainCameraBoxを回転させて視点操作完了です。

MainCameraではなくMainCameraBoxを回転させることで、自機を中心に上下視点を動かすことができます。

 

色んなサイトのスクリプトを参考にしながら魔改造したので、もっと効率的なやり方があるかもしれませんが、動きはすごい気に入ってます。

もしオンライン対戦対応とかになると、自機同調のところとか修正する必要はありそう。

 

次回は・・・少し間があくかもしれません。

予定としては、パーツによるステータス変動実装か、射撃武器使用の実装か。

あ、エネルギーシステムの実装もやらなきゃ。そしてそれができたらuGUIとの連動も。

 

というわけで多分次回は、エネルギーシステム実装&uGUIとの連動ですかね(一番やりやすそう)

 

次回

自作ゲームリメイク中-ステータスとuGUIの連携編-(Unity制作) - Redhuのゲーム開発Fragments

うに部屋さんに置かせて頂いているリメイク対象の旧作

unityroom.com