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

原视频


unity2D角色控制器教程(基于untiy5修改)

1.新建一个空对象Create Empty 命名为Character

添加 Sprite renderer 精灵渲染器

这个截图是我的5.5.2f1版本的

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第1张图片

添加 Rigidbody 2D 2D刚体组件


2.精灵序列图

导入后设置

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第2张图片

点击Sprite Editor,如果选择Automatic ,点击Slice后,将自动根据透明度切出精灵

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第3张图片

这里我们设置想要的大小:选择类型为Grid , 大小为275X275像素,点击Slice

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第4张图片

添加两个碰撞器

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第5张图片

3.动画状态机

在Assets下右键创建一个动画控制器 Animator controller,命名为RobotController

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第6张图片

拖动赋给Character的Animation组件的Controller参数

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第7张图片

打开动画编辑器Animation和动画状态机Animator(5.5.2f1的截图)

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第8张图片

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第9张图片

那个24看自己的精灵帧数调。

给状态机增加参数

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第10张图片

(5.5.2f1位置有点不同)

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第11张图片

右键增加转换线

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第12张图片【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第13张图片

试了下怎么删除线,是点击后,在右边的小减号那里删

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第14张图片

在右边设置,如图,意思是当speed(前面新建的参数)Greater(大于)0.01时,从待命状态转为跑状态

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第15张图片

再同样添加一条转换线当speed less(小于)0.01时,从跑状态转为待命状态

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第16张图片

注意,这里如果连接了个没有动画的状态,比如下图的Exit,在右侧就没有上图的Atomic

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第17张图片

4.新建脚本

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第18张图片

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_第19张图片

5.跳跃是一串只有一帧的动画

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第20张图片

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第21张图片

新建11个

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第22张图片

赋值

【截图整理官方教程】unity 2D角色控制器 2D Character Controller_第23张图片

这样能让跳跃和落下使用同一套动画。

视频最后是连跳的实现和禁止跳跃时的转向。

OVER



你可能感兴趣的:(毕设,2D角色控制器,unity,character,2d,角色,控制器)