毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller

原视频


unity2D角色控制器教程(基于untiy5修改)
1.新建一个空对象Create Empty 命名为Character
添加 Sprite renderer 精灵渲染器
这个截图是我的5.5.2f1版本的
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


添加 Rigidbody 2D 2D刚体组件


2.精灵序列图
导入后设置
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


点击Sprite Editor,如果选择Automatic ,点击Slice后,将自动根据透明度切出精灵
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


这里我们设置想要的大小:选择类型为Grid , 大小为275X275像素,点击Slice
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


添加两个碰撞器
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


3.动画状态机
在Assets下右键创建一个动画控制器 Animator controller,命名为RobotController
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


拖动赋给Character的Animation组件的Controller参数
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


打开动画编辑器Animation和动画状态机Animator(5.5.2f1的截图)
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


那个24看自己的精灵帧数调。
给状态机增加参数
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


(5.5.2f1位置有点不同)
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


右键增加转换线
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


试了下怎么删除线,是点击后,在右边的小减号那里删
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


在右边设置,如图,意思是当speed(前面新建的参数)Greater(大于)0.01时,从待命状态转为跑状态
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


再同样添加一条转换线当speed less(小于)0.01时,从跑状态转为待命状态
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


注意,这里如果连接了个没有动画的状态,比如下图的Exit,在右侧就没有上图的Atomic
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


4.新建脚本
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


FixedUpdate固定更新、Update更新
当MonoBehaviour启用时,其Update在每一帧被调用。

处理Rigidbody时,需要用FixedUpdate代替Update。例如:给刚体加一个作用力时,你必须应用作用力在FixedUpdate里的固定帧,而不是Update中的帧。(两者帧长不同)可参考这个链接unity3d Update()和FixedUpdate()的区别 。
左右移动代码:

using System.Collections; using System.Collections.Generic; using UnityEngine; public class controller : MonoBehaviour { public float maxSpeed = 10f; bool facingright = true; Animator anim; Rigidbody2D rigi; // Use this for initialization void Start () { anim = GetComponent (); rigi = GetComponent (); } // Update is called once per frame void FixedUpdate () { float move = Input.GetAxis ("Horizontal"); anim.SetFloat ("speed",Mathf.Abs(move)); rigi.velocity = new Vector2 (move * maxSpeed,rigi.velocity.y); if ((move > 0 && !facingright) || (move < 0 && facingright)) Flip (); } void Flip() { facingright = !facingright; Vector3 theScale = transform.localScale; theScale.x *= -1; transform.localScale = theScale; } }

这里是我的5.5的,与视频中不同的是如下定义
Rigidbody2D rigi;
rigi = GetComponent();
视频中的是旧版的,可以直接用默认rigidity2D,而unity5更严格了。

【注意】我试了运行,发现动画切换有点慢,才在动画状态机里发现了不同。
如下图这里unity5多了个Has Exit Time,即是否等动画播完才切换,默认是开启的。这里我们可以去掉勾选。在某些项目中,比如人物挂了,就倒地完成才消失,不同人物倒地时间不同于是需要这个选项。
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片

5.跳跃是一串只有一帧的动画
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片

毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


新建11个
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片

赋值
毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller
文章图片


这样能让跳跃和落下使用同一套动画。
视频最后是连跳的实现和禁止跳跃时的转向。
OVER
【毕设|【截图整理官方教程】unity 2D角色控制器 2D Character Controller】


    推荐阅读