Der Spieler hat eine nervöse Bewegung in Einheit mit Cinemachine InputC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Der Spieler hat eine nervöse Bewegung in Einheit mit Cinemachine Input

Post by Anonymous »

Ich habe an einem 3D -Spiel in Unity Game Engine gearbeitet, und ich habe die Freelook -Kamera bekommen, um dem Player von hinten zu folgen, ähnlich der Kamera im Risiko von Regen 2. Leider kann ich die nützliche Bewegung des Players nicht reparieren. Jitter überhaupt, und es bleibt gut zentriert, wo der Player sein sollte. Ich werde meinen Code und mein Setup unten anhängen. < /P>
using System;
using System.Collections;
using System.Collections.Generic;
using Cinemachine;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.EventSystems;

public class PlayerMovement : MonoBehaviour
{
public GameObject thirdPersonCamera;
public float speed;
public float jumpForce;
public LayerMask whatIsGround;
public float jumpCooldown;

private Vector3 moveDirection;
private float horizontalInput;
private float verticalInput;
private Rigidbody playerRb;
private bool grounded;
private bool readyToJump;

// Start is called before the first frame update
void Start()
{
playerRb = transform.GetChild(0).GetComponent();
}

private void Update()
{
//Horizontal and vertical mouse input with Cinemachine
horizontalInput = thirdPersonCamera.GetComponent().m_XAxis.Value;
verticalInput = Input.GetAxisRaw("Vertical");

//Check if the player is grounded
grounded = Physics.Raycast(transform.position, Vector3.down, 1 * 0.5f + 0.3f, whatIsGround);

PlayerInputToMove();
}

// Update is called once per frame
void FixedUpdate()
{
transform.rotation = Quaternion.Euler(transform.rotation.x, horizontalInput, transform.rotation.z).normalized;
}

//Recieves input and moves the player
private void PlayerInputToMove()
{
if (Input.GetKey(KeyCode.W))
{
transform.Translate(Vector3.forward * speed * Time.deltaTime, Space.Self);
}
if (Input.GetKey(KeyCode.A))
{
transform.Translate(Vector3.left * speed * Time.deltaTime, Space.Self);
}
if (Input.GetKey(KeyCode.S))
{
transform.Translate(Vector3.back * speed * Time.deltaTime, Space.Self);
}
if (Input.GetKey(KeyCode.D))
{
transform.Translate(Vector3.right * speed * Time.deltaTime, Space.Self);
}

if(Input.GetKey(KeyCode.Space) && readyToJump && grounded)
{
readyToJump = false;

Jump();

Invoke(nameof(ResetJump), jumpCooldown);
}
}

private void Jump()
{
playerRb.AddForce(transform.up * jumpForce, ForceMode.Impulse);
Debug.Log("Called Jump()");
}
private void ResetJump()
{
readyToJump = true;
}
}
< /code>
Screenshot meiner Unity -Umgebung
Bitte beachten Sie: < /p>

PlayMovement -Skript wird dem 'Player' -Objekt angehängt. /> -Triedes Anhängen des 'Camerapoint'-Objekts (das ein untergeordnetes Objekt von' PlayerObject ') an die' Follow 'und' Sehen 'Boxen ist, anstatt das' Player 'oder' PlayerObject 'Objekt an sie an sie zu anpassen
-angehängt das Spielerformel an' PlayerObject “anstelle von 'Player' (das skript '(das skript' beigefügt wurde nun mit 'Player' beigefügt).>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post