Unityカメラを制御するの巻(おまけ

一日ぶりです私です。
昨日?Unityやってました。別件でw

いやぁ、なんだかんだ好きなんですわ。PCがw
おかげさまで疲れが取れない!
休めわたし!!!

さて、今回ですが、前回の宿題と
ちょろちょろ小ネタを提供しようかと。。

前回の残しってなんでしたかね、、

あぁ、そうそう。
カメラが背景の外に行かなくなったけど、操作しているキャラクターは枠外に出てしまうのを対応したいですねぇという話ですね。

枠外に飛び出し足しか見えない棒人間。

さて、一問一答形式でちょろっとやってみましょう。

問:「外に飛び出しちゃいけませんよ」と指示をするオブジェクトは何かわかりますでしょうか?
 答え:棒人間です。

問:では、その棒人間の移動範囲はどこからどこまででしょうか?
 答え:背景画像のある範囲内です。
    ※作成したいものによりますが、今回は背景画像の範囲

問:ではでは、その移動できる範囲を数値化するとx、yそれぞれどうなるかしら?
 答え:前回のnoteにも書きましたね、(x:±14.465、y:±10.195)

問:さてさて、これで情報が出尽くしたでしょうか?
 答え:まだだよーん。

何が足りないでしょう。
ええ、棒人間の縦横サイズです。
先述した「画像の範囲外へは行けない」という指示をしたときに、
対象となる位置は棒人間の中心部になります。

過去のnoteから拝借画像

左端まで移動したとすると「中心位置が飛び出さない」という指示だと、半身が外に飛び出してしまいますね。
じゃぁ、どうするか?
飛び出す半身分サイズを調整すればいいのですよ。
えーっと、(大きさ調べるのめんどいな。。)

あ、これで大体わかるわw

グレーの線で引かれたマス目がありますね、これが1マス1なので、
縦:4 横:2くらいのサイズ感ですね。
中心位置からと考えるとそれぞれ 縦±2、横±1と、いったところでよいでしょう。
と、いうことでソースコードどおん!

        if (Input.GetKey(KeyCode.UpArrow) && posi.y < 8.5f)
        {
            posi.y += move;
        }
        if (Input.GetKey(KeyCode.DownArrow) && posi.y > -8.5f)
        {
            posi.y -= move;
        }
        if (Input.GetKey(KeyCode.LeftArrow) && posi.x > -14f)
        {
            posi.x -= move;
            spriteRenderer.flipX = false;
        }
        if (Input.GetKey(KeyCode.RightArrow) && posi.x < 14f)
        {
            posi.x += move;
            spriteRenderer.flipX = true;

        }

えーっと、棒人間にセットしたスクリプト、
キーボードの押したボタンごとの処理の部分ですね。
上下(y)の位置は±8.5まで(10-2なんですが、ちょっと微調整しました)
左右(x)の位置は±14まで(14.4-1なんですが、ちょっと微調整しました。)
微調整はまぁ、動かしてみて、思ったより行き過ぎたなぁとか、もうちょっと進ませたいなぁという感じでザクザクやるとよいですよ。
(キャラクタ作成雑すぎて中心位置がわけわからんくなってるのはヒミツw)

あ、あともう一つ、ちょっとした小ネタです。

spriteRenderer.flipX = false;

見覚えのないコードがありますねー(´・ω・`)
こいつは、、えー

こいつですわ。

SpriteRendererの中身を操作しています。
「fill.x」ってのは、反転項目のxのチェックを付けたり付けなかったりという操作をしています。
チェックがない(false)ときは、棒人間は左を向いておりますが、
チェックを付ける(true)と、棒人間は右を向いてくれるのですね。

なので、キーボードの左右を押したときに
左の時=false
右の時=true
とすることで、キーボード操作の際、後ろ歩きをさせないようにしております。
あ、省略していますが、ちゃんとGetComponent<SpriteRenderer>()を実行しておりますよ。

右向きになって手をふる棒人間

今回は以上ですね、
移動範囲の制御と左右移動時のオブジェクトのイメージを反転させるというところをやりました。

ではでは。また次回があれば。

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