Witam.
Tworze swoją gre w unity 3d i mam problem z poruszaniem się. kiedy naciskam S i W wszystko jest dobrze, ale jak tylko się obrócę o 180 stopni to W jest do tyłu a S do przodu. Wydaje mi się, że chodzi o to że poruszanie jest przypisane do platformy na której gracz się porusza a nie do gracza.
oto kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(CharacterController))]
public class PlayerMovement : MonoBehaviour
{
public float playerWalkingSpeed = 5f;
public float playerRunningSpeed = 15f;
public float jumpStrength = 5f;
public float verticalRotationLimit = 80f;
float forwardMovement;
float sidewaysMovement;
float verticalVelocity;
float verticalRotation = 0;
CharacterController cc;
void Awake()
{
cc = GetComponent<CharacterController>();
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
}
void Update()
{
//Rozglądanie na boki
float horizontalRotation = Input.GetAxis("Mouse X");
transform.Rotate(0, horizontalRotation, 0);
//Rozglądanie góra dół
verticalRotation -= Input.GetAxis("Mouse Y");
verticalRotation = Mathf.Clamp(verticalRotation, -verticalRotationLimit, verticalRotationLimit);
Camera.main.transform.localRotation = Quaternion.Euler(verticalRotation, 0, 0);
//Poruszanie się postacią
forwardMovement = Input.GetAxis("Vertical") * playerWalkingSpeed;
sidewaysMovement = Input.GetAxis("Horizontal") * playerWalkingSpeed;
if(Input.GetKey(KeyCode.LeftShift))
{
forwardMovement = Input.GetAxis("Vertical") * playerRunningSpeed;
sidewaysMovement = Input.GetAxis("Horizontal") * playerRunningSpeed;
}
verticalVelocity += Physics.gravity.y * Time.deltaTime;
if (Input.GetButton("Jump") && cc.isGrounded)
{
verticalVelocity = jumpStrength;
}
Vector3 playerMovement = new Vector3(sidewaysMovement, verticalVelocity, forwardMovement);
cc.Move(playerMovement * Time.deltaTime);
}
}
Nie wiem czy dobrze to wytłumaczyłem, ale wydaje mi się że jest ok.
Proszę o szybką odpowiedź.