UnityでRail Shooterゲームの飛行機の動かし方

※自分用メモ

UnityでRail Shooterゲームの飛行機を上下左右に動かす

using UnityEngine;
using UnityStandardAssets.CrossPlatformInput;

public class Player : MonoBehaviour
{
   [Header("General")]
   [Tooltip("In ms^-1")][SerializeField] float speed;
   [Tooltip("In m")][SerializeField] float xRange;
   [Tooltip("In m")][SerializeField] float yRange;

   [Header("Position")]
   [SerializeField] float positionPitchFactor = -1.25f;
   [SerializeField] float positionYawFactor = 1.5f;

   [Header("Control")]
   [SerializeField] float controlFactor = -20;

   float xThrow, yThrow;

    // Update is called once per frame
    void Update()
   {
      ProcessTranslation();
      ProcessRotation();
   }

   private void ProcessRotation()
   {
      float pitchDueToPosition = transform.localPosition.y * positionPitchFactor;
      float pitchDueToControl = yThrow * controlFactor;
      float pitch = pitchDueToPosition + pitchDueToControl;

      float yaw = transform.localPosition.x * positionYawFactor;

      float roll = xThrow * controlFactor;

        transform.localRotation = Quaternion.Euler(pitch, yaw, roll);
   }

   private void ProcessTranslation()
   {
      xThrow = CrossPlatformInputManager.GetAxis("Horizontal");
      yThrow = CrossPlatformInputManager.GetAxis("Vertical");

      float xOffset = xThrow * speed * Time.deltaTime;
      float yOffset = yThrow * speed * Time.deltaTime;

      float rawXPos = Mathf.Clamp(transform.localPosition.x + xOffset, -xRange, xRange);
      float rawYPos = Mathf.Clamp(transform.localPosition.y + yOffset, -yRange, yRange);

      transform.localPosition = new Vector3(rawXPos, rawYPos, transform.localPosition.z);
   }