How to make The Best First Person Camera in Unity

How to make The Best First Person Camera in Unity

semikoder

6 месяцев назад

18,162 Просмотров

Ссылки и html тэги не поддерживаются


Комментарии:

@Rauza31
@Rauza31 - 01.05.2024 12:33

usually when utilising a camera with a rigidbody it is good to have it separated because that also prevents the camera jittering

Ответить
@ZeonplayzYt
@ZeonplayzYt - 01.05.2024 12:39

pls make tutorial on how to make cod mw type movement and camera animations

Ответить
@problem1O1
@problem1O1 - 02.05.2024 14:53

Cinematic cut-scene tutorial 🙌

Ответить
@ze1st_
@ze1st_ - 03.05.2024 15:03

but how did cinemachine fix this?

Ответить
@StephHami
@StephHami - 04.05.2024 12:20

where do i get cm3

Ответить
@controlledsingularity8084
@controlledsingularity8084 - 04.05.2024 13:25

Here's a short explanation of how to actually do this whitout needing cinemachine or other crap:
Step1: create a empty game object. This is the game object you will be moving around in update and represents the target position of your camera.
Step2: create a script that interpolates the position and rotation of your camera towards this empty game object, about 0.6-0.8 of the way per frame will do.
Step3. Done. You are done.

Ответить
@StephHami
@StephHami - 04.05.2024 16:55

how do you add the Cinemachine namespace in my C# scripts

Ответить
@Montigorable
@Montigorable - 14.05.2024 15:28

Thanks for the solution!

Ответить
@sebastiangeraldohirales4935
@sebastiangeraldohirales4935 - 29.05.2024 04:24

I can only find the cinemachine 2.9 version

Ответить
@Th3_V3ct0rAT2
@Th3_V3ct0rAT2 - 12.06.2024 19:01

Will it work on mobile devices?

Ответить
@srydustar5754
@srydustar5754 - 13.06.2024 16:49

It's crazy how you have to do all those steps in Unity and in Unreal you don't 😂

Ответить
@MichaelH-zb8gg
@MichaelH-zb8gg - 19.06.2024 16:11

Nice Tutorial. I've updated to 3.0.1 and it works well. The only problem with Cinemachine is setting up player rotation on camera movement. So below is a script to handle the player rotation on camera movement. Put the script below on the player.



using UnityEngine;

public class PlayerRotate : MonoBehaviour
{
private Camera mainCamera;

private void Start()
{
// Find the main camera in the scene
mainCamera = Camera.main;
}

private void Update()
{
// Rotate the player towards the camera every frame
RotatePlayerTowardsCamera();
}

private void RotatePlayerTowardsCamera()
{
if (mainCamera != null)
{
Vector3 cameraForward = mainCamera.transform.forward;
cameraForward.y = 0f; // Ignore the y-axis rotation

if (cameraForward != Vector3.zero)
{
Quaternion newRotation = Quaternion.LookRotation(cameraForward);
transform.rotation = newRotation;
}
}
}
}

Ответить
@nikz000
@nikz000 - 21.06.2024 17:54

I just interpolated the rotation values between each fixedupdate in update

Ответить
@EuclidStreams
@EuclidStreams - 23.06.2024 09:37

just use late update for camera rotation lol, wtf

Ответить
@salithaanildesilva1196
@salithaanildesilva1196 - 19.07.2024 09:38

How do i get the first person template

Ответить
@Ementss
@Ementss - 28.07.2024 18:57

So the best way to make a first person camera is to not make one and use a plugin, great job, why make a 10 minute tutorial on failed solutions if you're just gonna use a plugin.

Ответить
@Arctic.Wolves
@Arctic.Wolves - 29.07.2024 22:57

what about godot?

Ответить
@andrescarvajal2981
@andrescarvajal2981 - 31.07.2024 04:49

