Character controllerで移動する際、移動する方向にキャラクターを向かせてもすぐに戻ってしまう。
わからないこと
キャラ移動させる際にLookRotation()でキャラの向きを指定しているのですが、立ち止まった際にZ方向へ向きを元に戻してしまいます。解決策やアイデアがありましたらお教えいただければ幸いです。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharacterMove : MonoBehaviour {
public float walkSpeed; // 歩く速さ
public float runSpeed; // 走る速さ
private Vector3 moveDirection = Vector3.zero; // 移動する量
private Vector3 direction; // 移動する方向
private float x; // horizontal
private float z; // vertical
private float gravity = 98f; // 下方向への移動量
private CharacterController controller; // character controller
// Use this for initialization
void Start () {
// character controller 取得
controller = GetComponent<CharacterController>();
}
// Update is called once per frame
void Update () {
// GetAxisを定義
x = Input.GetAxis("Horizontal");
z = Input.GetAxis("Vertical");
direction = new Vector3(x, 0, z); // GetAxisから方向を取得
if(Input.GetMouseButton(1)) { // 右クリックしながら移動するとダッシュ
moveDirection = direction * runSpeed;
} else {
moveDirection = direction * walkSpeed;
}
// 地面についていなかったら下方向に落ちる
if(controller.isGrounded) {
moveDirection.y = 0f;
} else {
moveDirection.y -= gravity * Time.deltaTime;
}
// 移動する
controller.Move(moveDirection * Time.deltaTime);
// ここが問題のよう。移動中は回転するのだが、移動し終わると元の向きに戻ってしまう。
Quaternion q = Quaternion.LookRotation(direction);
transform.rotation = Quaternion.RotateTowards(transform.rotation, q, 1200.0f * Time.deltaTime);
}
}
試してみたこと
Lookrotationの部分を変えてみる
Vector3 relativePos = target.position - transform.position; Quaternion rotation = Quaternion.LookRotation(relativePos); transform.rotation = rotation;
だめでした。
moveDirectionを引数に入れてみる
Quaternion q = Quaternion.LookRotation(moveDirection);
だめでした。
x, zが入力されていないとき、returnする
if(x == 0 && z == 0) { return; } else { direction = new Vector3(x, 0, z); }
行けるかと思いましたが、returnしてしまうとそれ以降の処理がされないので、空中で立ち止まると落下しなくなるようになってしまいました。