かんたん Yaw Pitch Roll
InputSystemを使って実装しようと思ったけど結局使わなかった編
動画
コード
以下の動画のコピペです。Thank You!!
意外とシンプルな実装方法が探しても見つかりにくかった
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, 90private 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が押されている時)と停止している時とで回転速度が切り替わるようにしてある。ここは好みの問題
その都度書き換える手間はあるもののジョイスティックにも切り替えられる。ただ、キーボード入力からジョイスティック入力にすると何故か無操作でも少しずつ回転する現象が発生。こっちのパッドの問題かもしれない。
これに加速度を付けたり、カメラと機体の動きを分離できるようにしていくのが今後の想定