首先,请原谅我,如果我的问题太琐碎,那是因为我是Unity的新手,而且我在获取文档时遇到了一些困难。我想要的是将角色从一个位置移动到另一个位置进行动画行走。动画通过控制器动画" Animator"启动。问题是当我启动一个触发器来启动动画时,角色不会停止上一个动画来执行我要求的动画,这会导致失步:角色开始随着它当时的动画移动。我尝试了很多东西,但我找不到问题。 这可能是Animator:
这是我的代码:
enum AnimTriger {IdleTrigger, SpawnTrigger, RunTrigger, AttackTrigger, DeadTrigger, VictoryTrigger };
public class CharacterController : MonoBehaviour {
private GameObject target, origin;
private bool isWalking = false;
private bool isMele = false;
private GameObject instigator;
public void goAndAttack(GameObject instigator, GameObject target,GameObject origin, bool mele)
{
this.target = target;
this.origin = origin;
this.instigator = instigator;
isMele = mele;
StartCoroutine(AttackAction());
}
private IEnumerator AttackAction()
{
Animator anim = instigator.GetComponent<Animator>();
yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length);
if (isMele)
{
anim.SetTrigger(AnimTriger.RunTrigger.ToString());
yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length);
isWalking = true;
while (isWalking)
{
yield return new WaitForFixedUpdate();
}
yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length);
}
anim.SetTrigger(AnimTriger.AttackTrigger.ToString());
if (isMele)
{
anim.SetTrigger(AnimTriger.RunTrigger.ToString());
target = origin;
yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length);
isWalking = true;
while (isWalking)
{
yield return new WaitForFixedUpdate();
}
yield return new WaitForSeconds(anim.GetCurrentAnimatorStateInfo(0).length);
}
anim.SetTrigger(AnimTriger.IdleTrigger.ToString());
}
void Update () {
if (isWalking && isMele)
{
instigator.transform.position = Vector3.MoveTowards(instigator.transform.position, target.transform.position, 0.1f);
isWalking = instigator.transform.position != target.transform.position;
}
}
}
是否可以强制使用&#34; Animator&#34;结束任何动画并执行我想要的任何动画?
在此先感谢您提供有关此问题的任何帮助
答案 0 :(得分:2)
答案很简单,只需取消选中“原子”复选框,就可以打破动画
答案 1 :(得分:0)
bi y完成发布问题的时间我找到了一个固定的。我添加了可能UpDate功能的另一个条件:
void Update () {
if (isWalking && isMele && instigator.GetComponent<Animator>().GetCurrentAnimatorStateInfo(0).IsName("Basic Layer.Run"))
{
instigator.transform.position = Vector3.MoveTowards(instigator.transform.position, target.transform.position, 0.1f);
isWalking = instigator.transform.position != target.transform.position;
}
但这不是我想要的。