目录
场景准备
代码编写
实际作用:依靠鼠标的点击物体,并播放对应的动画(按照一定的顺序)
假设A->B->C 动画播放的顺序我们就要按照这个顺序播放
场景准备
①在场景中创建如下三个物体并给他们分别加上对应的Tag
②由于我的目的是让每一个物体只播放一段动画,所以我选用的是animation
注意 unity 中ctrl+6 create的动画默认的是animator的动画,我们可以提前在物体上添加animation组件,或者是将animator动画更改为animation类型的动画
我是直接现在要创建的物体上先加上animation组件。
代码编写
①首先是创建一个instanceManage单例
②给每个物体创建脚本
?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InstanceManage : MonoBehaviour
{
//为了能实现动画必须按照我想要的顺序播放所以我选择了栈
//栈是一种先进后出的数据结构
public Stack<string> StartName = new Stack<string>();
public static InstanceManage Instance { get; private set; }
private void Awake()
{
Instance = this;
IinitializeStack();
}
public void SetGUI(string str)
{
GUIStyle style = new GUIStyle();
style.fontSize = 30;
style.wordWrap = true;
GUI.Box(new Rect(Input.mousePosition.x, Screen.height - Input.mousePosition.y, 200, 200), str, style);
}
//这是我想要的动画的执行顺序限制性 cube -> cap -> squere
//由于栈是先进后出的所以这里要把cube放在栈的最上面
private void IinitializeStack()
{
StartName.Push("sphere");
StartName.Push("cap");
StartName.Push("cube");
}
//查看顺序是否正确
public bool GetRightName(string tag)
{
if (StartName.Count != 0)
{
if (StartName.Peek() == tag)
{
StartName.Pop();
return true;
}
return false;
}
return false;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class fatherbody : MonoBehaviour
{
public new Animation animation;
public void Start()
{
animation = GetComponent<Animation>();
}
private void OnMouseDown()
{
if (InstanceManage.Instance.GetRightName(this.tag))//判断栈顶元素是否为当前点击的物体
{
animation.Play();
Debug.Log(this.gameObject.name);
}
}
}
|