Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

目录


一、简单介绍

Unity 游戏实例开发集合,使用简单易懂的方式,讲解常见游戏的开发实现过程,方便后期类似游戏开发的借鉴和复用。

本节介绍,Circus (马戏团) 休闲小游戏快速实现的方法,希望能帮到你,若有不对,请留言。

这是一个 2D 游戏,主要是使用精灵图、2D 重力、2D 碰撞体,实现,游戏实现原理:
0、这是2D 游戏基于 横屏 1920x1080 开发的,并实现屏幕适配;
1、玩家 Joker x 方向位置保持不变,背景和火圈从左往右移动,从而实现 Joke 向前跑动的效果
2、Joker 有重力效果,挂载Rigidbody2D, 通过 GetComponent().Velocity 的 方向添加速度,来实现向上跳动的效果
3、无限背景实现:使用 shader 中的 MainTex 的 Offset 属性中的 x 实时变化,实现无限

二、Circus (马戏团) 游戏内容与操作

1、游戏开始,背景、火圈自动向左移动,Joker 开始跑动

2、点击鼠标右键 Joker 跳跃

3、没跳过一个 火圈对应加分

4、Joker 碰到火圈,游戏结束

三、相关说明

1、音频的枚举命名对应实际音频的名字,方便加载和指定播放音频

2、由于2D 游戏(元素都在同一平面),设置 SpriteRenderer 的 Order in Layer 来控制显示先后,Order in Layer 越大,显示就在前面,所以各个 Order in Layer 定义显示规则为 :Background 预制体为 -5,Joker 为 0,FireCircle 为 -2 ,FireHalfCircle 为 2

3、Background 无限移动是通过 shader ,一张图实现的,原理是:1)获取Sprite 的材质,2)材质上获取 shader 的 _MainTex,对 Offset 进行动态修改,从而实现无限循环

m_BgMat = bg.GetComponent<SpriteRenderer>().material;
m_BgMainTexVect = m_BgMat.GetTextureOffset(MAIN_TEX);
m_BgMat.SetTextureOffset(MAIN_TEX, new Vector2(m_BgMainTexVect.x += m_MainTexRunSpeed * Time.deltaTime, m_BgMainTexVect.y));

4、火圈是两层 Sprite 组成,Sprite 中的 layer 不同,且一个大于 Joker 的 layer ,一个小于 Joker 的 Layer ,从而实现跳跃火圈的效果

5、火圈生成的位置,是根据屏幕宽的上的 百分(1+?%)多少设置的,所以,可以保证,生成前保证是看不见火圈的;火圈的回收的位置,也是根据屏幕的宽左边的百分(-?%)多少设置的,可以保证回收火圈,也是看不见火圈的

www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

四、游戏代码框架

(仅做参考,可以根据需要重新架构,添加消息中心,管理一些事件,或者更好)

www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

五、知识点

1、MonoBehaviour 生命周期函数:Awake,Start,Update,Destroy

2、Input 按键的监控鼠标按键的状态

3、GameObject.Instantiate 物体的生成,GameObject.Destroy 物体的销毁

4、简单的对象池管理

5、Rigidbody 重力效果,添加 EdgeCollider2D ,进行 碰撞检测(Trigger)

6、简单UGUI的使用

7、2D 游戏屏幕适配(主要是UI 、 NPC 生成位置,屏幕适配 Camera orthographicSize)

8、一些数据,路径等的统一常量管理

9、Animation、Animator 的简单使用

10、游戏中 Tag 的使用

11、IManager 简单的接口规范 Manager 类函数

12、Action OnChangeValue 属性变化中委托的使用

13、Resources.Load() 代码加载预制体的使用

14、简单的屏幕坐标转为世界坐标的工具类

15、 SceneManager.LoadScene 加载,和 SceneManager.GetActiveScene() 当前场景的获取

16、游戏开发的资源脚本文件夹分类管理

17、Audio 简单管理播放

18、等等

六、游戏效果预览

www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

七、实现步骤

1、打开 Unity,导入相关资源,并把图片都转为精灵图

www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

2、把 Main Camera 的位置设置为(0,0,-10),Clear Flags 设置为 Solid Color , Projection 设置为 Orthofraphic,调整 Size 为0.95,是在Screen (1920x1080)屏幕下 ,根据背景图 调整的,如图

www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

3、把背景图改名为 Background ,调整 Scale X 比例为 1.35(根据需要调整合适值) 使之铺满 Game 窗口,创建 Material ,shader 设置为 Unlit-Texture ,赋给 Background ,并把 Background 拖到 Resources ,设置为 预制体

www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

4、在场景中,添加一个 GameObject ,改名为 World ,pos(0,0,0),删除 Directional Light ,把 Main Camera 拖到其下,并把屏幕设置为 1080x1920 作为游戏开发宽高(后面屏幕适配都是基于1080x1920做适配)

www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

5、把小丑2-3图片拖到场景中,创建小丑的 Joker_Run 动画,和 Joker 动画机,改名为 Joker ,选中 Joker,然后 Window-Aniamtion-Animation ,在 Animation 窗口添加 Joker_Jump(小丑2图) 和 Joker_Collider(小丑4图) 动画

www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

6、如果 Joker_Run 默认动画速度过快,可以调整 Samples 12 改为 6(可以根据需要适当修改)

www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

7、选中 Joker,然后 Window-Aniamtion-Animator,动画过渡线如图,添加 Collider(Trigger) 和 IsJump(Bool) 参数,Any State 过渡线到 Joker_Collider 是 Collider ,Joker_Run 过渡线到 Joker_Jump 是 IsJump 为 true ,Joker_Jump 过渡线到 Joker_Run 是 IsJump 为 false,最后拖到 Resources 文件夹下作为预制体

www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

7-1、给 Joker 添加 Rigidbody2D ,BoxCollider2D ,size 设置如图(根据需要设置即可)

www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

8、同理,把 火图a1-2 拖到场景,构建动画,改名为 FireCircle ;把 火图a1f-2f 拖到场景,构建动画,改名为 FireHalfCircle 并把它置于 FireCircle 其下

www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

8-1、给 FireCircle 添加 BoxCollider2D ,size 和位置设置如下,作为碰撞火圈结束的碰撞体,添加 EdgeCollider2D,设置大小方向如下,勾选 IsTrigger 作为触发得分使用

www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

9、由于2D 游戏(元素都在同一平面),设置 SpriteRenderer 的 Order in Layer 来控制显示先后,Order in Layer 越大,显示就在前面,所以各个 Order in Layer 定义显示规则为 :Background 预制体为 -5,Joker 为 0,FireCircle 为 -2 ,FireHalfCircle 为 2,层级效果如下

www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现
www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

10、在 World 下面添加多个 GameObject,位置都为(0,0,0),改名为 SpawnBackgroundPos,AudioSourceTrans,SpawnJokerPos,SpawnFireCirclePos,功能如其名,用于生成 Background 父物体,音频源挂载,生成 Joker 的父物体,生成 FireCircle 的父物体

www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

11、在 World 下面添加 GameObject,改名为 Ground ,添加 BoxCollider2D,位置为(-1.2,-0.62,0),x 作为后面 Joker 生成的位置(根据需调整BoxCollider2D ,位置)

www.zeeklog.com  - Unity 游戏实例开发集合 之 Circus (马戏团) 休闲小游戏快速实现

12、在UI下面,添加一个Canvas (自动添加EventSystem),设置 Canvas Scaler 的 UI Scale Mode 为 Scale with Screen Size ,