创建一个新项目
打开unity,然后选择new,将Template的3D改为2D。
项目资源
将资源导入到unity里。
游戏场景
(1)将素材拖进场景里,在右边的Sprite Renderer组件里的color可以随意改变颜色。
(2)给这个对象添加box collider2D组件,因为这个将当做地板。
背景颜色与游戏视野
2D游戏的背景颜色可以在Main camera对象里的background里更改
Projection要改为Orthographic(因为这是2D视野)
感觉主角过大的话可以把摄像头尺寸调大(让视野更宽广)将Size调大即可
玩家角色动画
将玩家角色的素材拖入场景 名字更改为Player
点击玩家角色 点开Game旁边的Animation
创建新的动画 名为idle
创建完以后点击Add Property → Sprite Renderer → Size(添加一个曲线)
将待机的素材放进曲线里
改Sample可以让动画切换的速度变慢
需要注意的是在第60秒可能会有原素材在里面 要删掉
其他动画同理
一共有待机,跑步,跳起,跳下,滑行等动画。
玩家角色
(1)给玩家添加Box Collider 2D组件 因为滑行的状态是靠着墙壁的
所以先把素材换成滑行的素材 然后依照滑行的素材更改碰撞体积
(2)添加刚体组件(Rigidbody2D)
实现角色移动
原理是通过施加力(AddForce)来让玩家移动
创建C#脚本 命名为Move
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class move : MonoBehaviour {
public float force_move = 50;//移动的力 用力推动角色移动
Rigidbody2D rgd;//引用刚体组件
private void Awake()
{
rgd = GetComponent<Rigidbody2D>();//获得刚体组件
}
void Update () {
float h = Input.GetAxis("Horizontal");//给h赋值 输入左右键
Vector2 velocity = rgd.velocity;//将矢量的速度赋予给刚体
if (h > 0.05f)//大于0.05的话就是按了右键
{
rgd.AddForce(Vector2.right * force_move);//给刚体施加力
}
else if (h < -0.05f)//小于0.05的话就是按了左键
{
rgd.AddForce(-Vector2.right * force_move);//给刚体施加力
}
}
}
将脚本拖进Player的对象里
然后启动游戏就会发现可以左右移动了
切换状态
点击Player的对象
点击Scene旁边的Animator 会发现里面有五个状态 即为idle,run,jumpup ,jumpdown ,slide (如果之前有正确创建的话)
我们首先要做的是将待机状态转化为奔跑:
右键idle状态 → Make Transition → 连接到run状态 →再右键run状态
→ MakeTransition →连接到idle状态
这样状态就可以互相切换了
但是要创建一个值让它们判断/自动切换
点击Layer旁边的Parameters → 创建(“+”符号) → Float值 → 命名为horizontal
用Float值是为了判定是否大于小于速度就切换状态 用绝对值更改值
在Move脚本里(Update) 添加新的代码
anim.SetFloat("horizontal", Mathf.Abs(h));
//Mathf是绝对值,设置它的状态转换
将新设置的值(horizontal)
放到刚刚创建的两条Transition里
(1)将idle到run的线的horizontal值设置为Greater(大于)0.1的速度
(2)将run到idle的线的horizontal值设置为Less(小于)0.1的速度
注意:将Has Exit Time勾去掉,不然动画结束会有延迟
然后启动游戏就会发现左右移动时会有奔跑的动作。
更改朝向
虽然左右移动有了奔跑的动作,但是会发现角色的朝向不会变
所以我们要添加代码更改它的朝向
代码添加在move脚本里的Update
原理:检测按下的是左还是右键 然后用用transform.localScale更改朝向
if (h > 0.05f)大于0.05就是按了右键
{
transform.localScale = new Vector3(1, 1, 1);//朝向右方向
}
else if (h < -0.05f)小于0.05就是按了左键
{
transform.localScale = new Vector3(-1, 1, 1);//朝向左方向
}
添加完后保存脚本再启动游戏就会发现按下左右键会更改朝向了