一、状态机的建立

大部分情况下,当游戏内玩家没有任何操作时,肯定都是站立不动的状态,然而事实上,玩家不可能和木头人一样完全静止,这样显得非常不真实,给玩家带来的体验当然也会很差,所以基本上所有有角色的游戏(纯2D游戏除外),角色的站立状态也都是有专门的动画的。

当然了,站立状态大部分情况下都会是默认状态,所以先设置一个站立的状态,并作为初始状态如下:

点击一下状态,添加动画并改名

  • Motion:选择播放的动画
  • Speed:动画播放速度(别忘了动画是否循环播放可以点击动画进行设置)
  • Mirror:是否反转动画
  • Cycle Offset:动画偏移
  • Foot IK:足部修正,防止在奇怪地形上走路足部不自然

这样当进入游戏时,角色就会开始自动播放站立动画了

二、动画过渡

之后当然还需要添加跑步和倒退的动画,步骤如下:

1:新建两个状态,并设置好对应动画

2:将这三个状态相互连接起来,右键状态点击Make Transition即可创建出连线,可以看出这条线是有向的

下面这张图的含义就是:如果当前玩家在站立状态,当条件满足XXX时,就可以过渡到前进状态

3:设置触发条件,比如说当玩家按下W键进行移动时,动画由站立转为跑步

  • Float:浮点类型参数,很少用
  • Int:整型参数,例如设置Speed参数,当其为0时切换到站立动画,为2时触发跑步动画,为1时触发走路动画
  • Bool:bool类型参数
  • Trigger:触发器,相当于一瞬间的冲击,收到“冲击”时触发动画转换,很常用(特别是后面讲到的AnyState大法)

4:连线绑定条件

  • Has Exit Time:当动画播放完毕时,播放下一个动画,除此之外勾选之后动画会强制播放完毕才转到下一个状态,哪怕是下面的条件触发
  • Settings:动画过渡设置,例如玩家从攻击状态转为防御状态,这个过程既可以是平滑缓慢的,也可以是瞬间的,很难讲清楚具体设置方法建议自己调调看,一般来讲中间的蓝色范围越短动画转化的越迅速
  • Conditions:触发状态切换条件(或运算)
  • Solo/Mute:一般用于调试,Solo为当父状态有多条连线满足条件时,优先走这条,Mute是禁用

5:搞定

三、代码控制Animator

  • Animator.SetInteger("参数名", 值):修改整型参数
  • Animator.SetFloat("参数名", 值):修改浮点参数
  • Animator.SetBool("参数名", true/false):修改Bool参数
  • Animator.SetTrigger("参数名", true/false):触发器触发

