C# 我的脚本无法在行走和跑步动画之间切换
我正在编写一个脚本,在动画之间切换(查看屏幕截图以便更好地理解),虽然脚本很粗糙,但基本上可以完成这项工作。问题是,当您转到(Walk->WalkToSprint)时,WalkToSprint布尔值在应该停用时保持活动状态,这会使动画循环C# 我的脚本无法在行走和跑步动画之间切换,c#,unity3d,animation,C#,Unity3d,Animation,我正在编写一个脚本,在动画之间切换(查看屏幕截图以便更好地理解),虽然脚本很粗糙,但基本上可以完成这项工作。问题是,当您转到(Walk->WalkToSprint)时,WalkToSprint布尔值在应该停用时保持活动状态,这会使动画循环 void Update() { // this section is for walking and running if (Input.GetKey(KeyCode.W)) { anim.SetBool("Walk"
void Update()
{
// this section is for walking and running
if (Input.GetKey(KeyCode.W))
{
anim.SetBool("Walk", true);
anim.SetBool("SprintToWalk", true);
if (Input.GetKey(KeyCode.LeftShift))
{
anim.SetBool("WalkToSprint", true);
anim.SetBool("Idle", true);
anim.SetBool("SprintToWalk", false);
}
}
// end section
//this section is for sprinting then to walking
if (Input.GetKey(KeyCode.LeftShift))
{
if (Input.GetKeyDown(KeyCode.W))
{
anim.SetBool("Sprint", true);
anim.SetBool("Walk", false);
anim.SetBool("Idle", false);
anim.SetBool("SprintToWalk", false);
}
}
///////////////////////////////////////// this section is the key up code.
if (Input.GetKeyUp(KeyCode.W))
{
anim.SetBool("Walk", false);
anim.SetBool("Sprint", false);
anim.SetBool("Idle", false);
anim.SetBool("WalkToSprint", true);
anim.SetBool("SprintToWalk", false);
}
if (Input.GetKeyUp(KeyCode.LeftShift))
{
anim.SetBool("Idle", false);
anim.SetBool("WalkToSprint", false);
anim.SetBool("SprintToWalk", true);
}
}
你的状态机错了
请注意,“步行到sprint”状态完全无法将动画发送到sprint状态。然而,这可能不是您的唯一问题,但这几乎肯定是无限循环问题的根源,因为状态机在处于WalkToSprint状态后不断被发送回Walk,并且永远无法达到Sprint状态
我还建议修改您的逻辑代码,因为标记为“先冲刺,然后步行”的部分要求用户开始按W键(如果他们已经在冲刺,他们就不能做这件事,因为冲刺将shift和W同时保持在向下位置,这也会调用命令告诉动画去空闲
anim.SetBool(“空闲”,true);
!)。我的解决方案是更改冲刺的动画,这样我就可以删除WalkToSprint,这就给我留下了一个直接的机会。
我不理解你这里的代码。是有两次单独的尝试,四次,还是其他什么?@Draco18s你是指////?下面的代码,即区分键下和键上功能。哦,好的。我将上传一个截图,分隔代码的每一部分。不要发布代码截图。但是你的评论帮助我弄清楚了这一点实际上,这是一个代码块。您有两个相同的语句块:
if(W&&LeftShift)
和if(LeftShift&&W)
有不同的内容。此外,您应该包括动画状态机。@Draco18s///上半部分的第一个是步行和步行跑步。另一个是短跑,然后是步行。我将在代码中添加注释并上载动画控制器的屏幕截图。@Draco28s原因是它们有两种不同的动画。WalkToSprint让动画从行走调整到运行,而sprint只是从空闲调整到运行。然后修复状态机,这样就不会有所有这些额外的转换。如果不能从Walk
转到sprint
,那么就不需要那个箭头。而且你的代码仍然是一个痛苦的问题wkward和几乎肯定是错的。例如,它不关心你的动画师在处理按键时目前处于什么状态。Unity有一种内置的方法来处理@Draco18s。我刚刚想出了一个我应该早点解决的方法(我想我熬夜了)。我会在回答中发布代码和屏幕截图,以防它对任何人都有帮助。
void Update()
{
if (Input.GetKey(KeyCode.W))
{
anim.SetBool("Walk", true);
if (Input.GetKey(KeyCode.LeftShift))
{
anim.SetBool("Sprint", true);
anim.SetBool("Idle", true);
}
}
/////////////////////////////////////////
if (Input.GetKeyUp(KeyCode.W))
{
anim.SetBool("Walk", false);
anim.SetBool("Idle", false);
}
if (Input.GetKeyUp(KeyCode.LeftShift))
{
anim.SetBool("Sprint", false);
}
}