FC2ブログ

記事一覧

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサーリンク

Tiledで作ったマップを駆け回ってみる その3


前回はプレイヤーの動きに合わせてカメラを追従させてみました。
次はカメラとプレイヤーの移動範囲をマップに合わせて制限してみたいと思います。

まずはカメラがマップの外まで移動することがないようにします。カッコ悪いですからね。

Unity 160921 1


画像のようにカメラのインスペクタを見て、カメラがマップの左下、右上に沿う時のX,Y座標をメモしておきます。

X : -1.25 ~ 1.25
Y : -2.75 ~ 2.75


小数点以下は調整しました。この範囲内で移動を制限すればいいわけですね。



void Update () {
ppos = player.transform.position;
ppos.z -=1;
transform.position = ppos;

}


↑これを以下のように書き換えてみます。

・pposにプレイヤーposition代入
・ppos.x ppos.y の値が先程の範囲を超えていないか調べる
・超えていた場合、値を書き換えてからカメラpositionに代入


書き換えたものがこちらです。

void Update () {
ppos = player.transform.position;
if(ppos.x >= 1.25f) ppos.x = 1.25f;
else if(ppos.x <= -1.25f) ppos.x = -1.25f;
if(ppos.y >= 2.75f) ppos.y = 2.75f;
else if(ppos.y <= -2.75f) ppos.y = -2.75f;
ppos.z -=1;
transform.position = ppos;
}


ifでppos.xが1.25より大きいか調べ、大きければ1.25を代入。
そうでない場合さらに-1.25より小さいか調べて、小さければ-1.25を代入。
ppos.yでも同じことをしています。

ゲームを再生してみるときちんとマップ端でカメラが止まるようになっていますね。
次にプレイヤーがマップ外にはみ出さないようにします。
スクリプトで制御してもいいんですが、今回はオブジェクトを設置してやってみます。

Unity 160921 2

上の画像のようにして「Create」→「3D Object」→「Cube」からCubeを作成します。
そいつをグニグニしてマップ端四辺に設置。
壁として機能させるために、CubeにColliderコンポーネントを追加する必要があります。

Unity 160921 3


画像の手順で不要なコンポーネントを削除、Colliderを追加します。
ヒエラルキー内で4つのCubeを選択した状態で作業すると、同時にオブジェクトの削除と追加ができますので
一気にやってしまいましょう。
これで壁側の準備は終了です。

同じようにしてプレイヤーにも必要なコンポーネントを追加します。
追加するのは「Rigidbody2D」と「Box Collider 2D」の2つです。
壁に追加したBox Collider 2Dと同じ場所にRigidbody2Dもあります。

Colliderはオブジェクトが何かにぶつかっているかどうかを判定してくれるコンポーネントで
Rigidbodyは物理演算をしてくれるコンポーネントです。
これらをオブジェクトに追加しておくと、壁とプレイヤーの衝突をColliderで検知して
Rigidbodyが自動で演算、処理 = プレイヤーは壁にぶつかったのでそれ以上進めない
ということを勝手にやってくれます。すごいですね。


Unity 160921 4

Rigidbody2Dを追加したら、画像のようにGravity Scaleを0に設定しておきましょう。
これは重力を設定するプロパティで、今回は必要ありません。
(重力が設定されているとY軸マイナス方向に向かって常に力がかかります)

これでプレイヤーがマップ端に移動した場合、壁にぶつかるようになりました。
とりあえずそれっぽくなったけど、次は何をしてみようか・・・。
cpuキャラクターを歩かせてみようかな。

少し長くなりましたが今回はここまで。
ありがとうございました。

スポンサーサイト

スポンサーリンク

コメント

コメントの投稿

非公開コメント

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。