赞
踩
假设已存在一个玩家对象,想让其能完成4方向的移动。
那么需要4方向的动画,及控制4方向动画转变的控制器,改变玩家位置的某种方法。
这个组件需要一个控制器文件
完成各方向的移动动画,需要:1.各方向的动画;2.控制什么时候改变这些动画的控制器(脚本)
在这里创建一个Animation文件夹,一个controller文件夹。前者用来存放动画文件,后者存放控制动画的脚本。
然后,在controller文件夹下创建一个动画控制器
这个动画控制器是用来控制角色按什么键,调用哪个动画的文件。
创建完,重命名放在player的animator组件的控制器属性上
人物的动画,一般就为4方向的站立及走路图,所以创建8个动画。
因为是要创建对应对象的动画,所以选中对象后,在动画窗口新建剪辑。
创建完
给动画文件上帧,把对应的图拖进对应的动画文件
一开始设置的动画可能 太快,将样本调低能减速。
走路动画:一般只有3张,我一般让静止图设置为2张,看上去比较不违和
因为我这里的素材只有向左图,没有右图
故用了缩放反转x轴
到此,完成了动画文件的制作。
总体思路:
创建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 frame
- void 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 frame
- void 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;
- }
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。