Monday, September 9, 2019

c# - Unity: When attaching my custom camera script camera shakes when player starts to move fast


Here is my player code.


Rigidbody rb;


Vector3 currMovement;
public float jumpSpeed = 10;
public float moveSpeed = 10;
public float rotSpeed = 180;

float distToGround;

public float posSmoothTime = 0.5f;
float currPos;

float targetPos;
float posVel;

public float rotSmoothTime = 0.5f;
float currRot;
float targetRot;
float rotVel;

void Start()
{

rb = GetComponent();
distToGround = GetComponent().bounds.extents.y;
}

bool isGrounded() { return Physics.Raycast(transform.position, Vector3.down, distToGround + 0.1f); }

void Update()
{
Move();
}


void Move()
{
// Rotation smoothing.
targetRot = Input.GetAxisRaw("Horizontal") * rotSpeed * Time.smoothDeltaTime;

if (targetRot > 360)
targetRot -= 360;
if (targetRot < 0)
targetRot += 360;

currRot = Mathf.SmoothDampAngle(currRot, targetRot, ref rotVel, rotSmoothTime * Time.smoothDeltaTime);

transform.eulerAngles += new Vector3(0, currRot, 0);

// Movement smoothing.
targetPos = Input.GetAxisRaw("Vertical") * moveSpeed;

currPos = Mathf.SmoothDamp(currPos, targetPos, ref posVel, posSmoothTime * Time.smoothDeltaTime);
currMovement = new Vector3(0, 0, currPos);
currMovement = transform.rotation * currMovement;


if (isGrounded())
{
if (Input.GetButtonDown("Jump"))
rb.velocity += Vector3.up * jumpSpeed;
}

rb.position += currMovement * Time.smoothDeltaTime;
}


I have a Rigidbody attached to my player. I think the problem is with my camera script. Here is my camera script.


public Transform player;
Quaternion targetLook;
Vector3 targetMove;
public float smoothLook = 0.5f;
public float smoothMove = 0.5f;
public float distFromPlayer = 5, heightFromPlayer = 3;
Vector3 moveVel;

void LateUpdate()

{
CameraMove();
}

void CameraMove()
{
targetMove = player.position + (player.rotation * new Vector3(0, heightFromPlayer, -distFromPlayer));
transform.position = Vector3.SmoothDamp(transform.position, targetMove, ref moveVel, smoothMove);

targetLook = Quaternion.LookRotation(player.position - transform.position);

transform.rotation = Quaternion.Slerp(transform.rotation, targetLook, smoothLook);
}

}


The player is not an parent of my camera. When I parent the player to my camera the shake stops. But I want a custom smooth camera movement with my custom scirpt, so I can't make the player a parent of the camera.




No comments:

Post a Comment

Simple past, Present perfect Past perfect

Can you tell me which form of the following sentences is the correct one please? Imagine two friends discussing the gym... I was in a good s...