IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity3D学习—牧师与魔鬼—MVC模式和ECS架构应用 -> 正文阅读

[游戏开发]Unity3D学习—牧师与魔鬼—MVC模式和ECS架构应用

需求

Priests and Devils

Priests and Devils is a puzzle game in which you will help the Priests and Devils to cross the river within the time limit. There are 3 priests and 3 devils at one side of the river. They all want to get to the other side of this river, but there is only one boat and this boat can only carry two persons each time. And there must be one person steering the boat from one side to the other side. In the flash game, you can click on them to move them and click the go button to move the boat to the other direction. If the priests are out numbered by the devils on either side of the river, they get killed and the game is over. You can try it in many > ways. Keep all priests alive! Good luck!

类的设计

类图
具体代码请参考下面仓库地址。

ECS架构

为什么要做的这么复杂呢,试想,如果不采用这种模式,思考如何解决以下问题:

  1. 点击牧师后,船怎么知道是谁要上船?
  2. 怎么判断牧师在船上还是在岸上
  3. 怎么判断点击的牧师在左岸还是右岸?

说白了ECS架构就是解决这种游戏对象实例过多而造成对象之间通信复杂化,耦合变高,维护困难。对象承受了过多不该承受的职责。我们的目标就是把这些职责分离开:Entity(实体),Component(组件),System(系统)。其核心思想就是组合优于继承

其实Unity本身就是遵循这种架构的,已经帮我们把整体的框架都搭好了,比如每次创建新对象的时候都默认给你创建了Tranfrom,render等组件。

Entity对应的就是实际的GameObject,就是实实在在被放置在场景中的物体,船,牧师,魔鬼,岸 。

Component就是运动组件Move和鼠标事件处理组件ClickGUI等,保证相关的任务只交给对应的组件去处理,上层系统只需要知道处理的结果是什么,不需要关注过程和其中涉及到的数据,这样就保证了高内聚性。

System对应各种各样的牧师控制器,魔鬼控制器,船控制器,他们拥有关于某个实体的数据,通过组件来实现各种各样的功能(运动,鼠标监听),控制实体的生命流程。

相关链接

  • 仓库地址: https://gitee.com/liht29/unity3d/tree/master/hw2_PastorAndDemon
  • 项目演示:https://www.bilibili.com/video/BV1JQ4y1B7YA/

Unity编程

多文件编程时如何编写类?

使用命名空间

在牧师魔鬼游戏中,需要设计较多的类,全部混在一起会相当混乱,我们可以通过命名空间将不同的类联系起来。

文件目录

运行时报错

初始化
the object you want to instantiate is null.
查阅资料是目录结构的问题,Resources.Load默认是在Assets下的Resouces目录下查找相关文件的,所以将Prefab文件移动到此即可使用Prefabs/boat来读取模型

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-10-11 17:50:06  更:2021-10-11 17:50:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 2:33:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码