テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】2Dカメラを制御する奴を試作した日記

f:id:tsubaki_t1:20150928042041g:plain

なんか面白くなって色々やってたら無駄に時間かかってしまったので、コードとコードの解説についてはモチベーションが上がった時に。

 

スタート地点はこんな感じです。プレイヤーの子オブジェクトとしてカメラがくっ付いている、Unityでは良くあるパターンです。

 カメラの移動範囲を制限しようと思いましたが、StandardAssetsのUtilityにCameraFollowなるコンポーネントがあり、これがカメラの移動範囲を制限する機能だったのでそのまま拝借。

類似品にFollowTarget(3D用の対象を追跡するコンポーネント)やSmoothFollow(FollowTargetをスムーズにしたもの)FollowCamera2D(移動先を向いてくれるが移動すると追いついてしまう微妙なコンポーネント)もあった。

f:id:tsubaki_t1:20150928041055p:plain

キャラクターの制御システム組むのも面倒くさいのでアリものを使用。StandardAssets/2DのCharacterRobotBoy(旧名PlatformerCharacter2D)を拝借。

tsubakit1.hateblo.jp

とりあえずカメラはキャラクターを直接見るんじゃなくて、キャラクターの移動先を見るように設定。移動先をテキトウに設定してもCameraFollow様が何とかしてくれる超パワー

 で、CameraFollowさんは設定がワールド座標に移動するくせにシーンビューに範囲が表示されてなくて使いにくいって事で、範囲をシーンビューに表示するように改造。

使ったのはGizmoとHandle。

思い返すと、 ここで欲が出てきたのがいけなかった。

どうせならカメラを切り替えられるようにしようと、範囲内に入ったらカメラのレンジを切り替えるコンポーネントを作成。

範囲切り替えの計算と切り替え先の取得はコライダーじゃなくて自前計算。ノードマップを作っといて、キャラクターが画面外に出たときに隣接するエリアの判定を行いエリアを更新する…みたいな感じ。

事前計算はMenuItemでサクっと。更新忘れが何度かあったから、エリア更新後1秒後とかにどんどんやっちゃっても良いかも。しょせんboxのあたり判定だし。

ちなみに隣接エリアが無ければ全検索という力技。これで画面外に出たときもちゃんと復帰出来る。

これ縦にも使えるんじゃね…?って事で縦にもやってみる。

問題無く動作。

あとあと、カメラのx軸移動可能範囲を0にすることで、スクロールしないエリアが設定できる事に気づく。

何か色々と物足りなくなってきたので「2Dゲームを面白くする技術」の内容を思い出してマージンを設定してみる。

元々「エリアを出たら=画面が居に移動したら=ゼルダの伝説トライフォースっぽいやつ」を想定して作ってたけど、せっかくなので色々やってみよう的なモチベーション。

ただ基本的に「画面から出たら」がトリガー条件なので、移動先が少し巻き戻っててもあまり良い感じがしない。

 流石に「画面から出たら」に限界を感じたので、トリガー条件の「画面から出たら」にマージンを設定。

カメラの移動範囲を繋げるとカメラ切り替え境界線が大分離れてても綺麗につながるのは中々面白い。

 

次はグリッド移動とドット移動について作ろうか、それとも2Dカメラをもっと色々出来るようにしようか。

参考

www.amazon.co.jp