First person movement in Unity?
Ich habe schon von allen möglichen Tutorials abgeschrieben aber es geht trotzdem nicht
Beim Start dreht sich die Kamera komplett random in alle möglichen Richtungen selbst wenn ich meine Maus nicht bewege
das ist der Code von der MainCamera:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraMovement : MonoBehaviour
{
Vector3 rotation;
public GameObject player;
void Update()
{
transform.position = player.transform.position;
transform.Translate(0, 0.5f, 0);
rotation += Input.GetAxis("forwardBackwardRotate") * Vector3.right;
rotation += Input.GetAxis("leftRightRotate") * Vector3.up;
rotation *= 50 * Time.deltaTime;
transform.Rotate(rotation);
}
}
und das ist vom Player (falls es nötig ist) :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public int speed;
Vector3 movement;
Vector3 rotation;
CharacterController player;
void Start()
{
player = GetComponent<CharacterController>();
}
void Update()
{
movement += transform.right * Input.GetAxis("leftRightMove");
movement += transform.forward * Input.GetAxis("forwardBackwardMove");
movement *= speed * Time.deltaTime;
player.Move(movement);
rotation = Input.GetAxis("leftRightRotate") * Vector3.up;
rotation *= 50 * Time.deltaTime;
transform.Rotate(rotation);
}
}
hier ist das Video: https://drive.google.com/file/d/16LzqYkn3ojHhpp6Aw-cWdq_sCp9kUsfq/view?usp=sharing
Digga als ob niemand den Fehler weiß .-.
1 Antwort
Ein Player und Camera Movement macht doch nur sinn, wenn du aus der third person spielen möchtest.. Mach doch zum Anfang das Movement Script auf die Camera und erstelle ein Prefab, indem du beispielsweise einen Cube der Camera unterordnest, dann hast du deinen Player. Deine Kamera dreht sich wirr herum, da du in der Update "transform.Translate(0, 0.5f, 0);" stehen hast.. Das bewirkt, dass bei jedem Frame diese Anweisung ausgeführt wird.. Das Playermovement würde ich so schreiben:
public class Bewegen : MonoBehaviour
{
public float speed = 10;
void Update()
{
float x = Input.GetAxis("Horizontal") * speed * Time.deltaTime;
float z = Input.GetAxis("Vertical") * speed * Time.deltaTime;
transform.Translate(x, 0, z);
}
}
So kannst du dich auf der X und auf der Z Achse bewegen..
Wenn du mit Player und Camera Movement das Movement mit der Maus und der Tastatur meintest, dann macht das ganze natürlich schon Sinn, hätte es dann nur MouseLook und PlayerMovement genannt..