游戏引擎开发记录:

2024年 5月20日-6月4日:攻克2D物理引擎。
2024年 6月4日-6月13日:攻克《3D数学基础》。
2024年 6月13日-6月20日:攻克《3D图形教程》。
2024年 6月21日-6月22日:攻克《Raycasting游戏教程》。
2024年 6月23日-7月1日:攻克《Windows游戏编程大师技巧》。
2024年 7月2日-7月6日:攻克《雅达利2600汇编游戏开发》。
2024年 7月7日-7月11日:攻克《x86/x64汇编语言》。
2024年 7月11日-7月22日:学习《3D游戏编程大师技巧》(阶段性)。
2024年 7月14日-7月18日:学习《游戏引擎架构》(完成)。
2024年 7月23日-7月30日:攻克Python语言学习。
2024年 7月31日-8月5日:攻克《3D游戏编程大师技巧》。
2024年 9月10日-9月20日:攻克游戏动画绑定
2024年 10月27日-10月31日:攻克《C++大师教程》
2024年 10月21日-11月02日:攻克《DirectX11教程》
2024年 11月02日-11月06日:攻克《CMake教程》
2024年 11月06日-11月10日:攻克《Vulkan教程》
2024年 11月11日-11月13日:攻克《OpenGL教程》
2024年 11月14日-11月29日:攻克《DirectX12龙书》
2024年 11月29日-2025年1月16日:《心火引擎》基础渲染部分,UI,基础游戏框架
2025年 1月16日-2月12日:载入骨骼部分。能够使蒙皮骨骼,动画载入。但有诸多问题。
2025年 2月19日-3月8日:制作了完整的小哪吒模型。自已的引擎,必须要自已建模适配。
2025年 3月10日-3月23日:制作骨骼动画,面对各种问题,各种崩溃,无法解决。
2025年 3月24日-3月27日:攻克《Lua教程》。把LUA加入引擎解决c++编译时间问题。
2025年 3月28日-4月11日:进行Maya的学习。掌握了Maya软件。
2025年 4月14日-4月19日:宁可碎此身,终不起此座!终于完美解决动画问题。
2025年 4月19日-5月30日:制作Humaniod动画。(史上最难)
2025年 5月31日-6月4日:三天制作一Galgame引擎《GalPlayer》,剩下2天进行完善。


(一)《Galplayer》——电影式Galgame引擎


这篇日志用来介绍端午节我在做的一件超级“丧心病狂”的事情:我用了3天就制作了一个可以运行的Galgame引擎。到第3天已经可以运行Galgame,加上2天进行功能的完善,总共开发的时间也只有5天。当然,每天的工作时间是拉满的。

从5月31到6月4日,总计用时5天,共计用时60小时(净工作时间,不是一天到晚的时间,中途吃饭都不计的)。

虽然不是正式发布,但是还是得介绍一下这个引擎的功能,以后这个引擎自然也会并入心火引擎之中。


(二)《Galplayer》引擎功能和特征:

1,本引擎的设计目标是在手机上玩GalGame,但支持所有平台。

2,能够对RPGmaker和吉里吉里等引擎的脚本进行读取解析,转化为引擎通用的xml文件。解析程序使用Python开发,用户可以自己定制解析任何格式的脚本。

3,游戏引擎采用电影模式。一个游戏的资源解包后,只需要将脚本放在Scene目录下,资源放在Assets目录下,便可作为一部电影进行播放。

4,游戏的播放本质上和吉里吉里引擎一样,根据脚本逐级播放。可以使用和GalGame一样的播放模式,拥有自动播放,Skip等基础功能。

5,【核心特征】:游戏能快速进行跳转,也就是说,能像电影的进度条一样拖动到任何地方进行播放!这是引擎的核心特征!引擎拥有容错机制,消除跳转脚本带来的各种不良状况,保证通顺的播放。

引擎所使用的工具链:

引擎编辑器:使用C#开发的WPF窗体应用

脚本解析器:使用Python开发,通过引擎编辑器调用,也可单独使用。

游戏引擎主体:使用Unity开发。因为很简单,但之后也会转到我自己的引擎里面。

