LoginSignup
9
8

More than 5 years have passed since last update.

キーを押した方向に向かってキャラクターを移動させる

Last updated at Posted at 2017-11-27

キーを押した方向にキャラクターを移動させたい

バイオハザードのようなリモコン操作ではなく、キーを押した方向に向かってキャラクターを走らせます。

下記サイトのソースコードを参考にさせていただきました。
強火で進め - 進行方向にキャラクターの向きを変える

PlayerControll.cs
    private Animator motion;
    public float run_speed;

    void Start () {
        motion = GetComponent<Animator>();
    }

    void Update()
    {
        Vector3 target_dir = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));

        //Run
        if(target_dir.magnitude > 0.1){
            //体の向きを変更
            transform.rotation = Quaternion.LookRotation(target_dir);
            //前方へ移動
            transform.Translate(Vector3.forward * Time.deltaTime * run_speed );
            //アニメーション用
            motion.SetBool("Run", true);
        }
        else
        {
            motion.SetBool("Run", false);
        }
    }

滑らかに方向転換させたい

これでキーを押した方向へキャラクターが移動するようになりました。
しかし、反対方向へ移動するときの方向転換がキビキビとしすぎています。
unitychan_withoutlerp.gif
ですので、線形補完を使って滑らかにキャラクターの向きを変えるようにします。
前述のソースコードの //体の向きを変更 の箇所を下記コードに置き換えます。

            //体の向きを変更
            Quaternion rotation = Quaternion.LookRotation(target_dir);
            transform.rotation = Quaternion.Lerp(transform.rotation, rotation,  Time.deltaTime * smooth);

smoothはどれだけ滑らかに向きを変えるかの値です。
値を増やすほどキビキビと方向転換します。今回は10くらいにしました。
public float run_speed;のと同じように宣言しておけばインスペクタ上で変えられます。

これでいきなり反対へ移動しようとしても滑らかに方向転換するようになります。
unitychan_withlerp.gif

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8