The*_*t22 3 c# animation unity-game-engine animator
我创建了一个名为“m4a4animator”的动画师。在其中,主要功能称为“空闲”(无),其他 2 种状态:“射击”(mouse0)和“重新加载”(R)。这 2 个动画状态转换为“空闲”。现在,一切正常......但我唯一的问题是:如果我正在重新加载并按下鼠标0(射击),动画运行状态立即更改为射击......但我想阻止它.
现在,问题是:如何在动画运行时停止某些动画更改?
这是我的脚本:
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于旧版动画系统,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;
}
Run Code Online (Sandbox Code Playgroud)
现在,一切正常......但我唯一的问题是:如果我正在重新加载并按下鼠标0(射击),动画运行状态立即更改为射击......但我想阻止它.
当按下拍摄按钮时,检查“重新加载”动画是否正在播放。如果是,请不要开枪。
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;
}
Run Code Online (Sandbox Code Playgroud)
如果您需要在播放“拍摄”动画之前等待“重新加载”动画完成播放,请使用协程。这篇文章描述了如何做到这一点。
归档时间: |
|
查看次数: |
12566 次 |
最近记录: |