然后就是写脚本苦力活了

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CdsLocation : MonoBehaviour
{public enum MyState{none,stand,run,back,attack,dead};MyState myState;private Transform myTran;private Animator myAnimator;private Vector3 lastUpd, nowUpd;void Start(){nowUpd = lastUpd = myTran.position;}void FixedUpdate(){nowUpd = myTran.position;CheckRun(lastUpd, nowUpd);lastUpd = myTran.position;}void CheckRun(Vector3 l, Vector3 r){if (l == r || Time.time <= 0.2f)        //如果两帧之间玩家位置没有改变,说明当前玩家是站立状态{if (myState != MyState.stand)       //如果在之前不是站立状态,切换为站立状态并播放站立动画,下同{myAnimator.SetInteger("Speed", 0);myState = MyState.stand;}}else if (Vector3.Dot(myTran.forward, r - l) > 0)        //将玩家正前方方向向量与玩家两帧之间位置差向量进行点积{                                                   //如果点积为正,说明玩家是向前移动,否则是向后移动if (myState != MyState.run){myAnimator.SetInteger("Speed", 4);myState = MyState.run;}}else{if (myState != MyState.back){myAnimator.SetInteger("Speed", 2);myState = MyState.back;}}}
}

Unity3D基础41:状态机实现人物站立、跑步与后退动画切换相关推荐

  1. 用状态机做人物(AI)的状态切换以及动画效果——人物动画以及切换

    github: https://github.com/lucaschen1993/PRG_DEMO 前言 在之前写状态机文章的时候介绍过,基于事件与委托实现的状态机.这篇文章将介绍状态机的使用,以及人 ...

  2. Unity3D基础40:人物动画

    前文:https://blog.csdn.net/Jaihk662/article/details/87927195(人物角色模型) 一.Animator组件 官方文档:https://docs.un ...

  3. Unity3D基础42:AnyState大法

    前文:https://blog.csdn.net/Jaihk662/article/details/88384315(状态机实现人物站立.跑步与后退动画切换) 一.AnyState 哪怕是最简单的角色 ...

  4. 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D...

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...

  5. Unity3D基础2:新建模型

    前文:https://blog.csdn.net/Jaihk662/article/details/86743037(Unity3D基础操作) 一.尺寸与方向 尺寸:默认的方块(Cube)长宽高都是1 ...

  6. 【Unity3D基础教程】给初学者看的Unity教程(零):如何学习Unity3D

    转自:https://www.cnblogs.com/neverdie/p/How_To_Learn_Unity3D.html(http://www.cnblogs.com/neverdie/) Un ...

  7. Unity3D基础知识之Camera摄像机及其属性

    Unity3D基础知识之摄像机Camera 一.简介 Camera:附加了摄像机Camera组件的游戏对象,向玩家捕获和显示世界的设备,同时在一个场景中摄像机的数量不限. 组件:Transform:变 ...

  8. Unity3D基础知识笔记

    Unity3D基础知识笔记 一.Unity简介 1)Unity3D概念 2)Unity3D的特点 二.Unity3D的发展历史 三.软件安装 一.Unity简介 1)Unity3D概念 Unity是由 ...

  9. Unity3D基础入门之粒子系统(属性介绍+火焰粒子系统案例制作)

    Unity3D基础入门之粒子系统(属性介绍+火焰粒子系统案例制作) 一.属性介绍 1.主面板Particle System (1)Duration:粒子发射周期 图中,5.00即在发射5秒后进入下一个 ...

最新文章

  1. 新基建的内涵、意义和隐忧 ,基于互联网大脑模型的分析
  2. php ping主机名,PHP PING值函数
  3. 订餐系统项目中OrderForm、OrderDTO、OrderMaster和ResultVO的区别
  4. Centos6.5 mysql折腾记
  5. gazebo模型_SLAM组合拳之六 — 创建自定义Gazebo功能包(一)
  6. Python初学者:输入若干个正整数,升序后输出
  7. 扒一扒那些叫欧拉的定理们(一)——基本介绍和简单多面体欧拉定理
  8. 好用的在线PS编辑器
  9. oracle报无效数字解决笔记
  10. maya表面种植物体插件 Plant Objects on surface v1.0 下载及教程
  11. 2013 CVPR点评
  12. 无插件纯Web HTML5 3D机房 进阶篇(新增设备、线缆、巡查等功能)
  13. 一个对小学生的随机生成的四则运算试题
  14. 软件测试的一些大致流程
  15. 本地使用JSTL标签的方式及问题解决
  16. mysql 插入1000万数据需要多久?
  17. 分享30个最新的单页网站设计案例
  18. “第五届医疗卫生CIO班”开学典礼隆重举行
  19. 记录下载压缩包的问题
  20. 海外的外贸电子商务网站服务器,电商平台解决方案|电商平台安全解决方案|电商行业服务器安全配置|电商企业服务器数据中心安全解决方案-天下数据...

热门文章

  1. 中外学者点赞贵州大数据:想把展厅带回家
  2. 【招行】软件开发工程师实习生面试
  3. 教宝宝使用水杯的正确方法
  4. 关于Surface的底层双缓冲机制学习
  5. 重装IE6.0浏览器
  6. 什么是市盈(TTM)?
  7. (已解决)火狐浏览器账号不同步问题
  8. linux 命令:scp 详解
  9. windows下递归删除指定文件和文件夹
  10. 线卡(line card)