【Unity初体验】连连看项目(上)

您所在的位置:网站首页 unity连线游戏 【Unity初体验】连连看项目(上)

【Unity初体验】连连看项目(上)

2023-10-09 14:28| 来源: 网络整理| 查看: 265

前情提要:

Unity的自学也有近半年,掌握了一些基础知识,也跟着官方的教程做了几个项目,自认为是入了门。因此总希望能够自己独立完成一个项目,完整地体验游戏制作始末的同时,也能借此搞清楚之前学得模棱两可的知识。因为本身是为了兴趣,而非专业人士,所以这次的项目选择了一个比较简单的连连看游戏。 学习Unity之前,也用JavaScript(因为Canvas的渲染比较方便)实现过几个小游戏(俄罗斯方块、数字迷宫之类的),但其体验与使用游戏引擎制作游戏有很大的区别,因此这次的连连看项目的完成也算是一次全新的体验,从中亦获益良多。这篇文章分上下两篇,分别对应前后两个版本,我会将主要的笔墨放在这个项目的几个关键问题与解决的方案,将之作为我对此次项目制作的一个总结,中间难免会出现各种各样的错误与不足,希望各路大佬指正。

开发概要:

关于连连看游戏的主要规则相信大家都很熟悉,我在这里就略过不提了。在第一个版本中,基本实现了连连看游戏功能,包括关卡自动生成、点击事件响应、方块消除、计分计时、通关-失败判定、暂停继续、返回主菜单、难度设置等。设置了简单、一般与困难三个难度等级,难度调整主要由图片数量与方块数量控制。关卡模式为单关卡模式。

几个关键问题:

一、数据结构的选择:

连连看游戏的主要界面是一个n * n的矩阵,因此自然而然会用到二维数组。为此我写了一个Map类,用来存储游戏中的每一个方块。与之配套的还有Vector结构体,主要用于确定位置与后面的寻路计算(之所以重新写了一个Vector而不是用Unity的Vector2,是因为Vector2中的变量类型为float,作为索引的话涉及比较频繁的强制转换)。 //Vector结构体 public struct Vector { public int x, y; //这里定义了五个静态变量,用于表示方向与空向量((-1, -1)这个点不会在游戏中使用到) static public Vector left = new Vector(-1, 0); static public Vector right = new Vector(1, 0); static public Vector up = new Vector(0, -1); static public Vector down = new Vector(0, 1); static public Vector Null = new Vector(-1, -1); public Vector(int x_, int y_) { this.x = x_; this.y = y_; } } //Map类 public class Map where T : new() { T[ , ] data; public Map(Vector v) { data = new T[v.y, v.x]; for (int i = 0; i data[i, j] = new T(); } } } public T getData(Vector v) { return this.data[v.y, v.x]; } public void setData(Vector v, T element) { this.data[v.y, v.x] = element; } }

由于之前一直用的是C++,对于C#的很多语法还不是很熟悉,因此在写Map类的过程中,涉及二维数组的声明与初始化的问题还是让我头疼了一下。这里稍微提一下我查到的关于C#二维数组的声明与初始化的方法(只是个人总结,局限性较大,仅供参考):

//方法一: int[ , ] array = new int[m , n]; //声明一个m * n的二维数组 int[ , ] array = new int[m , n]{ { 数组1}, { 数组2}, ...... , { 数组m}}; //对二维数组进行初始化 //方法二: int[][] array = new int[m][]; //声明一个含有m个一维数组的数组 //然后可以对数组array进行逐个的初始化 array[0] = 数组1; ...... array[m - 1]


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3