Комментарии:
usually when utilising a camera with a rigidbody it is good to have it separated because that also prevents the camera jittering
Ответитьpls make tutorial on how to make cod mw type movement and camera animations
ОтветитьCinematic cut-scene tutorial 🙌
Ответитьbut how did cinemachine fix this?
Ответитьwhere do i get cm3
Ответить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.
how do you add the Cinemachine namespace in my C# scripts
ОтветитьThanks for the solution!
ОтветитьI can only find the cinemachine 2.9 version
ОтветитьWill it work on mobile devices?
ОтветитьIt's crazy how you have to do all those steps in Unity and in Unreal you don't 😂
Ответить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;
}
}
}
}
I just interpolated the rotation values between each fixedupdate in update
Ответитьjust use late update for camera rotation lol, wtf
ОтветитьHow do i get the first person template
Ответить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.
Ответитьwhat about godot?
Ответитьi dont have event OnMouseMove :( why?
ОтветитьOh wow. Kinda forgot about that fixedupdate kinda thing. I’m gonna go cry now
Ответить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
ОтветитьThank you so much you are best!!
ОтветитьMy boy, just put the camera movement in FixedUpdate, just like any other physical object, and interpolate the camera. Problem solved.
ОтветитьStill have jittering, followed all steps.
Ответить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
Ответить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);
}
}
Cool video but not recommend to use motion blur in it. I want to watch those things clearly without pausing
Ответить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
Ответитьthe short answer how to remove jittering is to replace Update() with LateUpdate() method
ОтветитьI will switch to unreal engine
ОтветитьShort and informative video. No long beating around the bush. Thank you!
Ответить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!
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
ОтветитьThank you very much!
Ответить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.