900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Unity实现 ZenMatch玩法(也叫3Tile玩法)的核心逻辑

Unity实现 ZenMatch玩法(也叫3Tile玩法)的核心逻辑

时间:2023-12-25 17:54:43

相关推荐

Unity实现 ZenMatch玩法(也叫3Tile玩法)的核心逻辑

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

Unity实现 ZenMatch玩法(也有叫3Tile玩法)的核心逻辑

前言

提示:这里可以添加本文要记录的大概内容:

ZenMatch玩法是一个类似三消与连连看结合的消除玩法,在实现上可以选择UI或2D的方式。因为这类型的玩法在网上基本找不到相关代码,所以我构建了一个相关玩法的项目并总结了一篇文档提供给大家参考,大家有需要可以来找我要项目的源码,有什么不足之处也希望大家多提意见,欢迎大家来跟我讨论任何与技术相关的问题。

提示:以下是本篇文章正文内容,下面案例可供参考

逻辑部分

为满足在每行数量上限(根据分辨率适配最大上限)不确定且每行的最大数量都不同的需求,我使用了UI的方式进行布局的制作。为了满足玩法上的层级遮盖与行级遮盖,布局为层layer(多层)与行row(最小单位为0.5行)两个部分。

核心逻辑包括一个Controller总控制类、一个cell object的交互类、一个fly cell状态类、一个Manager状态管理类。

GameMainController主要控制场景的生成、道具方法、游戏失败、成功的判断等。根据配表json将每一个cell 块分别布局在 layer、row。

[

{

“row1”: “1,1,1,1,1,1,1,0|0”,

“row2”: “-1,1,-1,-1,-1,1,-1,0|0”,

“row3”: “-1,1,-1,-1,-1,1,-1,0|0”,

“row4”: “-1,1,-1,-1,-1,1,-1,0|0”,

“row5”: “-1,1,-1,-1,-1,1,-1,0|0”,

“row6”: “-1,1,-1,-1,-1,1,-1,0|0”,

“row7”: “1,1,1,-1,1,1,1,0|0”,

“row100”: “24,2,3,3,3,3,2,2,2,2,2”

},

{

“row1.5”: “1,1,1,1,1,1,0|0”,

“row2.5”: “1,-1,-1,-1,-1,1,0|0”,

“row3.5”: “1,-1,-1,-1,-1,1,0|0”,

“row4.5”: “1,-1,-1,-1,-1,1,0|0”,

“row5.5”: “1,-1,-1,-1,-1,1,0|0”,

“row6.5”: “1,1,-1,-1,1,1,0|0”

},

{

“row2”: “1,1,1,1,1,0|0”,

“row3”: “1,-1,-1,-1,1,0|0”,

“row4”: “1,-1,-1,-1,1,0|0”,

“row5”: “1,-1,-1,-1,1,0|0”,

“row6”: “1,-1,-1,-1,1,0|0”

},

{

“row2.5”: “1,1,1,1,0|0”,

“row3.5”: “1,-1,-1,1,0|0”,

“row4.5”: “1,-1,-1,1,0|0”,

“row5.5”: “1,-1,-1,1,0|0”

},

{

“row3”: “1,1,1,0|0”,

“row4”: “1,-1,1,0|0”,

“row5”: “1,1,1,0|0”

}

]

这是一个半随机关卡的配置json,基本逻辑为:在形状固定的前提下(配表中的1代表这个位置需要cell填充,-1代表需要空出来,0|0代表此row的x、y轴偏移量)将固定总类型数量的任意种类任意个数填充到布局中。

全随机关卡则完全不需要配表结构,需要填入期望个数、期望种类、期望权重(用于随机每种类型数量、每行数量)期望层数,进行全部随机填充生成关卡。全随机因为关卡通关的不确定性基本不会采用。(目前全随机还不成熟,欢迎有兴趣的小伙伴来跟我讨论任何关于全随机生成的想法)

固定关卡的json,原理与半随机一致,只是将随机种类的cell改为指定类型的cell进行填充,基本用于特定任务、道具、奖励关卡使用。

Cell object 代表每一个消除cell的交互类,用于判断当前cell是否可以点击(通过layer、row的遮挡),以及点击方法。每个可点击的cell出发click event后,都会生成一个fly cell object向指定目标飞行,并将当前点击记录进数据层与表现层。

Manager管理类管理所有cell被点击后状态、数据变化。当每个cell点击触发时,数据层面在同时就已经处理完毕,得到相应的结果并通知Controller类。表现层则记录当前飞行cell当前的状态(飞行、上移、下移、消除),向fly cell通知状态的改变,来展示表现层动画等。

Fly cell object则构建了状态机,通过Manager传递的状态而执行进行该状态的特定动作,当三个同类型的cell状态一致且满足消除条件后,就会向Manager返回消除回调,在表现层中消除当前一组cell。

玩法的核心逻辑基本就是这些,如果感兴趣的人多的话后续会考虑把项目源码发布出来。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。