Unity animiator 学习记录【2D角色移动】
假设已存在一个玩家对象,想让其能完成4方向的移动。
那么需要4方向的动画,及控制4方向动画转变的控制器,改变玩家位置的某种方法。
添加Animator 动画组件
这个组件需要一个控制器文件
创建文件
完成各方向的移动动画,需要:1.各方向的动画;2.控制什么时候改变这些动画的控制器(脚本)
在这里创建一个Animation文件夹,一个controller文件夹。前者用来存放动画文件,后者存放控制动画的脚本。
动画控制器
然后,在controller文件夹下创建一个动画控制器
这个动画控制器是用来控制角色按什么键,调用哪个动画的文件。
创建完,重命名放在player的animator组件的控制器属性上
创建动画
人物的动画,一般就为4方向的站立及走路图,所以创建8个动画。
因为是要创建对应对象的动画,所以选中对象后,在动画窗口新建剪辑。
创建完
给动画文件上帧,把对应的图拖进对应的动画文件
一开始设置的动画可能 太快,将样本调低能减速。
走路动画:一般只有3张,我一般让静止图设置为2张,看上去比较不违和
因为我这里的素材只有向左图,没有右图
故用了缩放反转x轴
到此,完成了动画文件的制作。
动画控制器2
总体思路:
创建2个动画混合树,令2个树满足一定条件就相互转换。然后用脚本获取输入,并把输入反馈到条件上,从而实现站立/走路动画的转化。
对于让走路动画实行同时,还让物体移动,有很多方法。这里使用了2D刚体的velocity成员实现改变。
回到刚刚的动画控制器。
这里只学习从新混合树
创建,"Idle" 表示站立的动画,"walk"表示走的动画的两个混合树。
并双击进去改混合类型
而他们之间的的过渡条件就由我们判断,是否在走还是站立来切换。
这里创建2个参数,horizontal,vertical 接受我们对方向控制的输入,从而判断是走还是静止。
添加2个参数到这个2D方向融合树
然后列表添加4个motion
设置如图 ,令各方向动画,对应上对应的xy轴。这里参数horizontal,vectical 分别对应pos x,y
2D 刚体运动
写移动脚本,挂在玩家对象身上
主要思路:用Input的方法获取方向输入, 让动画控制器animator,使用SetFloat函数,改变刚刚在控制器添加的两个参数。从而实现,改变输入,改变动画。
ani.SetFloat("Horizontal", horizontal);
ani.SetFloat("Vertical", vertical);
public class playerMove : MonoBehaviour
{//动画,刚体组件private Animator ani;private Rigidbody2D rigid;void Start(){//获取组件ani = GetComponent<Animator>();rigid = GetComponent<Rigidbody2D>();}// Update is called once per framevoid Update(){//一直获取方向参数float horizontal = Input.GetAxisRaw("Horizontal");float vertical = Input.GetAxisRaw("Vertical");if (horizontal != 0){//只有4方向,所以只设置一个方向上的量,另一个置零ani.SetFloat("Vertical", 0);ani.SetFloat("Horizontal", horizontal);}if (vertical != 0){ani.SetFloat("Horizontal", 0);ani.SetFloat("Vertical", vertical);}}
}
切换走路
创建融合树,添加过渡
这里添加Speed参数来表示改变的条件,满足条件的时候就改变动画。
选中两条过渡线,conditon分别添加大于0/小于1,为相互改变的条件。
切换行走/站立代码
用horizontal,vertical两个作为参数构造vector2向量,再利用其长度判断是否有移动。
//切换跑步
Vector2 dir = new Vector2(horizontal, vertical);
//改变参数来改动画
ani.SetFloat("Speed", dir.magnitude);
改变刚体速度,改变物体移动
//改变刚体速度
rigid.velocity = dir * speed;
把过渡时间调0,可以让动画变化更流畅
然后就欧克了
全代码
public class playerMove : MonoBehaviour
{[Range(0, 30)]public float speed = 5f;//动画,刚体组件private Animator ani;private Rigidbody2D rigid;void Start(){//获取组件ani = GetComponent<Animator>();rigid = GetComponent<Rigidbody2D>();}// Update is called once per framevoid Update(){//一直获取方向参数float horizontal = Input.GetAxisRaw("Horizontal");float vertical = Input.GetAxisRaw("Vertical");if (horizontal != 0){//改动画的关键代码ani.SetFloat("Horizontal", horizontal);ani.SetFloat("Vertical", 0);}if (vertical != 0){ani.SetFloat("Horizontal", 0);ani.SetFloat("Vertical", vertical);}//切换跑步Vector2 dir = new Vector2(horizontal, vertical);//改变参数来改动画ani.SetFloat("Speed", dir.magnitude);//改变刚体速度rigid.velocity = dir * speed;}}
问题/总结
- 向量不太熟悉,为什么用刚体的速度成员能改变对象的位置?
- 因为这次的素材没有向右的图,我用缩放取负值改变了左图,但实际上还是会有些小bug:出现缩放动画帧,暂时懒得深究...QAQ
Unity animiator 学习记录【2D角色移动】相关推荐
- Unity+Hololens学习记录-射线应用
Unity+Hololens学习记录-射线应用 前言 射线介绍: 射线应用元素介绍: Ray RaycastHit Raycast 射线应用实例: 射线碰撞信息获取 Camera发出Ray Gaze射 ...
- Unity Shader学习记录(18) —— Shader动画
纹理动画 纹理动画在游戏中的应用非常广泛.尤其在各种资源都比较局限的移动平台上,我们往往会使用纹理动画来代替复杂的粒子系统等模拟各种动画效果. 11.2.1序列帧动画 _Time是float4类型, ...
- Unity Shader 学习记录(3) —— CG语言和Shader文件
1 什么是语义 赋给shader的输入输出的字符串,表达了参数的含义.语义告诉shader从哪里获取数据,又把数据输出到哪里. 2 Shader的三种debug方法 1 假色彩图像 2 VStudio ...
- unity shader 学习记录
记录下我学习unity shader的过程,并把我看到过的高质量教程推荐给大家! 借助插件shaderforge来熟悉着色的效果,并对照着shaderforge自动生成的shader代码手工优化和实现 ...
- Unity Shader 学习记录(5) —— 实现漫反射光照模型
1 公式计算 从公式可以看出,要计算漫反射需要知道4 个参数:入射光线的颜色和强度 cgh"材质的漫反射系数mdiuse,表面法线n以及光源方向I. 为了防止点积结果为负值,我们需要使用ma ...
- [Unity] GameFramework 学习记录 4:第三人称控制器
我想知道 UEntity 数据表中的编号跟每个实体表自己的编号之间是否需要统一,现在看来好像不需要统一,但是我也不知道是不是因为我还没看到这两个表有交互的时候 哦我才注意到,这个实体表是用来定义资源的 ...
- [Unity] GameFramework 学习记录 3
首先要仿照飞船的创建流程创建一个主角 首先直接导入 Starter Assets - Third Person Character Controller 太爽了 我看看啊 他这个是除了 ThirdPe ...
- [Unity] GameFramework 学习记录 1
下载框架作者的示例工程 https://github.com/EllanJiang/StarForce 移动到 unity 空项目中 然后再下载 Gameframework https://githu ...
- Unity Shader学习记录(6) —— 高光反射光照模型和内置计算函数
1 高光反射光照模型计算公式 从公式可以看出,要计算高光反射需要知道 4 个参数:入射光线的颜色和强度c,材质的光反射系数 m,视角方向v以及反射方向r.其中,反射方向r可以由表面法线n和光源i计算得 ...
最新文章
- 和功率的计算公式_电机电流的计算公式是什么,具体怎么计算?
- php 日历 代码,PHP 简单日历实现代码
- python找色_python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
- 史上最变态高考数学题,让99%的考生献上膝盖,看完我惊了......
- ic 卡获取帐号apdu指令_非接触IC卡片APDU指令系统介绍..docx
- Flex整合Spring
- 贪心算法的几种经典例题
- js分页组件laypage
- MariaDB安装报1067错误解决方式
- EasyExcel注解方式校验数据行
- OSPF FA地址分析
- Java通信之服务器生猛上手
- unity可以直接转h5吗_Unity对H5小游戏开发的支持—Project Tiny
- java添加一个复选框_java添加多个复选框控件
- iperf 服务端发送数据_Iperf详细使用说明
- 渗透测试类型(白盒测试、黑盒测试)和漏洞扫描器
- Electron 简介
- Datawhale-机器学习算法-Task3 EM算法
- c语言优秀教案,C语言优秀教案.doc
- 【ROS】rosbag使用
热门文章
- Debian/Linux 下无线网卡驱动的安装
- 今天穿什么?阿里AI小助手——滴搭告诉你!
- 【发福利啦!】畅享上百万卡时NPU普惠算力,启智与昇思MindSpore社区联合推出算力支持计划
- SAP 批次管理(特性、类)
- docker拉取不同架构的镜像如:x86拉取arm64的
- 关于itcast-tools工具包的详解(一. commons)
- (切换多语言)elementUI +vue-i18n 的国际化设置及使用
- canvas 圆角矩形填充_canvas制作圆角矩形(包括填充矩形的功能)
- Android实现高德地图定位详细流程
- 开源O2OA车辆管理:高效利用公车资源,提高使用效率