-
-
Save KarlRamstedt/407d50725c7b6abeaf43aee802fdd88e to your computer and use it in GitHub Desktop.
using UnityEngine; | |
/// <summary> | |
/// A simple FPP (First Person Perspective) camera rotation script. | |
/// Like those found in most FPS (First Person Shooter) games. | |
/// </summary> | |
public class FirstPersonCameraRotation : MonoBehaviour { | |
public float Sensitivity { | |
get { return sensitivity; } | |
set { sensitivity = value; } | |
} | |
[Range(0.1f, 9f)][SerializeField] float sensitivity = 2f; | |
[Tooltip("Limits vertical camera rotation. Prevents the flipping that happens when rotation goes above 90.")] | |
[Range(0f, 90f)][SerializeField] float yRotationLimit = 88f; | |
Vector2 rotation = Vector2.zero; | |
const string xAxis = "Mouse X"; //Strings in direct code generate garbage, storing and re-using them creates no garbage | |
const string yAxis = "Mouse Y"; | |
void Update(){ | |
rotation.x += Input.GetAxis(xAxis) * sensitivity; | |
rotation.y += Input.GetAxis(yAxis) * sensitivity; | |
rotation.y = Mathf.Clamp(rotation.y, -yRotationLimit, yRotationLimit); | |
var xQuat = Quaternion.AngleAxis(rotation.x, Vector3.up); | |
var yQuat = Quaternion.AngleAxis(rotation.y, Vector3.left); | |
transform.localRotation = xQuat * yQuat; //Quaternions seem to rotate more consistently than EulerAngles. Sensitivity seemed to change slightly at certain degrees using Euler. transform.localEulerAngles = new Vector3(-rotation.y, rotation.x, 0); | |
} | |
} |
Ctrl+C and Ctrl+V
Done with camera
Ctrl+C Ctrl+V
I am done with my player movement and camera I am such a great programmer
You basically saved my day ! Thank you ❤ !
Thank you so much
I was making a flying camera for my game, and I had a problem where the z orientation kept changing. THIS FIXED IT! Again, thank you.
How can i make the camera folow the player?
How can i make the camera folow the player?
Create a camera and make it the player's child.
Thank you so much
I had a issue with clamping and I managed to fix it after seeing your script
Awesome
Idk why, but I have gotten complier errors every time I try to run the script. Idk why this is since I have double checked the code and re written it several times... help pls
@PineapplePeace What is the error that u got?
Placed the script in Scripts folder, it still doesn't work. I can't move the player or the camera.
@GeoSubZero have you tried attaching it to the camera object?
@KarlRamstedt Yes but it still doesn't works. Only the camera moves, the player is still static.
@GeoSubZero ... yes, that's how it's supposed to work. This script is camera rotation only. As indicated by the name.
You'll need to find/make a character controller for movement.
literal strings don't create garbage, they are already interned by the compiler
https://stackoverflow.com/questions/42413654/is-there-any-performance-increase-by-changing-this-net-string-to-a-const-does
that's some extreme premature optimization, never do that.
@Romaleks360 Loads of people around the web recommend caching strings in Unity optimization efforts. Check around.
Might be something more specific to the Unity Engine rather than C#.
Thank you so much I was making a flying camera for my game, and I had a problem where the z orientation kept changing. THIS FIXED IT! Again, thank you.
It pains me to say me too, not sure why the Quaternion.Euler() behaves that way.
Karl can you explain why perhaps the Quaternion.Euler() rotation creates off-axis rolls?
Thank you so much. Ive been struggling on this
Yoink