Unity2D 动画在完成第一个动画后停止
Unity2D animation stops after it finished first animation
void attacking()
{
if ((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==false)
{
anim.Play("SlashR");
}if((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==true){
anim.Play("SlashL");
}
if (health.rectTransform.sizeDelta.x <= 0)
{
anim.SetBool("death", true);
isDeath = true;
}
else
{
anim.SetBool("death", false);
isDeath = false;
}
}
İ 正在尝试制作 2D 砍杀游戏,这就是我需要战斗系统的原因。
所以,为此我想制作两个动画,SlashR 用于右剑,SlashL 用于左剑 sword.What 我想做的是如果我按下鼠标按钮并且我的角色向右转然后将播放 SlashR 动画,反之亦然。
但是当我按下鼠标按钮(flipX=false)时,SlashR 动画只播放一个 times.After 一个动画完成,动画完全停止,反之亦然。
但也有奇怪的事情,当我向左转我的角色然后向右转时,SlashR 动画再次播放。
注意:未检查 SlashR 和 SlashL
的循环时间
根据您的 Animator 提供的状态图,您的 SlashR
和 SlashL
状态在完成后不会返回 Idle
。
这将导致 slashing-states 在动画完成后保持当前状态。
从 SlashR
和 SlashL
到 Idle
(或任何你想要的状态)进行状态转换,它应该可以解决问题。
编辑
But there's weird thing as well,when i turn my character left and after that turn right,SlashR animation is playing again.
那是因为在你的
if ((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==false)
{
anim.Play("SlashR");
}if((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==true){
anim.Play("SlashL");
}
你没有检查玩家当前是否在先攻击。
这导致当玩家在攻击时左右移动时另一个动画立即开始播放。
解决方法是正确使用你的动画师:
你的新代码应该是:
if ((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==false) {
anim.SetTrigger("SlashR");
} else if((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==true){
anim.SetTrigger("SlashL");
}
请检查图像。
您可以右键单击状态并select进行转换等
使用 Animator 状态机中的过渡工具。
您必须在 slashR 到空闲和空闲到 slashR 之间进行转换,对于 slashL 也是如此。
例如:
如果你想改变状态,你可以像这样设置布尔值 true,
anim.SetBool ("SlashL", true);
别忘了有退出时间框。
勾选退出时间后,如果动画播放完毕则播放下一个动画。
如果勾选了 Has Exit Time,这个值表示转换可以生效的确切时间
void attacking()
{
if ((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==false)
{
anim.Play("SlashR");
}if((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==true){
anim.Play("SlashL");
}
if (health.rectTransform.sizeDelta.x <= 0)
{
anim.SetBool("death", true);
isDeath = true;
}
else
{
anim.SetBool("death", false);
isDeath = false;
}
}
İ 正在尝试制作 2D 砍杀游戏,这就是我需要战斗系统的原因。 所以,为此我想制作两个动画,SlashR 用于右剑,SlashL 用于左剑 sword.What 我想做的是如果我按下鼠标按钮并且我的角色向右转然后将播放 SlashR 动画,反之亦然。 但是当我按下鼠标按钮(flipX=false)时,SlashR 动画只播放一个 times.After 一个动画完成,动画完全停止,反之亦然。 但也有奇怪的事情,当我向左转我的角色然后向右转时,SlashR 动画再次播放。 注意:未检查 SlashR 和 SlashL
的循环时间根据您的 Animator 提供的状态图,您的 SlashR
和 SlashL
状态在完成后不会返回 Idle
。
这将导致 slashing-states 在动画完成后保持当前状态。
从 SlashR
和 SlashL
到 Idle
(或任何你想要的状态)进行状态转换,它应该可以解决问题。
编辑
But there's weird thing as well,when i turn my character left and after that turn right,SlashR animation is playing again.
那是因为在你的
if ((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==false)
{
anim.Play("SlashR");
}if((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==true){
anim.Play("SlashL");
}
你没有检查玩家当前是否在先攻击。
这导致当玩家在攻击时左右移动时另一个动画立即开始播放。
解决方法是正确使用你的动画师:
你的新代码应该是:
if ((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==false) {
anim.SetTrigger("SlashR");
} else if((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==true){
anim.SetTrigger("SlashL");
}
请检查图像。
您可以右键单击状态并select进行转换等
使用 Animator 状态机中的过渡工具。 您必须在 slashR 到空闲和空闲到 slashR 之间进行转换,对于 slashL 也是如此。
例如: 如果你想改变状态,你可以像这样设置布尔值 true,
anim.SetBool ("SlashL", true);
别忘了有退出时间框。
勾选退出时间后,如果动画播放完毕则播放下一个动画。 如果勾选了 Has Exit Time,这个值表示转换可以生效的确切时间