记忆翻牌游戏——使用unity完成的2D游戏

目录

前言

游戏循环基本原理

常见游戏事件

即时模式GUI(IMGUI)

Entity-Component-System (ECS)概念

Model-View-Controller (MVC)概念

游戏概述

具体的游戏实现

模型部分(Model)

初始化model

初始化各种参数以及Table和List

视图部分(View)

控制部分(Controller)

判断是否将两张卡牌消去的主要逻辑实现

查找元素的个数以及返回所在位置

判断游戏是否结束

ECS(Entity Component System)的应用

结语

代码汇总


前言

在这一篇博客中,我将介绍如何使用unity以及Entity-Component-System (ECS)和Model-View-Controller (MVC)概念来制作一个简单的2D游戏——记忆翻牌游戏。在这一个过程中,我们将会了解游戏循环的基本原理,掌握常见游戏事件的使用及其执行顺序,学会使用unity的简单操作与编程,掌握游戏世界的基本概念。同时还对ECS以及MVC概念有一定的深入了解。

游戏循环基本原理

游戏循环是指游戏引擎在每一帧中执行的一系列步骤,以更新游戏状态并呈现画面。下面是Unity游戏循环的基本原理:

1. 初始化阶段(Initialization Phase):
    游戏引擎初始化:创建游戏窗口、图形设备的初始化等。
    场景加载:加载游戏场景、资源等。

2. 输入处理阶段(Input Phase):
    处理输入:监听玩家的输入,例如键盘、鼠标、触摸屏等。
    更新输入状态:根据输入更新游戏中的相应状态,例如控制角色移动。

3. 更新阶段(Update Phase):
    更新游戏状态:执行游戏逻辑、物理模拟、碰撞检测等。
    更新游戏对象:更新游戏中的各个对象的状态,例如移动、旋转、动画等。
    处理游戏事件:触发和处理游戏中的事件,例如触发特定条件下的事件回调。

4. 渲染阶段(Render Phase):
    准备渲染:设置渲染目标、清除缓冲区等准备工作。
    渲染场景:将游戏对象的可视化表现绘制到屏幕上,包括几何形状、材质、光照等。
    后期处理:应用各种后期效果,例如颜色校正、模糊、阴影等。
    呈现画面:将渲染结果显示在屏幕上,完成一帧的渲染。

5. 循环重复:
    上述步骤会在每一帧中依次执行,形成游戏循环,不断更新游戏状态和渲染画面。

常见游戏事件

当了解了游戏循环的基本原理后,我们可以探讨一些常见的游戏事件以及它们的执行顺序。以下是一些常见的游戏事件及其执行顺序的概述:

1. Start(开始)事件:
    在游戏对象被激活或场景加载完成后触发。
    用于初始化游戏对象的状态、设置初始数值、获取引用等。
    只会在游戏对象的生命周期中执行一次。

2. Update(更新)事件:
    在每一帧的更新阶段执行。
    用于处理游戏逻辑、输入响应、移动、旋转等实时更新的操作。
    执行顺序从场景中的每个激活的游戏对象开始,按照它们在场景中的顺序依次执行。

3. FixedUpdate(固定更新)事件:
    在每一帧的物理更新阶段执行。
    用于处理物理模拟、碰撞检测等与物理相关的操作。
    时间间隔固定,不受帧率的影响,通常每秒执行几次(例如默认每秒执行 50 次)。

4. LateUpdate(延迟更新)事件:
    在 Update 事件之后执行。
    用于处理在 Update 事件中可能会影响到其他对象的操作。
    例如相机跟随、动画更新等需要在其他对象更新完毕后再执行的操作。

5. OnCollisionEnter(碰撞进入)事件:
    在游戏对象与其他对象发生碰撞时触发。
    用于处理碰撞事件的逻辑,例如触发游戏效果、播放音效等。

6. OnTriggerEnter(触发器进入)事件:
    在游戏对象进入触发器时触发。
    用于处理触发器事件的逻辑,例如触发任务、切换场景等。

7. OnGUI(绘制GUI)事件:
    在渲染阶段之后执行。
    用于绘制游戏界面、UI 元素等。

需要注意的是,不同的游戏事件在执行顺序上可能会有差异,具体取决于事件的类型和注册方式。例如,MonoBehaviour 中的事件会按照脚本的顺序进行执行,而物理事件则与物理引擎的更新步骤相关联。

即时模式GUI(IMGUI)

即时模式 GUI(IMGUI)是 Unity 引擎提供的一种简单而直接的图形用户界面(GUI)系统。IMGUI 允许你在游戏循环的 OnGUI 事件中直接编写代码来创建和更新用户界面元素。

IMGUI 是基于立即绘制的概念,每当 OnGUI 事件被触发时,GUI 元素将被立即绘制到屏幕上。IMGUI 使用一系列 GUI 函数来创建不同类型的控件,例如按钮、文本框、滑块等。你可以通过调用这些函数来设置控件的属性、处理用户输入和响应事件。

以下是使用 IMGUI 的基本示例:

using UnityEngine;

public class MyGUI : MonoBehaviour
{
    private string playerName = "Player";
    private int score = 0;

    private void OnGUI()
    {
        // 创建一个标签显示玩家名称和分数
        GUI.Label(new Rect(10, 10, 200, 20), "Player Name: " + playerName);
        GUI.Label(new Rect(10, 30, 200, 20), "Score: " + score);

        // 创建一个按钮,点击后增加分数
        if (GUI.Button(new Rect(10, 60, 80, 20), "Add Score"))
        {
            score += 10;
        }

        // 创建一个文本框,用于输入玩家名称
        playerName = GUI.TextField(new Rect(10, 90, 120, 20), playerName);
    }
}

需要注意的是,IMGUI 是一种立即绘制的方式,每一帧都会重新绘制所有的 GUI 元素,这可能会对性能产生一定影响。因此,对于复杂的 GUI 界面或需要频繁更新的情况,Unity 推荐使用新的 UI 系统(例如 Canvas 和 RectTransform)来构建用户界面。

Entity-Component-System (ECS)概念

ECS(Entity Component System)是一种用于构建游戏和应用程序的软件架构模式。它的核心思想是将游戏对象(Entities)拆分为组件(Co

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值