- Home /
Question by
sadowlight123 · Feb 01, 2018 at 07:25 PM ·
inputcharactercharactercontrollercontrollerinput.getaxis
Player inversed inputs
Hello all ,
I have a problem with the player inputs. I am using cinemachine (StateDriven + Free look camera with the mouse input camera rotation disabled) The camera works fine and the player inputs are correct ... However, when the camera get another diffrent angle the input messes up.
for example the left becomes up
the right becomes down the down becomes left and the up becomes right and so on depending how the camera is facing
How could I solve this issue ? any hints?
this is the character movement script.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharacterMovement : MonoBehaviour
{
public float walkSpeed=2f;
Animator anim;
public float turnsmoothtime=0.2f;
float turnsmoothvelocity;
public float speedsmothtime = 0.1f;
float speedsmoothvelocity;
float currentspeed;
CharacterController controller;
public float Gravity = -12;
float velocityY;
public float JumpHeight = 1;
[Range (0,1)]
public float airControlPercent;
void Start()
{
anim = GetComponent<Animator>();
controller = GetComponent<CharacterController>();
}
void Update()
{
//input
Vector2 input = new Vector2(Input.GetAxisRaw("Horizontal"),Input.GetAxisRaw("Vertical"));
Vector2 inputdir = input.normalized;
Move(inputdir);
if (Input.GetKeyDown(KeyCode.Z))
{
Jump();
}
//animator
float animationpercentage = (currentspeed / walkSpeed);
anim.SetFloat("Speed", animationpercentage, speedsmothtime, Time.deltaTime);
float VerticalSpeed = controller.velocity.y;
Debug.Log(VerticalSpeed);
// float Jumppercentage = (velocityY / JumpHeight);
// Debug.Log(Jumppercentage);
anim.SetFloat("JumpSpeed", VerticalSpeed);
anim.SetBool("Ground", controller.isGrounded);
}
void Move(Vector2 _inputdir)
{
if (_inputdir != Vector2.zero)
{
float targetrotation = Mathf.Atan2(_inputdir.x, _inputdir.y) * Mathf.Rad2Deg;
transform.eulerAngles = Vector3.up * Mathf.SmoothDampAngle(transform.eulerAngles.y, targetrotation, ref turnsmoothvelocity, GetModifiedSmoothTime(turnsmoothtime));
}
float targetspeed = walkSpeed * _inputdir.magnitude;
currentspeed = Mathf.SmoothDamp(currentspeed, targetspeed, ref speedsmoothvelocity, GetModifiedSmoothTime(speedsmothtime));
velocityY += Time.deltaTime * Gravity;
Vector3 velocity = transform.forward * currentspeed + Vector3.up * velocityY;
controller.Move(velocity * Time.deltaTime);
currentspeed = new Vector2(controller.velocity.x, controller.velocity.z).magnitude;
if (controller.isGrounded)
velocityY = 0;
}
void Jump()
{
Debug.Log("eyo");
if(controller.isGrounded)
{
float jumpvelocity = Mathf.Sqrt(-2 * Gravity * JumpHeight);
velocityY = jumpvelocity;
Debug.Log("eyo");
}
}
float GetModifiedSmoothTime(float smoothtime)
{
if (controller.isGrounded)
return smoothtime;
if (smoothtime == 0)
return float.MaxValue;
return smoothtime / airControlPercent;
}
}
Comment