i dont have event OnMouseMove :( why?

Ответить
@JeraldTheBEAR
@JeraldTheBEAR - 11.08.2024 10:11

Oh wow. Kinda forgot about that fixedupdate kinda thing. I’m gonna go cry now

Ответить
@stillzen-dev
@stillzen-dev - 13.08.2024 07:20

wish this existed 2 fookin years ago - too late to change my system now (+ i'm using version 2020) but this will save many devs going forward

Ответить
@MayKayy
@MayKayy - 14.08.2024 11:43

Thank you so much you are best!!

Ответить
@SnakeEngine
@SnakeEngine - 09.09.2024 23:18

My boy, just put the camera movement in FixedUpdate, just like any other physical object, and interpolate the camera. Problem solved.

Ответить
@qroundhawk7149
@qroundhawk7149 - 14.09.2024 23:04

Still have jittering, followed all steps.

Ответить
@vinhnguyen-o5z
@vinhnguyen-o5z - 15.09.2024 19:02

rotating camera and other stuff is always ass for me. The inspector display one number, eulerAngle display another, which makes clamping kind of a pain

Ответить
@SirMust108
@SirMust108 - 16.09.2024 12:35

hi i use your solution and my rotation problem was solved but now i cant control my character because when i want to go forward when i looking right, my character wants to go left :/ the inputs arent change here is my code

public class PlayerController : MonoBehaviour
{
[SerializeField] float moveSpeed;
[SerializeField] float sensitivity = 0.1f;
[SerializeField] int jumpPower;
[SerializeField] Transform camTransform;

Transform groundCheck;
Rigidbody rb;
Vector3 moveDirection;
Vector2 currentRotation;

private void Awake()
{
rb = GetComponent<Rigidbody>();
groundCheck = transform.GetChild(1);
camTransform = transform.GetChild(0);
}

private void Start()
{
Cursor.lockState = CursorLockMode.Locked;
}

private void FixedUpdate()
{
rb.AddForce(new Vector2(moveDirection.x * moveSpeed, moveDirection.y * moveSpeed));
}

public void OnMove(InputAction.CallbackContext context)
{
Vector2 inputDirection = context.ReadValue<Vector2>();
moveDirection = new Vector2(inputDirection.x, inputDirection.y);
}

public void OnJump(InputAction.CallbackContext context)
{
if (IsGrounded() && context.performed)
{
rb.AddForce(Vector3.up * jumpPower, ForceMode.Impulse);
}
}

public void OnRotate(InputAction.CallbackContext context)
{
Vector2 mouseDelta = context.ReadValue<Vector2>();
currentRotation.x += mouseDelta.x * sensitivity;

currentRotation.y -= mouseDelta.y * sensitivity;
currentRotation.y = Mathf.Clamp(currentRotation.y, -90f, 90f);
}

private bool IsGrounded()
{
return Physics.CheckSphere(groundCheck.position, 0.2f);
}
}

Ответить
@novs735
@novs735 - 26.09.2024 18:00

Cool video but not recommend to use motion blur in it. I want to watch those things clearly without pausing

Ответить
@tPlayerioT
@tPlayerioT - 02.10.2024 03:51

i dont have these issues but cinemachine having explosion and some other stuff built in is one less work i will have to do so its great anyways

Ответить
@ariatari2137
@ariatari2137 - 06.10.2024 04:33

the short answer how to remove jittering is to replace Update() with LateUpdate() method

Ответить
@Goldenmonke3
@Goldenmonke3 - 06.10.2024 20:50

I will switch to unreal engine

Ответить
@programmierenneu2241
@programmierenneu2241 - 10.10.2024 15:32

Short and informative video. No long beating around the bush. Thank you!

Ответить
@mikamuestudios
@mikamuestudios - 10.10.2024 19:28

This is all well and good. But I'm running into a problem. Now that I'm using Cinemachine 3.0.1, I cannot figure out how to invert the y axis of my camera movement in a way that is configurable in code.

Setting an invert vector processor in the InputActions asset does invert the control, but I want something that can be changed in code (so the player can set the option they want).
So I tried applying an invert vector processor override in code... But it doesn't seem to do anything (either I'm doing it wrong, or CinemachineInputAxisController is overriding it).

There's also the "Gain" field in the CinemachineInputAxisController. And setting the Look Y (Tilt) Gain to 1 (rather than its default -1) DOES invert the y axis. But in the actual script, there's only one Gain float that applies to both the X and Y axis.. It's public, but I can't seem to access it anyway.. and the obvious: it's ONE value that's showing up as two values in the Inspector... So obviously there's stuff going on under the hood that's way beyond my understanding here (I've been back and forth with ChatGPT, which is not being super helpful cause it keeps giving me info that is depreciated/not applicable to Cinemachine 3.0.1 and can't seem to find the answer either).. I've also dug through the Cinemachine 3.0.1. API and there's nothing helpful there..

This is absolutely INSANE to me that this is so complicated, and now I've spent HOURS trying to figure this out when it should be simple... A public, code-accessible bool for invertYAxis (and I guess one invertXAxis for the weirdos). WHAT. The. HECK!? Someone help PLEASE!

Ответить
@powercellgaming4956
@powercellgaming4956 - 10.10.2024 22:18

WOW I really needed this before but I think I already fixed the gitter but still I will switch to cinemachine , I had a really complicated problem and it randomly got fixed , I had to make the camera follow the ridgidbody and I had a ridgidbody (GUN) follow a child of the camera so it was really weird got, before that I had an even weirder problem I wanted the gun as a ridgidbody to be a child of a child of the camera that moved with the player ridgidbody obviously didnt work but I made the gun not a child then worked

Ответить
@funkynormalcat988
@funkynormalcat988 - 25.10.2024 07:34

Thank you very much!

Ответить
@--l6070
@--l6070 - 04.11.2024 18:12

IMPORTANT:

I found out why you might get the jittery camera even with everything working well. The issue is when you rotate the body of the player towards the camera/orientation. I don't really know why but removing this body rotation will fix the laggy camera.

Ответить