Unity Character Controller verbuggt?
Hey Leute,
ich habe mir gerade dieses:
(44) Basic Third Person Character Controller in Unity - Unity C# Tutorial 2022 - YouTube
Tutoral für third person controller angeschaut. Nach programmierung der Scripts habe ich aber zwei Bugs:
Mein Character "slided" weiter über den Boden auch wenn ich aufhöre w zu drücken. Man kann sich das vorstellen wie auf einer Eisbahn.
Obwohl ich eine Rigidbody eingefügt habe, fällt der Character nicht auf den Boden! Mein leicht abgeänderter Code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class player : MonoBehaviour
{
public Animator playerAnim;
public Rigidbody playerRigid;
public float w_speed, wb_speed, olw_speed, rn_speed, ro_speed;
public bool walking;
public Transform playerTrans;
void FixedUpdate()
{
if (Input.GetKey(KeyCode.W))
{
playerRigid.velocity = transform.forward * w_speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.S))
{
playerRigid.velocity = -transform.forward * wb_speed * Time.deltaTime;
}
}
void Update()
{
if (Input.GetKeyDown(KeyCode.W))
{
playerAnim.SetTrigger("walk");
playerAnim.ResetTrigger("idle");
walking = true;
//steps1.SetActive(true);
}
if (Input.GetKeyUp(KeyCode.W))
{
playerAnim.ResetTrigger("walk");
playerAnim.SetTrigger("idle");
walking = false;
//steps1.SetActive(false);
}
if (Input.GetKeyDown(KeyCode.S))
{
playerAnim.SetTrigger("walk");
playerAnim.ResetTrigger("idle");
walking = true;
}
if (Input.GetKeyUp(KeyCode.S))
{
playerAnim.ResetTrigger("walk");
playerAnim.SetTrigger("idle");
walking = false;
}
if (Input.GetKey(KeyCode.A))
{
playerTrans.Rotate(0, -ro_speed * Time.deltaTime, 0);
}
if (Input.GetKey(KeyCode.D))
{
playerTrans.Rotate(0, ro_speed * Time.deltaTime, 0);
}
}
}
Danke für alle Antworten
2 Antworten
Wenn ich jetzt raten müsste, würde ich sagen, du wertest "walking" nicht aus.
sowas wie:
if(!walking)
{
playerRigid.velocity = Vector3.zero;
}
Alternativ warum der player nicht runterfällt, hat ggf. was mit der Einstellung: useGravity im Rigidbody zu tun oder der Mass (Masse).
Deine Probleme könnten auch zusammenhängen, denn der Bug mit dem Sliden könnte auch von der Physik kommen. Wahrscheinlich slidet er noch weiter, da er noch Restgeschwindigkeit hat. Du könntest vielleicht versuchen im Code zu schreiben, wenn du keine Taste mehr zum Laufen drückst, deine Geschwindigkeit direkt auf 0 gesetzt wird
if(walking == false)
{
walkingspeed = 0;
}
Nur ein Beispiel, bei dir werden die Variablen etwas anders aussehen.
Beim Rigidbody kann ich ohne das Projekt nicht viel sagen.
if(walking = false) > if(walking == false) //Vergleichs Opperation ;)