【unity3D】unity记忆翻牌小游戏教程(简单详细)

这篇具有很好参考价值的文章主要介绍了【unity3D】unity记忆翻牌小游戏教程(简单详细)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

游戏开发的学习记录

项目:记忆翻牌小游戏

unity版本:unity2020.3.30f1c1

(最近在做得游戏里想加一个类似于记忆翻牌小游戏得部分,然后在网上收集了资料学习了一下,学会后写下这份制作记录,希望可以帮到你~)

📜一位大佬的博客,写的很详细:【Unity3D游戏教程】记忆翻牌游戏

(大家可以先看大佬这篇,我写这篇主要补充一些修改。比如想改变格子数量,格子的大小位置,想添加结束后的显示面板等)

一、游戏内容说明

  1. 两两翻牌,一样则标记成功,不一样,两个都恢复原样。
  2. 步数记数,可以规定步数,在规定步数内全发出游戏成功,没全翻出则游戏失败。
  3. 游戏成功和游戏失败都弹出相应的面板。

二、游戏最终成品

开始时:
【unity3D】unity记忆翻牌小游戏教程(简单详细)
游戏中:
【unity3D】unity记忆翻牌小游戏教程(简单详细)
挑战成功和挑战结束:
【unity3D】unity记忆翻牌小游戏教程(简单详细)
(成功会弹出成功面板的,我忘了截图,脑子也不想再玩一遍,就不放图了)


(然后,接下来是教程部分了,跟着一步步做,就能成)

三、游戏制作过程(图文)

  1. 新建一个背景图,一个用来放翻牌的面板,一个显示步数的文本
    【unity3D】unity记忆翻牌小游戏教程(简单详细)
  2. 给panel添加上Grid Layout Group组件和Content Size Fitter组件。然后在panel下面新建一个image,然后根据你自己需要的数量进行复制。 我这里是弄了30个格子。(Content Size Fitter组件是对panel的大小进行约束。Grid Layout Group组件是对panel下面的子物体进行排列,大家可以根据需求调整数值。)
    【unity3D】unity记忆翻牌小游戏教程(简单详细)

调节各属性的图示:
【unity3D】unity记忆翻牌小游戏教程(简单详细)

  1. 将刚刚为了查看布局新建的很多image删除,只留下一个,改名为CardPre,为其添加button组件,然后将Transition的属性设置为none。然后新建一个Card脚本并挂载上去。然后制成预制体,然后将它也删除,一会儿会自己生成。
    【unity3D】unity记忆翻牌小游戏教程(简单详细)
    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;
    }
}
  1. 新建一个成功面板和失败面板
    【unity3D】unity记忆翻牌小游戏教程(简单详细)

【unity3D】unity记忆翻牌小游戏教程(简单详细)
【unity3D】unity记忆翻牌小游戏教程(简单详细)

  1. 新建一个空物体,新建一个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);//重新加载场景
    }
}
  1. 最后赋值一下
    【unity3D】unity记忆翻牌小游戏教程(简单详细)
  2. 为button按钮添加点击事件(即重新开始按钮)
    【unity3D】unity记忆翻牌小游戏教程(简单详细)

(过程到这里就结束了,如果没什么问题的话就已经完成了,因为我是做完才想起来写的,不是一开始就一步步记录,所以如果有遗漏的地方给我说,我会补上。)


四、修改格子数量

【unity3D】unity记忆翻牌小游戏教程(简单详细)
【unity3D】unity记忆翻牌小游戏教程(简单详细)


五、修改限制步数

【unity3D】unity记忆翻牌小游戏教程(简单详细)


📜有一段时间没写了,如果这篇哪里写的不好或不清楚的,欢迎在评论区留言,我会修改的。希望这篇记录可以帮到你~
💦更多内容请前往主页置顶或点击链接直达:【unity3D】游戏开发专栏的目录文章来源地址https://www.toymoban.com/news/detail-468224.html

