Unity3D记忆翻牌小游戏开发教程
创作时间:
作者:
@小白创作中心
Unity3D记忆翻牌小游戏开发教程
引用
CSDN
1.
https://blog.csdn.net/zhurouwanzi/article/details/129832671
项目:记忆翻牌小游戏
unity版本:unity2020.3.30f1c1
这是一篇关于如何使用Unity3D开发记忆翻牌小游戏的详细教程。文章包含了游戏的完整制作过程,包括Unity版本、项目结构、代码实现等,并配有详细的图文说明。
一、游戏内容说明
- 两两翻牌,一样则标记成功,不一样,两个都恢复原样。
- 步数记数,可以规定步数,在规定步数内全发出游戏成功,没全翻出则游戏失败。
- 游戏成功和游戏失败都弹出相应的面板。
二、游戏最终成品
开始时:
三、游戏制作过程(图文)
新建一个背景图,一个用来放翻牌的面板,一个显示步数的文本
给panel添加上Grid Layout Group组件和Content Size Fitter组件。然后在panel下面新建一个image,然后根据你自己需要的数量进行复制。我这里是弄了30个格子。(Content Size Fitter组件是对panel的大小进行约束。Grid Layout Group组件是对panel下面的子物体进行排列,大家可以根据需求调整数值。)
将刚刚为了查看布局新建的很多image删除,只留下一个,改名为CardPre,为其添加button组件,然后将Transition的属性设置为none。然后新建一个Card脚本并挂载上去。然后制成预制体,然后将它也删除,一会儿会自己生成。
Card脚本:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class Card : MonoBehaviour
{
public int ID
{
get
{
return id;
}
}
private int id;
private Sprite frontImg;//未翻开前看到的图片
private Sprite backImg;//翻看后看到的图片
private Sprite successImg;//显示表示已经为正确翻开过的图片
private Image showImg;//挂载的图片组件
public Button cardBtn;//挂载的按钮组件
public void InitCard(int Id, Sprite FrontImg, Sprite BackImg, Sprite SuccessImg)
{
this.id = Id;
this.frontImg = FrontImg;
this.backImg = BackImg;
this.successImg = SuccessImg;
showImg = GetComponent<Image>();
showImg.sprite = this.backImg;
cardBtn = GetComponent<Button>();
}
public void SetFanPai()
{
showImg.sprite = frontImg;
cardBtn.interactable = false;
}
public void SetSuccess()
{
showImg.sprite = successImg;
}
public void SetRecover()
{
showImg.sprite = backImg;
cardBtn.interactable = true;
}
}
新建一个成功面板和失败面板
新建一个空物体,新建一个Card_GameManager脚本,挂载到空物体上
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class Card_GameManager : MonoBehaviour
{
private const int winCardCouples = 15;
private int curCardCouples = 0;
private bool canPlayerClick = true;
public Sprite BackSprite;
public Sprite SuccessSprite;
public Sprite[] FrontSprites;
public GameObject CardPre;
public Transform CardsView;
private List<GameObject> CardObjs;
private List<Card> FaceCards;
public int count = 0;
public int limitCount = 50;//限制步数
public Text stepCount;
public GameObject winPanel;
public GameObject losePanel;
void Start()
{
CardObjs = new List<GameObject>();
FaceCards = new List<Card>();
//将12张卡牌制作完成后添加到CardObjs数组
for (int i = 0; i < 15; i++)
{
Sprite FrontSprite = FrontSprites[i];
for (int j = 0; j < 2; j++)
{
//实例化对象
GameObject go = (GameObject)Instantiate(CardPre);
//获取Card组件进行初始化,点击事件由游戏管理器统一处理
//所以卡牌的点击事件的监听在管理器指定
Card card = go.GetComponent<Card>();
card.InitCard(i, FrontSprite, BackSprite, SuccessSprite);
card.cardBtn.onClick.AddListener(() => CardOnClick(card));
CardObjs.Add(go);
}
}
while (CardObjs.Count > 0)
{
//取随机数,左闭右开区间
int ran = Random.Range(0, CardObjs.Count);
GameObject go = CardObjs[ran];
//将对象指定给Panel作为子物体,这样就会被我们的组件自动布局
go.transform.parent = CardsView;
//local就表示相对于父物体的相对坐标系,此处做校正处理
go.transform.localPosition = Vector3.zero;
go.transform.localScale = Vector3.one;
//从CardObjs列表中移除该索引指向对象,列表对象数量减少1个
CardObjs.RemoveAt(ran);
}
}
private void Update()
{
if (count == limitCount)
{
losePanel.SetActive(true);
}
}
private void CardOnClick(Card card)
{
if (canPlayerClick)
{
//先判断是否可以点击,可点击则直接翻牌
card.SetFanPai();
//添加到比对数组中
FaceCards.Add(card);
//步数+1
count++;
stepCount.text = "步数:"+count;//文本内容的显示
//如果有两张牌了,则不可再点击,进入协同程序
if (FaceCards.Count == 2)
{
canPlayerClick = false;
StartCoroutine(JugdeTwoCards());
}
}
}
IEnumerator JugdeTwoCards()
{
//获取到两张卡牌对象
Card card1 = FaceCards[0];
Card card2 = FaceCards[1];
//对ID进行比对
if (card1.ID == card2.ID)
{
yield return new WaitForSeconds(0.8f);
card1.SetSuccess();
card2.SetSuccess();
curCardCouples++;
if (curCardCouples == winCardCouples)
{
winPanel.SetActive(true);
}
}
else
{
//配对失败,停1.5f,然后两张都翻过去
yield return new WaitForSeconds(1.5f);
card1.SetRecover();
card2.SetRecover();
}
FaceCards = new List<Card>();
canPlayerClick = true;
}
public void Retry()
{
SceneManager.LoadScene(0);//重新加载场景
}
}
最后赋值一下
为button按钮添加点击事件(即重新开始按钮)
(过程到这里就结束了,如果没什么问题的话就已经完成了,因为我是做完才想起来写的,不是一开始就一步步记录,所以如果有遗漏的地方给我说,我会补上。)
四、修改格子数量
五、修改限制步数
这是一篇关于如何使用Unity3D开发记忆翻牌小游戏的详细教程。文章包含了游戏的完整制作过程,包括Unity版本、项目结构、代码实现等,并配有详细的图文说明。
热门推荐
三亚自驾必打卡!凤凰岭&鹿回头绝美风光
冬季自驾三亚,阿平带你玩转最美线路!
三亚必打卡:这10个景点你去过几个?
三亚自驾游:从海滩到雨林的探险之旅
600多岁“高龄”风姿不减 被这样的嘉峪关长城惊艳到了
首都师范大学与弗林德斯大学教育硕士学历项目详解
汽车后备箱必备十大应急物品,关键时刻能救命
寒潮雨雪来袭,新能源车主春运返乡安全出行全攻略!
一文搞懂什么是敏感数据泄露应急响应
张兰汪小菲被封号后续:张兰疑提前得知,转投别的平台直播
《說文解字》里的“導”字:从甲骨到楷书的演变
书法艺术中的“導”字:从甲骨文到硬笔书法的演变
三亚自驾游必备小技巧:让你一路畅通无阻!
三亚自驾游:亚龙湾到大东海的完美一日游攻略
中山云预约:高效办理身份证换领!
乳酶生片的作用与功效
网络负面舆情应对处置方案
红宝石鱼是什么鱼?
如何守护你的“生命腺”?预防甲状腺疾病,做好这7点
认识甲状腺疾病,请注意这七大问题
甲状腺的检查方法包括
冬至吃饺子的来历
冬至吃饺子的传统意义:温暖、团圆与祝福的文化传承
二十四节气系列小知识——冬至
除夕为什么要吃年夜饭?这顿饭背后的文化意义
秋冬健走,让你远离感冒!
步行:膝关节炎患者的理想运动选择
你的走路姿势可能伤膝盖!
中山市身份证换领攻略:三种方式任你选,轻松搞定换证烦恼
74岁刘晓庆上《一路繁花》,活力四射引热议!