在两个空闲动画状态之间切换

乔克拉克

我的玩家角色有一个默认的空闲状态。

但是,我想要一个辅助空闲。当我按下 C 键时,它会转到第二个空闲动画并停留在那里。当我按下 X 键时,它会回到默认的空闲动画。

但这就是问题开始的地方。当我再次按下 C 键切换到第二个动画时,会快速跳转到第二个空闲动画并返回默认动画,而无需停留或等待任何进一步的命令。

我希望它留在我告诉它的地方。

此外,在出现问题并再次按下 C 键后,动画不会改变。但是当我此时按下 X 键,然后按下 C 键时,它再次在动画之间来回切换。

所以我相信它“认为”它已经被切换了,而实际上并没有。如果你能告诉我如何解决这个问题,我会成为你最好的朋友。谢谢。

using UnityEngine;
using System.Collections;


public class Player : MonoBehaviour
{

private Animator anim;
Rigidbody2D rb;
public float Speed;
private bool aim = false;
private bool shot = false;
private bool idle = true;
public Transform arrowSpawn;
public GameObject arrowPrefab;
private bool idle2 = false;


void Start()
{

    rb = GetComponent<Rigidbody2D>();
    anim = GetComponent<Animator>();

}

// Update is called once per frame
void Update()
{
    Movement();
    Inputer();
    Morph (); 

}

void Movement()
{
    float moveH = Input.GetAxis("Horizontal");

    {
        rb.velocity = new Vector2 (moveH * Speed, rb.velocity.y);
    }

    anim.SetFloat ("Speed", Mathf.Abs (moveH));


}

void Inputer()
{

    if (!aim && Input.GetKeyDown (KeyCode.S)) {

        aim = true;
        anim.SetTrigger ("AIm");
    }

    if (aim && Input.GetKeyUp (KeyCode.S)) {
        shot = true;
        anim.SetTrigger ("Shot");

    }

    if (shot) {
        shot = false;
        aim = false;
        idle = true;
        anim.SetTrigger ("Idle");
        Instantiate (arrowPrefab, arrowSpawn.position, arrowSpawn.rotation);

    }
}

    void Morph()
{
    idle = !idle2;

    if (idle && Input.GetKeyDown (KeyCode.C)) {
        idle2 = true;
        anim.SetTrigger ("idle2");
    }

    if (!idle && Input.GetKeyDown (KeyCode.X)) {

        idle = true;
        anim.SetTrigger ("Idle");
        idle2 = false;

    }
}           

}

凯文

我不确定 - 当我追溯逻辑时,似乎一切正常,但是......好吧,对 idle 和 idle2 的处理似乎有点可疑。

我的意思是,看看“X”键上的逻辑:

  1. 开启怠速
  2. 启动空闲触发器
  3. 关闭空闲 2

...并在“C”键上:

  1. 打开空闲2
  2. 启动 idle2 触发器

...闲置在哪里?它似乎在等待下一个 Morph() 函数来设置该变量。更糟糕的是,如果 idle2 在代码中的其他任何地方设置为 false,您的 Morph() 函数会将 idle 转换为 true...但不会启动您的 Idle 触发器。

我建议尝试其中之一,看看它们是否适合您:

void Morph()
{
    if (!idle && !idle2)
        anim.SetTrigger ("Idle");
    idle = !idle2;

    if (idle && Input.GetKeyDown (KeyCode.C)) {
        idle2 = true;
        anim.SetTrigger ("idle2");
    }

    if (!idle && Input.GetKeyDown (KeyCode.X)) {
        idle = true;
        anim.SetTrigger ("Idle");
        idle2 = false;
    }
}

... 或者 ...

void Morph()
{
    if (idle && Input.GetKeyDown (KeyCode.C)) {
        idle2 = true;
        anim.SetTrigger ("idle2");
        idle = false;
        return;
    }
    if (!idle && Input.GetKeyDown (KeyCode.X)) {
        idle = true;
        anim.SetTrigger ("Idle");
        idle2 = false;
        return;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章