主角状态机的设计
来源:互联网 发布:点胶机编程视频 编辑:程序博客网 时间:2024/04/28 20:23
使用Unity里面的Animation State Machine动画状态机
动画的属性设置,分为循环动画和一次性动画
主角的动画分类
•休闲
•行走
•攻击 Attack1 Attack2 RangeAttack
•被攻击
打开animator窗口,如何打开呢?可以先在Hierarchy中选中player,在Windows->animator就可以打开其窗口了
从Model中导入Player的动画。
动画属性设置,可以把他们之间的动画分为循环动画和一次性动画,这里只有Stand为循环动画
设置他们之间的转换关系,比如Bool和Trigger类型,从PlayerStand到PlayerRun为Bool类型,true的时候为Run,false的时候返回默认的Stand
而Stand和Attack他们之间是Trigger,意味触发,而Attack回到Stand的条件是动画播放结束,Exit Time,他们之间的关系如图:
接下来就是事件触发,攻击控制了:
设置虚拟的攻击按钮
通过代码添加按钮的点击事件监听
•EventDelegate normalClickEvent = new EventDelegate(this, "OnNormalAttackButtonClick");
•GameObject.Find("NormalAttack").GetComponent<UIButton>().onClick.Add(normalClickEvent);
给状态机设置状态条件
•修改Trigger animator.SetTrigger("AttackB");
•修改Bool animator.SetBool("Walk", false);
using UnityEngine;using System.Collections;public class PlayerAnimationAttack : MonoBehaviour { private Animator animator; private bool isCanAttackB;// Use this for initializationvoid Start () { animator = this.GetComponent<Animator>(); EventDelegate NormalAttackEvent = new EventDelegate(this, "OnNormalAttackClick"); GameObject.Find("NormalAttack").GetComponent<UIButton>().onClick.Add(NormalAttackEvent); EventDelegate RangeAttackEvent = new EventDelegate(this, "OnRangeAttackClick"); GameObject.Find("RangeAttack").GetComponent<UIButton>().onClick.Add(RangeAttackEvent); EventDelegate RedAttackEvent = new EventDelegate(this, "OnRedAttackClick"); GameObject redAttack = GameObject.Find("RedAttack"); redAttack.GetComponent<UIButton>().onClick.Add(RedAttackEvent); redAttack.SetActive(false);}// Update is called once per framevoid Update () {} public void OnNormalAttackClick() { if (animator.GetCurrentAnimatorStateInfo(0).IsName("PlayerAttackA") && isCanAttackB) { animator.SetTrigger("AttackB"); } else { animator.SetTrigger("AttackA"); } } public void OnRangeAttackClick() { animator.SetTrigger("AttackRange"); } public void OnRedAttackClick() { animator.SetTrigger("AttackGun"); } public void AttackBEvent1() { isCanAttackB = true; } public void AttackBEvent2() { isCanAttackB = false; }}
0 0
- 主角状态机的设计
- 状态机的设计
- 状态机的VHDL设计
- RPG游戏主角状态机(Trigger触发器)
- 状态机设计
- 状态机设计
- 状态机--状态机6,关于战斗兵种的状态机初步优化和状态设计
- 状态机--状态机7,关于战斗兵种的状态机进阶设计与消息系统
- 设计可综合状态机的指导原则
- 基于状态机的简易RISC CPU设计
- Android的组件设计与状态机
- 基于状态机的LCD多级菜单设计
- 服务器架构设计3------状态机的使用
- 基于状态机的LCD多级菜单设计
- 对于FPGA状态机的设计心得
- 游戏状态机的设计与实现
- 游戏状态机的设计与实现
- 基于运行时栈的状态机设计
- 在使用 bitvise SSH client时,进行隧道S2C端口映射时,远程主机外网不能访问问题。
- I
- 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
- SVN更新出现版本冲突
- struts-project.xml无法用MyEclipse JSP Editor打开,报错原因
- 主角状态机的设计
- 深度学习caffe教程
- 树的“重心”的一些性质及动态维护
- 使用CentOS出现的一些问题
- Kmeans原理和实现
- Hive自定义UDF的JAR包加入运行环境的方法
- Retrofit 2 动态URL
- zoj 2343
- sql自动生成{00N}编号