一、前言
(1) 人物角色制作
(2) 地面制作
(3) 游戏结束和重新开始
二、人物动画序列帧
1.将角色的序列帧图导入到工程中
2.切割序列帧:
-
将图片的Texture Type设置为Sprite(2D and UI),把Sprite Mode设置为Multiple
-
点击Sprite Editor,在显示出来的窗口中进行切割
-
编辑图片,点击左上角的Slice,设置Type:Grid,Pixel Size,设置好后点击slice分隔
效果如图 3.选中所有的序列帧,拖入到Hierarchy窗口,弹出创建窗口,把动画文件存为run.anim,项目中会生成序列帧动画
4.在role_run_0节点添加Sprite Render和Animation组件,Animation中点击Show Sample Rate调节动画帧率
三、控制角色动画状态的切换
一段跳是在空中保持滑翔的动画,只有一帧:
二段跳是在空中翻转的动画,有五帧
打开刚刚制作的跑动画生成的role.controller动画控制器,添加jump1(一段跳)、jump2(二段跳)到控制器中,组织动画状态过渡连线图如下:
为了控制动画状态的过渡,添加两个bool类型的变量:IsJumping1
、IsJumping2
,编辑状态过渡的条件,从run过渡到jump1的条件为I是Jumping1
为true
由于跳跃是随时打断run的动画并且不需要动画融合的效果,所以把Has Exit Time的勾去掉,这样在run的任何一帧都会立即切刀jump1,而无需等待run的其他序列帧
过渡 | 条件 | Has Exit Time |
---|---|---|
run->jump1 | IsJumping1为true | × |
jump1->run | IsJumping1为false | × |
jump1->jump2 | IsJumping2为true | × |
jump2 ->jump1 | IsJumping2为false | × |
四、角色移动
1、给角色添加RigidBody2D和BoxCollider2D组件
2、给角色的重力Gravity Scale调整为5,使角色有下落的效果,同时选定Freeze Rotation Z,防止角色碰到地面的时候发生Z轴的旋转
同时调整碰撞器的大小和位置,使其与角色主体相符
3、创建脚本
(1)设置玩家一段跳和二段跳的速度,并设置按空格键后玩家跳跃,连续按两下空格键会进行二段跳跃,二段跳会在空中进行翻滚;
(2)触发器事件设置碰到金币时金币消失,并通过GameMgr金币数量增加;
(3)碰撞事件检测碰到地面时,一段跳二段跳均失效,且跳跃速度变为0;碰到游戏边界时游戏结束。
将其挂在role预设上
using UnityEngine;
public class Player : MonoBehaviour
{
/// <summary>
/// 跳跃次数
/// </summary>
private int m_jumpCount = 0;
private Animator m_ani;
private Rigidbody2D m_rig;
/// <summary>
/// 一段跳速度
/// </summary>
public float JumpSpeed = 20;
/// <summary>
/// 二段跳速度
/// </summary>
public float SecondJumpSpeed = 15;