(三)为什么要开发这个引擎?

事情是这样的,我五一节准备休息一下,然后找了我以前一直觉得好玩的一个小黄油准备玩一下。然后玩了之后大失所望,倒不是游戏有什么问题,而是这东西是Wolf做的Galgame,就是RPGMaker那一系列的东西。然后做为Galgame,连直接读档存档的功能都没有,而且需要推进剧情繁琐。最重要的是,连自动播放的功能都没有,完全要自已一个一个对话点。我现在工作任务这么重,休息时间就那么一点点,哪有时间搞这些啊。

然后我就有一个“丧心病狂”的想法,我反正只需要看H的剧情,那么我何不把这些提取出来,只需要播放剧情就行了。

然后我就制作了一个叫做“电影大师”的引擎。全名叫“游戏电影制作大师”(为什么取名和RPG Maker很像,因为就是用来替代它的!)

设计的理念很简单,把Galgame的脚本提取出来,把资源打包,然后直接通过引擎进行播放,我以前用吉里吉里做过游戏,所以知道Galgame的脚本是很简单的,只需要关注文字,声音,图片的播放和显示就行。

然后我五一就开始做这个引擎。


(四)游戏引擎开发日志


Day1:

我用WPF开发游戏编辑器。实现了最基础的文件管理器,能建立一个项目,然后增加删除文件等等。然后集合Python的功能,从C#里面调Python处理文件(C#搞这些小东西实在不行),我把Wolf里面的脚本提取出来,然后使用Python处理,变成我自已的XML格式,这样就能够为我的引擎所用。

 Day2:

上午的时候继续开发Python。完成了脚本的转化。基本上大部分功能都具备了。
差不多中午的时候开发引擎的主体,使用Unity进行开发。

然后主要是进行实验功能,我需要一个包就能够运行Galgame,不可能把资源装到Unity里面,所以我需要从Download里面读取资源。而不是使用Unity的Resources。这非常折腾人,因为我之前开发过Andriod的APP,所以知道Andriod里面读取文件非常坑爹,没想到Unity里面用Andriod更坑。

我好不容易想了办法能够读取图片和音频了。但是Andriod居然不让我读txt和xml这种文件(哪位大佬有办法,请指教一二?)。所以我想了一个“丧心病狂”的办法,把我的游戏的xml文件改名为gif,这样就能读取了。反正读的都是bytes。

这样,就完成了基础的准备工作。

Day3:

今天基本上完成了所有的必须工作。整个引擎能够跑起来了。

1、脚本的解析与运算。
2、SKIP和AUTO功能。
3、进度条拖动功能。

Day4:

今天在做命令行事件的项目,因为没有可以自动导出的东西,所以只要自已手动一个个做。里面用到一系列工具链,比如图片转文字,还用到了按键精灵。没这么多工具链真搞不定。

- 制作一个PictureManager,用来管理多种Slot的图片,之前用一个临时方案。
- 改进了Script的播放流程,使用一个PlayQueue来管理,支持Wait机制了。

Day5:

今天做一些收尾工作,基本上的功能都具备了。

- 收尾工作做好了,将文字和Play的逻辑分离,NoWait模式也加上了,现在Play的话基本上满足所有需求了。(DONE)
- 制作一个吉里吉里的项目。(DONE)
- 需要一个手动清图片的功能。避免脚本中Clear失效导致的图片白屏或黑屏。(DONE)
- 两个项目之间的切换能力(使用同种的Menu来管理即可,新建一个类)。(DONE)

Day6:

昨天去做游戏引擎去了,完成了Humaniod的控制。今天来继续做引擎。有两个主要任务:

1、研究Galgame的破解。有些Galgame的包解出来都是加密的文本,这个需要破解出来。有些大神都已经给出攻略了,但是我没有破解相关的知识,所以用不上。要想解很多其它好的Galgame,必须把这个学会。之前学的汇编,一直不知道什么地方用。这下有地方用了。

- 制作更完善打包工具。现在我已经能够把所有的文件打成ZIP包,然后从ZIP包中读取。以前都是散文件,管理起来不方便。尤其是复制粘贴要很多时间,而且手机上某名其妙多很多图片,这些系统也要去加载。

