一、蝎子动画基本
首先我们需要一个模型和模型所带的一些需要控制的动画(这里拿蝎子举例)
蝎子有四个动画,默认状态下我们使用idle动画,然后设置三个按钮来控制attack、walk和run
二、Animation Controller实现动画控制
1、创建一个Image Target并改名为Scorpion,在其下面添加子对象五个button和Scorpion的模型。
(这里还有一些如何使用vuforia就不再赘述了)
2、创建一个Animation Controller来控制Scorpion的一些动画
这个形式可以实现不同动画向Idle的转换和Idle向其他动画的转换。并且要在Motion这里添加相应的动画。
3、在Prameters里面加入三个bool类型的变量,用于存储鼠标该动画是否应该被执行的信息
相应的在箭头这里加入对应的Conditions,并且都设置成true,这样就可以实现箭头两端指向与被指向的动画转换。
4、Animation Controller的功能已经实现,把他绑定到
的Animator组件中
三、编写脚本实现按钮控制Prameters中的三个bool类型变量
1、脚本语句如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class AnimationControl_Shark: MonoBehaviour
{
private Animator animator;
public AudioSource clip;
public GameObject[] Other;
public AudioSource[] oth;
private void Start()
{
animator = gameObject.GetComponent<Animator>();
clip = gameObject.GetComponent<AudioSource>();
for (int i = 0; i < Other.Length; i++)
{
oth[i] = Other[i].GetComponent<AudioSource>();
}
}
private void Update()
{
if (clip.isPlaying)
{
for (int i = 0; i < Other.Length; i++)
{
if (oth[i].isPlaying)
{
gameObject.SetActive(false);
}
}
}
}
public void IsAttack()
{
animator.SetBool("IsAttack", true);
Invoke("Attackstop", 5f);
}
public void Attackstop()
{
animator.SetBool("IsAttack", false);
}
public void IsEat()
{
animator.SetBool("IsEat", true);
Invoke("Eatkstop", 5f);
}
public void Eatkstop()
{
animator.SetBool("IsEat", false);
}
public void IsSwim()
{
animator.SetBool("IsSwim", true);
Invoke("Swimkstop", 5f);
}
public void Swimkstop()
{
animator.SetBool("IsSwim", false);
}
public void Voice()
{
clip.Play();
}
public void StopVoice()
{
clip.Stop();
}
}
比较有用的就是这几行代码
public void IsAttack()
{
animator.SetBool("IsAttack", true);
Invoke("Attackstop", 5f);
}
public void Attackstop()
{
animator.SetBool("IsAttack", false);
}
IsAttack函数将bool类型的IsAttack设为true,根据第二步就可以控制Attack动画播放,在执行完这一句后再将IsAttack设为false,这样就在播放完一边Attack动画后停止播放,使之又回到Idle状态。
2、把此脚本挂载到scorpion——prefab上面
3、在按钮的On Click属性中找到对应动物模型脚本中的Is……函数,点击后便可以调用该函数
四、这样一个完整的按钮控制动画就完成啦!