Flight Controller - Pitch/Roll Issues
Hey, devs. I decided to play around with making a character controller for a flight sim type of game. I have throttle, yaw, pitch, and roll implemented aside from one hitch. The pitch only works as intended when the camera is at 0 degree rotation on the Z axis. No matter what, pulling up or pushing down on the mouse Y axis only rotates the camera/transform on the global X axis, despite using the localRotation variable. What do I have wrong here?
This is a link for a video demonstrating what's happening, and below, I have supplied my code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FlightControl : MonoBehaviour
{
public CharacterController controller;
public Camera pilotCam;
public float currentSpeed;
public const float maxSpeed = 30f;
public const float minSpeed = 0f;
public float yzAxisSpeed;
public float accelRate;
float xRotation = 0f;
float zRotation = 0f;
float yRotation = 0f;
public float yMouseSensitivity = 100f;
public float xMouseSensitivity = 70f;
public float zTurnSpeed = 40f;
// Start is called before the first frame update
void Start()
{
accelRate = .6f;
yzAxisSpeed = 5f;
controller = GetComponent<CharacterController>();
Cursor.lockState = CursorLockMode.Locked;
}
// Update is called once per frame
void Update()
{
float x = Input.GetAxis("Horizontal");
float y = Input.GetAxis("ZAxis");
float z = Input.GetAxis("Vertical");
Vector3 move = ((transform.right * x) * yzAxisSpeed) + (transform.forward * currentSpeed) + ((transform.up * y) * yzAxisSpeed);
controller.Move(move * Time.deltaTime);
if (Input.GetKey(KeyCode.W))
{
if (currentSpeed < maxSpeed)
{
currentSpeed += accelRate * Time.deltaTime;
}
}
if (Input.GetKey(KeyCode.S))
{
if (currentSpeed > minSpeed)
{
currentSpeed -= accelRate * Time.deltaTime;
}
}
float mouseZ = Input.GetAxis("Mouse X") * xMouseSensitivity * Time.deltaTime;
float mouseY = Input.GetAxis("Mouse Y") * yMouseSensitivity * Time.deltaTime;
float turnX = Input.GetAxis("Yaw") * zTurnSpeed * Time.deltaTime;
xRotation += mouseY;
zRotation -= mouseZ;
yRotation += turnX;
transform.localRotation = Quaternion.Euler(xRotation, yRotation, zRotation);
}
}
Your answer
![](https://koobas.hobune.stream/wayback/20220612222351im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
CAn soem one give me Sphere script to move in third person 0 Answers
Controls won't work in executable file 0 Answers
movement control for IOS 0 Answers
how to make my character move up and down (Vertical) in android control 0 Answers
personaje primera persona 0 Answers