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); }