【Unity】カメラの位置を順番にボタンで変更したい!押してる間ではなく一回だけ!

 こんにちは!新入社員のタケです!


今日もIt's My Houseの続きを作っていきますよ~!


前回はキーボードの特定のキーを押している間、家具が動くようにしてみました。

Update関数を使うことで1フレームごとに入力を判定することにより、動いているように見せるというものでした。


今度はカメラの位置を変えるのをキーボードでもやってみたいと思います。

あらかじめ用意されている5つの場所へビューンと順番に左右の矢印ボタンで移動できるようにします。


昨日もそうでしたが、キー入力を使う場合は必ずUpdate関数を使わないといけません。

そうでなければいつでも入力OK!という状態にならないからです。


なので、まずはUpdate関数のコードを見てみましょう。


if (Input.GetKeyDown(KeyCode.LeftArrow))

の一行で左矢印キー入力を受け付けるということになります。

KeyCodeより後の文字を見るとどのキーを受け付けるか見分けることができますね~


今はカメラのポジションは5つあって、その5つのポジションを順番に変えていきたいです。

1番のポジション2番のポジション3番のポジション→…

という風に変わっていきます。


左矢印キーで逆転もできるように

…←1番のポジション← 2番のポジション 3番のポジション→…

という風にも動かしたいです。


CameraNum --;

CameraNum ++;

の行で次のポジションへ移動したり前のポジションへ移動したりということをしています。


ところが、5番のポジションで→を押した場合、6番のポジションがないので困りますね。

逆に1番のポジションで←を押した場合も0番になると困ります。


それを回避するために

if(CameraNum < 1)

{

        CameraNum = 5;

}

の処理があります。


これはCameraNumが1よりも小さくなったらCameraNumを5にする

という処理です。


これで1番のポジションから←を押すと5番のポジションへ移動することができます。


実際に移動を行う処理は

CameraMoveto(CameraNum);

でやります。

CameraMovetoの処理はこんな感じですが、ちょっと説明が長くなりすぎてしまうので割愛します・・・!


いままでのif文を経て導き出された番号がそのままカメラの移動先の番号になる、、ということですね!


最後に重要なのが

DoNotMove();

です。


これがある場合とない場合の動画を見比べてみましょう。

ない場合…


ある場合…


違いが判りますか?

この処理がなければUpdate関数により押している間ずっとカメラのポジションを変えようとしてしまって動きが変になっています。

ボタンを始めの一回だけ認識してから移動し、移動し終わったら再び操作が可能になるのが望ましいですね。


DoNotMove関数はこちらです。


this.enabled = false;

の一行でこのコンポーネントを無効化します。

つまり、今までこのプログラムで設定した操作などを一切受け付けなくなります。

このままだとずっと操作できないので…


Invoke("ReturnMove", 1.0f);

の一行を加えることにより1秒後にReturnMove関数を呼び出す

という処理になります。


ReturnMoveではさっき無効化したこのコンポーネントを再度有効化するものです。

これで動きが元に戻り、移動中は操作が無効化されて終わったらまた操作できるようになるというシステムができました!



プログラムの解説をしていると自分のプログラムに対する理解がより深まるので、良いなと思いました!

こういうプログラムのミスを見つけたりする方法があるみたいですね…!


--------------------------------------------------------------------------------

シェルパでは、3DCGや建築パースはもちろん
VRやARアプリの開発も行っています!
新しいことに興味のある方はきっと楽しめると思います!
新人研修も充実していて初心者でも3DCG経験者でも安心!

株式会社シェルパ
【福岡本社】
〒810-0042 福岡県福岡市中央区赤坂1丁目13-10赤坂有楽ビル7F 
【東京オフィス】
 〒101-0041 東京都千代田区神田須田町2丁目13-1YKS黒田ビル5F
TEL 092-717-6800 / FAX 092-717-6801

--------------------------------------------------------------------------------

コメント