Unity3D基础41:状态机实现人物站立、跑步与后退动画切换
一、状态机的建立
大部分情况下,当游戏内玩家没有任何操作时,肯定都是站立不动的状态,然而事实上,玩家不可能和木头人一样完全静止,这样显得非常不真实,给玩家带来的体验当然也会很差,所以基本上所有有角色的游戏(纯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:状态机实现人物站立、跑步与后退动画切换相关推荐
- 用状态机做人物(AI)的状态切换以及动画效果——人物动画以及切换
github: https://github.com/lucaschen1993/PRG_DEMO 前言 在之前写状态机文章的时候介绍过,基于事件与委托实现的状态机.这篇文章将介绍状态机的使用,以及人 ...
- Unity3D基础40:人物动画
前文:https://blog.csdn.net/Jaihk662/article/details/87927195(人物角色模型) 一.Animator组件 官方文档:https://docs.un ...
- Unity3D基础42:AnyState大法
前文:https://blog.csdn.net/Jaihk662/article/details/88384315(状态机实现人物站立.跑步与后退动画切换) 一.AnyState 哪怕是最简单的角色 ...
- 【Unity3D基础教程】给初学者看的Unity教程(四):通过制作Flappy Bird了解Native 2D中的RigidBody2D和Collider2D...
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 在第一篇文章[Unity3D基础教程] ...
- Unity3D基础2:新建模型
前文:https://blog.csdn.net/Jaihk662/article/details/86743037(Unity3D基础操作) 一.尺寸与方向 尺寸:默认的方块(Cube)长宽高都是1 ...
- 【Unity3D基础教程】给初学者看的Unity教程(零):如何学习Unity3D
转自:https://www.cnblogs.com/neverdie/p/How_To_Learn_Unity3D.html(http://www.cnblogs.com/neverdie/) Un ...
- Unity3D基础知识之Camera摄像机及其属性
Unity3D基础知识之摄像机Camera 一.简介 Camera:附加了摄像机Camera组件的游戏对象,向玩家捕获和显示世界的设备,同时在一个场景中摄像机的数量不限. 组件:Transform:变 ...
- Unity3D基础知识笔记
Unity3D基础知识笔记 一.Unity简介 1)Unity3D概念 2)Unity3D的特点 二.Unity3D的发展历史 三.软件安装 一.Unity简介 1)Unity3D概念 Unity是由 ...
- Unity3D基础入门之粒子系统(属性介绍+火焰粒子系统案例制作)
Unity3D基础入门之粒子系统(属性介绍+火焰粒子系统案例制作) 一.属性介绍 1.主面板Particle System (1)Duration:粒子发射周期 图中,5.00即在发射5秒后进入下一个 ...
最新文章
- 新基建的内涵、意义和隐忧 ,基于互联网大脑模型的分析
- php ping主机名,PHP PING值函数
- 订餐系统项目中OrderForm、OrderDTO、OrderMaster和ResultVO的区别
- Centos6.5 mysql折腾记
- gazebo模型_SLAM组合拳之六 — 创建自定义Gazebo功能包(一)
- Python初学者:输入若干个正整数,升序后输出
- 扒一扒那些叫欧拉的定理们(一)——基本介绍和简单多面体欧拉定理
- 好用的在线PS编辑器
- oracle报无效数字解决笔记
- maya表面种植物体插件 Plant Objects on surface v1.0 下载及教程
- 2013 CVPR点评
- 无插件纯Web HTML5 3D机房 进阶篇(新增设备、线缆、巡查等功能)
- 一个对小学生的随机生成的四则运算试题
- 软件测试的一些大致流程
- 本地使用JSTL标签的方式及问题解决
- mysql 插入1000万数据需要多久?
- 分享30个最新的单页网站设计案例
- “第五届医疗卫生CIO班”开学典礼隆重举行
- 记录下载压缩包的问题
- 海外的外贸电子商务网站服务器,电商平台解决方案|电商平台安全解决方案|电商行业服务器安全配置|电商企业服务器数据中心安全解决方案-天下数据...