我的玩家角色有一个默认的空闲状态。
但是,我想要一个辅助空闲。当我按下 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”键上的逻辑:
...并在“C”键上:
...闲置在哪里?它似乎在等待下一个 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] 删除。
我来说两句