nearlanのブログ

ただのメモ ちゃんとした記事は別で

かんたん Yaw Pitch Roll

InputSystemを使って実装しようと思ったけど結局使わなかった編

 

動画

 

コード

以下の動画のコピペです。Thank You!!

意外とシンプルな実装方法が探しても見つかりにくかった

www.youtube.com

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpaceshipMovement : MonoBehaviour
{
    public bool throttle => Input.GetKey(KeyCode.Space);

    public float pitchPower, rollPower, yawPower, enginePower; // 参考値:140, 180, 120, 90
    private float activeRoll, activePitch, activeYaw;

    private void Update()
    {
        if (throttle)
        {
            transform.position += transform.forward * enginePower * Time.deltaTime;

            // InputManagerで各種軸を定義しておく
            activePitch = Input.GetAxisRaw("Vertical") * pitchPower * Time.deltaTime;
            activeRoll = Input.GetAxisRaw("Horizontal") * rollPower * Time.deltaTime;
            activeYaw = Input.GetAxisRaw("Yaw") * yawPower * Time.deltaTime;

            transform.Rotate(activePitch * pitchPower * Time.deltaTime,
                activeYaw * yawPower * Time.deltaTime,
                -activeRoll * rollPower * Time.deltaTime, Space.Self);
        }
        else
        {
            activePitch = Input.GetAxisRaw("Vertical") * pitchPower/2 * Time.deltaTime;
            activeRoll = Input.GetAxisRaw("Horizontal") * rollPower/2 * Time.deltaTime;
            activeYaw = Input.GetAxisRaw("Yaw") * yawPower/2 * Time.deltaTime;

            transform.Rotate(activePitch * pitchPower * Time.deltaTime,
                activeYaw * yawPower * Time.deltaTime,
                -activeRoll * rollPower * Time.deltaTime, Space.Self);
        }
    }
}

ロールだけは入力と逆方向に回転するのでマイナス演算で反転。

この実装では前進している時(Spaceが押されている時)と停止している時とで回転速度が切り替わるようにしてある。ここは好みの問題

その都度書き換える手間はあるもののジョイスティックにも切り替えられる。ただ、キーボード入力からジョイスティック入力にすると何故か無操作でも少しずつ回転する現象が発生。こっちのパッドの問題かもしれない。

これに加速度を付けたり、カメラと機体の動きを分離できるようにしていくのが今後の想定

 

使用アセット

assetstore.unity.com

assetstore.unity.com