- 但是我发现用ZIP的话,不能并行访问,访问巨慢。平时看不出来,要不还是自已打一个包?

- 实在受不到ZIP的卡顿。直接自已打包。


(五)无敌道心

顺着上一个日志继续说。因为五月底成功开发了Humanoid动画,所以我感觉自己无敌了,在这个驱动之下,我感觉做什么都非常顺利,我之前就很想做一个Galgame引擎,我现在P站上还有一个很中二的签名:我要成为Galgame界的泰斗。

正是因为有这个“无敌道心”,才导致了我的6月份的“爆炸产出”。不过因为牙痛,到了7月份就悲剧了。这另外一篇再说。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91758.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91758.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/91758.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kotlin kmp 跨平台环境使用sqldelight

欢迎访问我的主页: https://heeheeaii.github.io/ 1. 项目结构 SQLDelightKMPDemo/ ├── shared/ │ ├── src/ │ │ ├── commonMain/kotlin/ │ │ ├── androidMain/kotlin/ │ │ ├── desktopMain/kotlin/ │ │ └── commonMain/sqldel…

机器学习【五】decision_making tree

决策树是一种通过树形结构进行数据分类或回归的直观算法,其核心是通过层级决策路径模拟规则推理。主要算法包括:ID3算法基于信息熵和信息增益选择划分属性;C4.5算法改进ID3,引入增益率和剪枝技术解决多值特征偏差;CART…

简单记录一下VSCode中的一些学习记

在刚开始学习VSCode时,相信大家都会好奇VSCode底部区域那几个不同的状态栏具体有什么作用(输出、调试控制台、终端、端口),貌似好像都是输出与代码相关的信息的?貌似代码运行结果既可以出现在输出中,也可以…

基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(二)

目录 二、Hive、SparkSQL、Impala 比较 1. SparkSQL 简介 2. Hive、SparkSQL、Impala 比较 (1)功能 (2)架构 (3)场景 3. Hive、SparkSQL、Impala 性能对比 (1)cloudera 公司…

C++:std::array vs 原生数组 vs std::vector

📌 C:std::array vs 原生数组 vs std::vector 引用: C/C 标准库 std::vector、std::array、原生静态数组 的区别有哪些? 深度剖析:std::vector 内存机制与 push_back 扩容策略 今天过去了 还有许许多个明天 能和大…

Hyper-V + Centos stream 9 搭建K8s集群(二)

一、安装自动补全主节点安装就可以yum install -y bash-completion echo source <(kubectl completion bash) >>~/.bashrc kubectl completion bash >/etc/bash_completion.d/kubectl二、安装Calico网络插件&#xff08;主节点&#xff09;下载文件wget https://ca…

VBA代码解决方案第二十七讲:禁用EXCEL工作簿右上角的关闭按钮

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程&#xff0c;目前已经是第三版修订了。这套教程定位于入门后的提高&#xff0c;在学习这套教程过程中&#xff0c;侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…

Spring AI 系列之三十一 - Spring AI Alibaba-基于Nacos的MCP

之前做个几个大模型的应用&#xff0c;都是使用Python语言&#xff0c;后来有一个项目使用了Java&#xff0c;并使用了Spring AI框架。随着Spring AI不断地完善&#xff0c;最近它发布了1.0正式版&#xff0c;意味着它已经能很好的作为企业级生产环境的使用。对于Java开发者来说…

sqli-labs:Less-12关卡详细解析

1. 思路&#x1f680; 本关的SQL语句为&#xff1a; $uname".$uname."; $passwd".$passwd."; $sql"SELECT username, password FROM users WHERE username($uname) and password($passwd) LIMIT 0,1";注入类型&#xff1a;字符串型&#xff0…

【SpringAI】8.通过json动态添加mcp服务

前言 官方示例的代码中&#xff0c;mcp一般是配置到yml中或者json文件中&#xff0c;使用自动装配的方式注入服务&#xff0c;这种方式不方便在程序启动后添加新的服务&#xff0c;这里参考cherry studio的方式动态添加mcp服务 1.确定方案 mcp服务的维护放到mysql业务数据库维…

