- Home /
Question by
SyahirNoe · Oct 31, 2020 at 01:48 PM ·
third-personthird person controllerthirdpersoncontroller
jump and gravity failure for Third Person Controller
It's okay at first i can double jump and the gravity works fine but then when I put the code for the player to move towards the camera view with the label "THIS PART" in the coding below, the jump function and gravity does't work anymore. Need help
using System.Collections;
using System.Collections.Generic;
using UnityEditor.Experimental.GraphView;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public CharacterController controller;
public Transform cam;
public float moveSpeed;
public float jumpForce;
public float gravityScale;
public float turnSmoothTime = 0.1f;
float turnSmoothVelocity;
private Vector3 moveDirection;
private bool doubleJump = false;
void Start() // Start is called before the first frame update
{
controller = GetComponent<CharacterController>();
}
void Update() // Update is called once per frame
{
//move wasd control
moveDirection = new Vector3(Input.GetAxisRaw("Horizontal") * moveSpeed, moveDirection.y, Input.GetAxisRaw("Vertical") * moveSpeed);
if (moveDirection.magnitude >= 0.1f)
{
//smooth turn
float targetAngle = Mathf.Atan2(moveDirection.x, moveDirection.z) * Mathf.Rad2Deg + cam.eulerAngles.y;
float angle = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetAngle, ref turnSmoothVelocity, turnSmoothTime) ;
transform.rotation = Quaternion.Euler(0f, angle, 0f);
//ground check
if (controller.isGrounded)
{
doubleJump = true;
moveDirection.y = 0f;
//jump
if (Input.GetButtonDown("Jump"))
{
moveDirection.y = jumpForce;
}
}
else
{
if (Input.GetButtonDown("Jump") && doubleJump)
{
moveDirection.y = jumpForce;
doubleJump = false;
}
}
//gravity
moveDirection.y += Physics.gravity.y * gravityScale * Time.deltaTime ;
//move towards camera view
**//THIS PART**
//Vector3 moveTowards = Quaternion.Euler(0f, targetAngle, 0f) * Vector3.forward;
//moveDirection = Quaternion.Euler(0f, targetAngle, 0f) * Vector3.forward;
//movement
controller.Move(moveDirection.normalized * moveSpeed * Time.deltaTime);
}
}
}
Comment