【发布时间】:2020-08-29 04:04:06
【问题描述】:
我刚刚开始创建我的第一个非常简单的 2D 平台游戏。在this 教程之后,我现在正在为我的角色添加移动动画(移动、奔跑、跳跃等)。一切都很完美,直到我对我的玩家移动脚本进行了编辑(按照教程的说明),这解决了玩家从蹲下动画状态返回空闲动画状态的动画问题,当蹲下键被释放但播放器仍然蹲着(由于头顶上有物体,玩家无法站起来)。在对我的代码进行修改并运行我的游戏时,玩家现在只是不断地播放/取消播放蹲伏动画,而不管玩家实际上是否处于蹲伏状态。
用于控制角色及其动作的脚本如下所示:
PlayerMovment.cs:
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public CharacterController2D controller;
public Animator animator;
public float runSpeed = 100f;
float horizontalMove = 0f;
bool jump = false;
bool crouch = false;
// Update is called once per frame
void Update()
{
// Get user input
horizontalMove = Input.GetAxisRaw("Horizontal") * runSpeed;
// Set animator paramaters
animator.SetFloat("Speed", Mathf.Abs(horizontalMove));
if (Input.GetButtonDown("Jump"))
{
jump = true;
animator.SetBool("isJumping", true);
}
if (Input.GetButtonDown("Crouch"))
{
crouch = true;
animator.SetBool("isCrouching", true);
}
else if (Input.GetButtonUp("Crouch"))
{
crouch = false;
animator.SetBool("isCrouching", false);
}
}
// Update is called a fixed amount of times per second
void FixedUpdate()
{
// Move player
controller.Move(horizontalMove * Time.fixedDeltaTime, crouch, jump);
jump = false;
}
// Function is called when player lands
public void OnLanding()
{
animator.SetBool("isJumping", false);
}
// Function is called whenever player crouches/uncrouches
public void OnCrouching (bool isCrouching)
{
animator.SetBool("isCrouching", isCrouching); // this is the modification which was made to the code
}
}
【问题讨论】:
-
如果您正在学习教程,并且正确地完成了教程,您将拥有与他们相同的行为,因此,他们要么很快修复它,要么您的代码与他们的不同..
-
你能尝试用更少的代码重现你的bug,以便更容易帮助你吗?
-
您发布的代码过多。可能是因为你不知道问题出在哪里。可能是因为你没有调试。 You need to do that before posting.
-
我看到的一件事是,当您在 PlayeMovement 类中调用此行“if (Input.GetButtonDown("Crouch"))”时,您不需要此行“animator.SetBool("isCrouching" , 真的);”同样在“else if (Input.GetButtonUp("Crouch"))”行之后的同一类上,您不需要“animator.SetBool("isCrouching", false);”.....原因是因为您已经是处理来自 OnCrouchEvent 的 IsCrouching 参数