写在最前面:
自学了两个月unity3D,今天自己闲来无事做了这么一个游戏,拿上来和大家分享下。就实现了最基础的玩法,萌新请轻喷。 = =。
一、功能介绍
1.1场景切换
我们的场景分为3个,一个开始场景,主要负责向其他场景的调转以及游戏的退出。另一个是游戏场景,是游戏的主体部分,实现娱乐功能。还一个是帮助场景,玩家可以在此查看游戏玩法。
![](https://i-blog.csdnimg.cn/blog_migrate/da63ff503200f9eeaa80a1d6bf38daef.webp?x-image-process=image/format,png)
T1开始场景
![](https://i-blog.csdnimg.cn/blog_migrate/6d2b47a27c8e8f1cfcd8c822b6b67dac.webp?x-image-process=image/format,png)
T2游戏场景
![](https://i-blog.csdnimg.cn/blog_migrate/e41ea1c07b9e67e6bb18eec6b8c8f457.webp?x-image-process=image/format,png)
T3帮助场景
1.2游戏场景布置
整个游戏场景中分为三个部分,分别为:16个Button、2个Text、16张image、8张Sprite。
1)按钮的功能主要接收玩家的点击,显示下层纸牌,计数,传递匹配名。按钮将以纸牌背面显示。
2)文本的功能是实时显示倒计时以及玩家得分。
3))图片的功能是渲染纸牌,它将以纸牌正面显示。
1.3洗牌
每次游戏纸牌排布循序都将不同,增加游戏的不确定性和可玩性。
1.4点击三次匹配
当玩家翻开三张不同的扑克时,游戏将会自动检查前两张是否匹配,匹配则加分并且消除纸牌;不匹配则将前两张纸牌重新置反。
1.5匹配以及消除
游戏判断纸牌是否为相同的纸牌。将纸牌从游戏场景中消除
![](https://i-blog.csdnimg.cn/blog_migrate/3a2f95741ddb4a605d5c43c4cb04ffea.webp?x-image-process=image/format,png)
1.6总分
弹出游戏面板,并且显示玩家的总分。
![](https://i-blog.csdnimg.cn/blog_migrate/868dcdb76f5594544d51053744be3d63.webp?x-image-process=image/format,png)
二、 实现
2.1场景切换
给每个场景添加按钮,在场景跳转的按钮上添加脚本。使用SceneManager.LoadScene(“string”) 函数可以通过修改string参数实现向不同场景的跳转。
2.2游戏场景布置
1)设置按钮、图片为预制体并用两个数组分别参访。通过排布预制体的方法可以快速布局游戏场景。同时调节按钮的图层高于图片,用于最先显示按钮。
![](https://i-blog.csdnimg.cn/blog_migrate/f31c99e7ef3ca8daed7f11a5f0e579a3.webp?x-image-process=image/format,png)
T4
![](https://i-blog.csdnimg.cn/blog_migrate/9b265a98492067ebb5b00b84eb1aefc3.webp?x-image-process=image/format,png)
T5
2)设置按钮的source image将按钮的显示图片改为纸牌背面。同时,给按钮添加点击事件:向GameManager脚本传入图片名字和对应按钮,并且把按钮设为不可见、不可点击。
![](https://i-blog.csdnimg.cn/blog_migrate/668cbd06d18b05c9d32fe6711b3c98c1.webp?x-image-process=image/format,png)
3)使用InvokeRepeating()函数实现每秒减一的功能,并且修改时间的文本,以更新时间。
![](https://i-blog.csdnimg.cn/blog_migrate/59f9bb0aa4315966bfdbc7836cc0208f.webp?x-image-process=image/format,png)
4)16张图片的作用是渲染纸牌,它将以纸牌正面显示。纸牌由8张sprite用作纸牌正面。修改图片的source image使图片渲染纸牌。渲染纸牌正面所用到的图片用一个数组来存放。
![](https://i-blog.csdnimg.cn/blog_migrate/a6e2d4e1b5ab41eb72a9e80a4d53c170.webp?x-image-process=image/format,png)
T6
2.3洗牌
首先设置两个数组,一个存放0~15的正序数,另一个存放打乱后的数字作为T5数组渲染T6图片的index.
具体通过使用Random.Range(),函数实现随机取数,然后将取到的数存放到第二个数组中并remove()第一组中相应的内容。
![](https://i-blog.csdnimg.cn/blog_migrate/68b2480e3a6affa145ed994e64d875fa.webp?x-image-process=image/format,png)
2.4点击三次匹配
首先设置一个showing变量每次点击纸牌时加一,当加到3的时候调用匹配函数。并且重新置1。值得一提的是,在最后一次匹配时判断依据变为匹配数满14并且showing变量为2。其中匹配数为一个整形变量,每成功匹配一对,加二。
![](https://i-blog.csdnimg.cn/blog_migrate/6fa2e5d93b1286a88ea6ef1b54b7f538.webp?x-image-process=image/format,png)
2.5匹配和消除
给每个按钮设置对应0~15的标签,用于确定点击的按钮在数组中的位置。通过这个位置访问T6相应位置上图片的名字。每次点击纸牌都将传出对应的名字,并在游戏主脚本中设置一个集合接收。通过比较集合中前两个元素来检查是否匹配。如果匹配成功就将传值的按钮可见性通过GetComponent<>().enable设置为false。并且把被渲染的图片也设置为false。然后再把接收名字和按钮的集合清空。
![](https://i-blog.csdnimg.cn/blog_migrate/4542de758d4ef87eb60977cc0dfa8e0b.webp?x-image-process=image/format,png)
如果匹配不成过,那么重新把就收到的按钮设为可点击,并且把按钮设为可见,把底层图片设为不可见。
![](https://i-blog.csdnimg.cn/blog_migrate/75c0875750f16e551a6f71ef50e2c254.webp?x-image-process=image/format,png)
2.7总分
设置一个Panel,并且一开始设为不可见,当倒计时为0时,调节为可见。在Panel上添加得分文本、重来和返回菜单的按钮。
得分文本通过访问游戏的得分数据来显示。给按钮添加场景跳转功能。