0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

現在Unityで制作中の3D横スクロールアクションにおけるプレイヤー移動

Last updated at Posted at 2024-04-30

はじめに

この記事はUnity初心者さん向けになっています。
上級者さんはブラウザバック推奨です。

制作しているゲームの動画がこちら。現在プレイヤー挙動を調整しています。

今回は作成したコードからプレイヤーの移動を抜き出してみます。(自分の復習もかねて)

プレイヤー移動について

プレイヤーのオブジェクトにRigidBodyとCapsuleColiderを追加。
RigidBodyはUseGravityを☑ConstrainsのFreezeRotationのXとZに☑を入れます。
あと、次の記事でジャンプを書くのでそれ用にMassを50~100の間にしていてください。

PlayerMove.rb
public class PlayerMove : MonoBehaviour
{
    //移動関係
    Vector3 moveDirection;
    [SerializeField] private float speedMag;
    private Rigidbody rb;
    [SerializeField] private Vector3 moveVel;

    //入力関係
    private float InputX;
    private float InputZ;
    

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }
    
    void Update()
    {
        InputDetection();
        CalculateMoveVec();
    }

    private void FixedUpdate()
    {
        MoveFixed();
        RotationFixed();
    }
    
    private void InputDetection()
    {   //プレイヤーの入力検知
        InputX = Input.GetAxisRaw("Horizontal");
        InputZ = Input.GetAxisRaw("Vertical");
    }

    private void CalculateMoveVec()
    {
        //移動のベクトル計算
        moveDirection = new Vector3(InputX, 0, InputZ);
        moveDirection.Normalize();
        moveVel = moveDirection * speedMag;
    }

    private void MoveFixed()
    {
        //移動
        rb.velocity = new Vector3(moveVel.x, rb.velocity.y, moveVel.z);

    }

    private void RotationFixed()
    {
        // 回転
        if (moveVel != Vector3.zero)// 入力していないときに(0,0,0)に向かないように
        {
            transform.localRotation = Quaternion.Lerp(transform.localRotation,
                Quaternion.LookRotation(moveVel),
                20.0f * Time.deltaTime);//入力方向に回転
        }
    }
}

プレイヤー移動は物理挙動で動かしています。プレイヤーの入力はUpdateで、物理計算関係はFixedUpdateで書いた方がいいそうなので、それぞれInputDetection()とCalculateMoveVec()とMoveFixed()にまとめてます。
また、回転部分はRotationFixed()に書いてます。

speedMag変数をインスペクターで調整して自分のしっくりくるものを見つけています。私は10前後が好みですね。

完成はこんな感じです。

今後について…

ジャンプ処理はある程度作れているのですが、細かい挙動の調整をしているのでそれが終わり次第記事を書きます。わからんとか動かないとかあればコメントしてください。気づけたらお手伝いします。
Unity初心者さんの役に立てば嬉しいです。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?