到了这里,关于【unity3D】unity记忆翻牌小游戏教程(简单详细)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity3D教程:2D游戏技能特效

    在我们的2D图形游戏中不可缺少大量的光影、技能特效,像Diablo II中的魔法效果的实现,幸好我们拥有强大的CPU来为我们实现Alpha混合与色彩饱和混合,接下来让我们来讨论一下如何用这些方法来实现我们游戏中所需要的技能特效。     一、Alpha混合特效     Alpha混合可以让我

    2024年02月01日
    浏览(61)
  • Unity读书系列《Unity3D游戏开发》——脚本(一)

    脚本在Unity的重要程度不用多说,她是大部分软件的核心组件。 我们将在此篇文章学习脚本模版及其拓展、脚本的生命周期、脚本的执行顺序、脚本序列化,下一篇为脚本编译与调试。 如下图我们可以在Project视图右键进行脚本创建,除了C#脚本,还有两类脚本;Testing用来做

    2024年04月28日
    浏览(86)
  • UNITY3D回合制游戏开发教程案例

    UNITY3D实现回合制游戏 ,类似梦幻西游,口袋妖怪,阴阳师。 先上效果 UNITY3D 回合制游戏案例源码开发教程 普通攻击 AOE技能 游戏概述 回合制游戏是一种策略游戏,玩家需要在自己的回合内进行决策,然后等待对手的回合。游戏通常包括角色扮演、卡牌、战略等元素,玩家需

    2024年02月09日
    浏览(68)
  • Unity读书系列《Unity3D游戏开发》——基础知识

    本篇对应标题书籍的第一章基础知识,也就是unity的基本常识和工作流的说明。 Unity目前用于创建2D和3D游戏、模拟应用程序、可视化体验以及其他虚拟现实(VR)和增强现实(AR)应用,游戏工业两开花。 Unity初版是在2005年发布的,开始时用unity3.X、4.X这样的名称进行版本更新

    2024年01月18日
    浏览(89)
  • 使用Unity3D制作2D游戏的重点做法

    官网上有提供一个 2D游戏的教学范例 ,这个游戏只不过把镜头摆放在横向位置跟随角色移动,游戏内物件运动时固定一个轴不动,使他像横轴式的2D游戏来玩,本质上其实还是个3D游戏,所以如果没有3D建模的话不就没办法做2D游戏了?其实这些并没有定论,就看制作者如何运

    2024年02月11日
    浏览(65)
  • 以unity3d为例解读:游戏数据加密

    目录 前言 1、Virbox 一、Virbox 是怎么做的? 1、如何对程序进行保护? 2、如何对资源进行保护? 3、使用加密工具前后比较 二、Virbox 保护方案特点 l 更安全 l 更全面 l 更简单 2、DES和RSA加密算法 一、DES加密算法 二、RSA加密算法 RSA加密算法的基本流程如下: 网络游戏数据文

    2024年02月02日
    浏览(81)
  • 【Unity3D】如何用使用Unity实现退出游戏的功能

    1、使用Unity编译器时: 2、打包后: 很多时候,我们都知道Application.Quit()代码,但是我们在Unity编译器调试的时候发现即使挂上了这个代码的组件或物体都无法退出编译,因为该代码只在打包后可以实现退出功能。 所以我们可以把两个实现代码同时写入脚本,这样既可以在编

    2024年02月11日
    浏览(79)
  • Unity3D项目之游戏场景小地图制作

    创建一个场景资源,可在asset store资源商店下载,选择心仪场景。 链接:https://assetstore.unity.com/?locale=zh-CN 添加一个对象GameObject,命名为player,子物体包括:主摄像机,角色,后面步骤会添加一个plane。 添加一个地图摄像机,命名为MapCamera。修改属性projection为OrthoGraphic;Size为

    2024年02月11日
    浏览(79)
  • Unity3D PVP游戏位置同步算法优化详解

    在Unity3D中,PVP(Player versus Player)游戏的位置同步是一项重要的技术,它决定了游戏中玩家之间的互动体验。本文将详细介绍Unity3D PVP游戏位置同步算法的优化方法,并给出相应的技术详解和代码实现。 对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础

    2024年01月16日
    浏览(63)
  • 【Unity3D游戏魔坦之争】游戏结束流程封装实现【七】

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unityUI专题篇 🅰️ 😶‍🌫️:步骤实现 1.坐标三个转化 2.GUI的原点和屏幕的原点 3.结构体的特点回顾——涉及Rect_结构体类型 4.血条的

    2024年02月11日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包