【游戲引擎之路】登神長階(十八):3天制作Galgame引擎《Galplayer》——無敵之道心

游戲引擎開發記錄:

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…