【PDF + ZIP 合并器:把ZIP文件打包至PDF文件中】

B站链接 PDF ZIP 合并器&#xff1a;把ZIP文件打包至PDF文件中_哔哩哔哩_bilibiliz 加强作者的工具 https://wwgw.lanzn.com/i8h1C32k9bef 密码:30cv 新增c框架&#xff0c;加快运行速度

阿里云部署微调chatglm3

git Ifs install Git lfs 主要用于管理大型文件。在传统的Git仓库中&#xff0c;所有文件内容都会被完整记录在每一次提交中&#xff0c;这会导致仓库体积增大&#xff0c;克隆、拉取和推送操作变慢&#xff0c;甚至可能超出存储限额。Git LFS通过将大文件替换成文本指针&#…

Linux网络编程 ---五种IO模型

五种IO模型一、IO慢的原因二、五种IO模型三、如何设置非阻塞式IO&#xff1f;一、IO慢的原因 二、五种IO模型 阻塞式IO 非阻塞式IO 信号驱动IO 多路转接 异步IO 三、如何设置非阻塞式IO&#xff1f; &#xff08;一&#xff09;用法说明 &#xff08;二&#xff0…

Obsidian结合CI/CD实现自动发布

CI/CDQuickAddJS脚本bat脚本sh脚本实现自动发版Hugo文章 需求来源 每次手动执行Hugo的命令&#xff0c;手动把public文件夹上传到自己的服务器可以完成发版需求。 但是&#xff0c;作为一个内容创作者&#xff0c;我更希望的关注于自己的内容&#xff0c;而不是关注整个发版…

[硬件电路-141]:模拟电路 - 源电路,信号源与电源,能自己产生确定性波形的电路。

源电路&#xff08;Source Circuit&#xff09;是电子系统中为其他电路或负载提供特定信号或能量的基础电路模块&#xff0c;其核心功能是生成、调节或转换所需的物理量&#xff08;如电压、电流、波形、频率等&#xff09;。以下是源电路的详细解析&#xff1a;一、源电路的核…

Unity_数据持久化_PlayerPrefs基础

Unity数据持久化 一、数据持久化基础概念 1.1 什么是数据持久化 定义&#xff1a; 数据持久化就是将内存中的数据模型转换为存储模型&#xff0c;以及将存储模型转换为内存中的数据模型的统称。 通俗解释&#xff1a; 将游戏数据存储到硬盘&#xff0c;硬盘中数据读取到游戏中&…

什么是列存储(Columnar Storage)?深度解析其原理与应用场景

列存储的基本概念&#xff1a;颠覆传统的数据组织方式列存储&#xff08;Column Storage&#xff09;是一种革命性的数据库存储技术&#xff0c;它通过按列而非按行组织数据&#xff0c;从根本上改变了数据的物理存储结构。与传统行存储数据库不同&#xff0c;列式数据库将每一…

机器人抓取流程介绍与实现——机器人抓取系统基础系列(七)

机器人抓取系统基础系列文章目录 1. UR机械臂的ROS驱动安装官方教程详解——机器人抓取系统基础系列&#xff08;一&#xff09; 2. MoveIt控制机械臂的运动实现——机器人抓取系统基础系列&#xff08;二&#xff09; 3. 机器人&#xff08;机械臂&#xff09;的相机选型与安装…

【Qt】QObject::startTimer: Timers cannot be started from another thread

QTimer对象的 start 函数调用必须和创建QTimer对象是同一个线程。 #include "QtTimerTest.h" #include <QDebug>QtTimerTest::QtTimerTest(QWidget *parent): QMainWindow(parent),m_timer(nullptr),m_timerThread(nullptr), m_workingThread(nullptr) {ui.set…

社会治安满意度调查:为城市安全治理提供精准参考(满意度调查公司)

在社会治理不断深化的背景下&#xff0c;公众对社会治安的感知与评价已成为衡量城市治理水平的重要维度&#xff08;社会治安满意度调查&#xff09;&#xff08;公众满意度调查&#xff09;&#xff08;满意度调查&#xff09;。为全面掌握市民对治安状况的真实反馈&#xff0…