Ive stieß auf ein Problem, dass ich nicht richtig meinen Kopf wickeln kann.Kamera Relative Bewegung
Ich mache eine Top-Down-Perspektive 3D-Spiel durch Unity. Ich habe einen Controller, mit dem sich mein Charakter drehen und bewegen kann, wenn er die Bewegungstasten drückt. Wenn Sie zum Beispiel "D" drücken, wird das Spielerobjekt nach rechts gedreht und dann wird der starre Körper in diese Richtung bewegt. Wenn ich jedoch die Kamera rotiere, bewegt sich der Spieler nicht relativ zur Kamerarichtung.
Die Bewegung:
//Player Movement
void HandleMove()
{
if (canMove == true)
{
//Detect input movement
var moveHorizontal = Input.GetAxis("Horizontal");
var moveVertical = Input.GetAxis("Vertical");
IsMoving = moveHorizontal != 0 || moveVertical != 0;
Vector3 relative = transform.rotation.eulerAngles;
relative.y = pCamera.playerRelativeAngle;
//Rotate the character
var movement = new Vector3(moveHorizontal, 0.0f, moveVertical);
var rot = movement * (speed/10);
if (attackTimer <= 0 && movement != Vector3.zero)
{
Vector3 temp = transform.rotation.eulerAngles;
var newRotation = Quaternion.LookRotation(rot);
transform.rotation = Quaternion.RotateTowards(transform.rotation, newRotation, 10F);
}
//Move the character
if (IsMoving && offset.y != 0f)
{
movement.y = offset.normalized.y * movement.magnitude;
}
var characterMovement = transform.position + movement;
if (attackTimer <= 0 || !IsGrounded)
{
rbody.MovePosition(characterMovement);
}
}
Ich habe eine leichte Ahnung, was zu tun ist, aber ich kann es nicht vollständig erfassen, ich habe eine Kamera eingerichtet, dass kann seine Euler-Winkel und kehre ich versuchte herauszufinden, eine Möglichkeit, dies für die relative Bewegung zu verwenden, aber ich bin mir nicht sicher, wo oder wie ich es in meiner Bewegungssteuerung anwenden soll.
Die Kamera:
//Find camera angle
public static float playerRelativeAngle;
//On awake, do this
void Awake()
{
//Get the cameras angle so we can move the player relative to it???
playerRelativeAngle = this.transform.localEulerAngles.y;
}
//Update every frame
void Update()
{
playerRelativeAngle = this.transform.localEulerAngles.y;
//If the right key is pressed then the caerma rotates to the right
if (Input.GetKey("right"))
{
this.transform.RotateAround(target.transform.position, Vector3.down, cameraSpeed * Time.deltaTime);
}
if (Input.GetKey("left"))
{
this.transform.RotateAround(target.transform.position, Vector3.down, -cameraSpeed * Time.deltaTime);
}
}
Jede Beratung sehr geschätzt wird.