【横スクロール2Dアクションゲーム】2D キャラを入力方向に向ける【2】

こんばんわ!193です。大学3年も後半になり研究とか始まっちゃったり、よく寝ちゃったりして全然作成に取り掛かれないのですが、少しでも進めたいと思います。。

前回はキャラのジャンプとか移動をしたのですが、右向いたまま左に入力すると後ろに向かないので、不自然だから変えます。

こういうオブジェクトを弄ったりできるクラスがUnityにはちゃんと用意されてるみたいですね。今回は画像の移動とか回転ではなく反転するということなので、Transform.localScaleクラスを使っていきたいと思います。

Transform.localScaleクラスは以下の通り

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
void Example() {
// Widen the object by 0.1
transform.localScale += new Vector3(0.1F, 0, 0);
}
}

今回は2DなのでたぶんVector2クラスを使用するんだと思いますが、これが行っているのはオブジェクトをx方向に0.1ずつ広げている・・・という処理を行っているんだと思います。多分。
画像を縮小拡大ということは-にすれば反転するし、+にすれば元に戻ると・・・


ほとんどこのサイトを参考にしています。ありがとうございました。
raharu0425.hatenablog.com

やること

・右向いているかどうかをisRight変数として管理します。
・最初キャラクターは右を向いているので初期値はTrue。
・右に入力されて動けば右向きにするのでTrueにし、左に入力されたら左向きにするのでFalseを格納します。
これをC#で記述すれば問題ないはず・・・!

というわけで以下コードです。(一部のみ)

private bool isRight = true; //右向き


        //左向きで右入力もしくは右向きで左入力の場合
        if((_x > 0 && !isRight) || (_x < 0 && isRight))
        {
            //右を向いているかどうかを、入力方向をみて決める(ここでTrueFalseに変わる。)
            isRight = (_x > 0);
            //右を向いているかどうかで更新する
            transform.localScale = new Vector2((isRight ? 1 : -1), 1);
        }

isRightの初期値設定はクラスの外側で宣言してます。
左向き~からの処理はUpdateクラスで行っています。

Cは今までやってきて、C#勉強したてで条件演算式というのを今まで使ってこなかったんですけど、if文よりもかなり簡潔に書けるみたいですね。
?: 演算子 (C# リファレンス) | Microsoft Docs

isRightがtrueならば1になり、falseなら-1になるんですね。画像が反転するかしないかはここで行っています。
この書き方は便利で分かりやすかったので覚えて使っていこうと思いました。
ちなみに大きい数字にすると大きくなるので、巨大化するようなときにも使用できそうですね。逆もしかり。

てなわけで動かしてみました。

f:id:gen-193:20171105203003g:plain


よし!とりあえず向きに関しては不自然さはなくなったし、次は待機モーションと歩きモーション、ジャンプモーションとかを変更してみようかな・・・。というかこのUnityちゃん2Dに用意されてたかな・・・。あったら実装します。なければ敵キャラ実装します。では