这是我的运动剧本。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public CharacterController controller;
public float turnSmoothTime = 0.1f;
float turnSmoothVelocity;
public float Speed = 10f;
private Vector3 moveDirection;
public float groundDistance = 0.4f;
public float gravity = -9.81f;
public float jumpPower = 3.5f;
public float directionY;
bool isGrounded;
public Animator anim;
public Transform cam;
private void Update()
{
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
moveDirection = new Vector3(horizontal, 0f, vertical).normalized;
if (controller.isGrounded)
{
if (Input.GetKeyDown(KeyCode.Space))
{
directionY = jumpPower;
}
else
{
directionY = 0;
}
}
if (!controller.isGrounded)
{
directionY += gravity * Time.deltaTime;
}
moveDirection.y = directionY;
if (moveDirection.magnitude >= 0.1f)
{
float targetAngle = Mathf.Atan2(moveDirection.x, moveDirection.z) * Mathf.Rad2Deg;
float angle = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetAngle, ref turnSmoothVelocity, turnSmoothTime);
transform.rotation = Quaternion.Euler(0f, angle, 0f);
controller.Move(moveDirection * Speed * Time.deltaTime);
}
bool hasHorizontalInput = !Mathf.Approximately(horizontal, 0f);
bool hasVerticalInput = !Mathf.Approximately(vertical, 0f);
bool isWalking = hasHorizontalInput || hasVerticalInput;
}
}
我想用characterController做一个平滑的跳跃系统。我的代码在基础状态下工作正常,但是当我按空格键(跳跃)时,它会将当前的旋转y值返回到0。(我想这个问题是因为跳跃的位置值是y,但是移动的旋转值也是y。)我怎么解决这个问题呢?我想即使我跳跃旋转值也不会改变。
1条答案
按热度按时间t2a7ltrp1#
我解决了。是代码执行顺序问题。