我创建了一个名为“m4a4animator”的动画师。在其中,主要功能称为“空闲”(无),以及其他2种状态:“射击”(mouse0)和“重新加载”(R)。这两个动画状态转换为“空闲”。现在,一切正常......但我唯一的问题是:如果我正在重新加载并按下mouse0(拍摄),动画运行状态立即变为拍摄......但我想要阻止
现在,问题是:如何在动画运行时停止某些动画更改?
这是我的剧本:
using UnityEngine;
using System.Collections;
public class m4a4 : MonoBehaviour {
public Animator m4a4animator;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetKeyDown (KeyCode.R)) {
m4a4animator.Play("reload");
}
if (Input.GetMouseButton(0)) {
m4a4animator.Play("shoot");
}
}
}
答案 0 :(得分:3)
对于旧版动画系统,Animation.IsPlaying("TheAnimatonClipName)
用于检查动画片段是否正在播放。
对于新的Mechanim Animator系统,您必须检查anim.GetCurrentAnimatorStateInfo(animLayer).IsName(stateName)
和anim.GetCurrentAnimatorStateInfo(animLayer).normalizedTime < 1.0f)
是否均为真。如果他们是当时正在播放的动画名称。
这可以像上面的Animation.IsPlaying
函数一样简化。
bool isPlaying(Animator anim, string stateName)
{
if (anim.GetCurrentAnimatorStateInfo(animLayer).IsName(stateName) &&
anim.GetCurrentAnimatorStateInfo(animLayer).normalizedTime < 1.0f)
return true;
else
return false;
}
现在,一切正常......但我唯一的问题是:如果 我正在重装并按下mouse0(拍摄),然后按下 动画运行状态立即改变拍摄......但我想 阻止那个。
按下拍摄按钮时,检查&#34;重新加载&#34;动画正在播放。如果是的话,不要开枪。
public Animator m4a4animator;
int animLayer = 0;
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.R))
{
m4a4animator.Play("reload");
}
//Make sure we're not reloading before playing "shoot" animation
if (Input.GetMouseButton(0) && !isPlaying(m4a4animator, "reload"))
{
m4a4animator.Play("shoot");
}
}
bool isPlaying(Animator anim, string stateName)
{
if (anim.GetCurrentAnimatorStateInfo(animLayer).IsName(stateName) &&
anim.GetCurrentAnimatorStateInfo(animLayer).normalizedTime < 1.0f)
return true;
else
return false;
}
如果您需要等待&#34;重新加载&#34;动画在播放&#34;拍摄之前完成播放&#34;动画然后使用协程。 This帖子描述了如何操作。
答案 1 :(得分:1)
还有其他主题:https://answers.unity.com/questions/362629/how-can-i-check-if-an-animation-is-being-played-or.html
if (this.animator.GetCurrentAnimatorStateInfo(0).IsName("YourAnimationName"))
{
//your code here
}
这会告诉您是否处于某种状态。
Animator.GetCurrentAnimatorStateInfo(0).normalizedTime
这将为您提供动画的标准化时间:https://docs.unity3d.com/ScriptReference/AnimationState-normalizedTime.html
尝试使用这些功能,希望能解决您的问题