我正在学习Unity,我正在做一个角色移动,但是跳跃的动画对角色的跳跃有一个延迟,0.30秒,直到它拿起,我如何在代码中添加这个延迟?
比如,当你按下“空格键”,释放动画,数0.20秒,然后跳起来,我就想着怎么做。可行吗?我该怎么做呢?
简而言之,角色在动画之前跳跃。
动画视频:https://imgur.com/a/LgzkSKi
public class PlayerController : MonoBehaviour {
public float moveSpeed;
public float jumpForce;
public CharacterController controller;
private Vector3 moveDirection;
public float gravityScale;
public Animator animator;
void Start() {
controller = GetComponent<CharacterController>();
}
void Update() {
float yStore = moveDirection.y;
moveDirection = (transform.forward * Input.GetAxis("Vertical")) + (transform.right * Input.GetAxis("Horizontal"));
moveDirection = moveDirection.normalized * moveSpeed;
moveDirection.y = yStore;
jump();
controller.Move(moveDirection * Time.deltaTime);
animator.SetFloat("Speed", (Mathf.Abs(Input.GetAxis("Vertical"))));
}
void jump() {
if (controller.isGrounded) {
moveDirection.y = 0f;
if (Input.GetButtonDown("Jump")) {
moveDirection.y = jumpForce;
Debug.Log("jump");
}
}
moveDirection.y = moveDirection.y + (Physics.gravity.y * gravityScale * Time.deltaTime);
animator.SetBool("isGrounded", controller.isGrounded);
}
}发布于 2019-06-19 22:23:03
在jump()函数中,不要施加跳跃力。相反,应设置角色的下一次跳跃时间。
float nextJumpTime;
bool todoJump;
void jump() {
if (!todoJump && Input.GetButtonDown("Jump")) {
// Remember we have to jump and when
nextJumpTime = Time.time + 0.2f;
todoJump = true;
}
// Execute the jump
if (todoJump && Time.time >= nextJumpTime) {
todoJump = false;
moveDirection.y = jumpForce;
}
}或者在上阅读协程。在输入上启动一个协程,在协程中返回新的WaitForSecond(0.2f);,然后执行跳转。
发布于 2019-06-19 22:25:52
对于One Man Mokey Squad的建议,我认为你也应该考虑获得一个新的跳跃动画或修剪当前的动画。我认为为中断的跳转动画创建自定义代码并不是一个好主意,因为您将无法重用您的脚本。
https://stackoverflow.com/questions/56669093
复制相似问题