Godot开发框架探索#2

news/2025/2/8 11:27:38 标签: godot, 游戏引擎

前言

        距离上次发文又又又隔了很长一段时间。主要原因还是因为思绪在徘徊,最近纠结的点有以下几个:1.渴求一个稳定的Godot开发框架;2.要不要使用更轻量的开发框架,或者直接写引擎;

3.对自己想做的游戏品类拿不定主意。

        先说第一个,出于个人强迫症要挟,开发时希望能有一个规范的蓝本可以按部就班,这样做起来才会安心。但是现在觉得游戏开发没有什么定式,更不应该按部就班;第二点,尝试了很多遍其他轻量级开发框架后,比如FNA,甚至直接SDL写起,发现非常折磨,更别说写引擎;加上第三点,我认为每个游戏开发者能找到最适合自己的游戏品类最好不过,而个人自研引擎最好按照特定的游戏品类设计,否则很难找出与市面上现存的通用引擎相比的优势,这样一来反而浪费精力。在几番周转后又又又回到了Godot。

        上面说的跟这篇文章谈论的内容其实一点关系没有。这里我将分享最近尝试实现的一些关于Godot开发的想法,它们一部分已经被我整理成了Godot插件:

MOWEIII/GoDogKit: Classes Library used for Godot C#.https://github.com/MOWEIII/GoDogKit        感兴趣的可以看看,虽然目前不太完善,我稍后会解释为什么。

又是全局?

        我设计全局类的初衷其实只是为了简化开发速度,比如有一个AudioStream,它作为一种资源类型,需要相关节点才能作用,也就是AudioStreamPlayer,所以我就有了这种想法:既然这种资源很大概率只会用于对应的某种节点,那么可不可以简化创建节点到赋值资源这个过程。虽然这个过程确实是非常简单,但是在多次实践中,发掘零散的节点管理同样也会引发一些问题,除了这里的音频之外,还有一个重灾区就是输入,如果只是简单地在每个节点的输入处理函数中编写输入逻辑,那么很容易造成难以发现的混乱,比如需要同时处理UI输入逻辑和玩家移动逻辑的情况,如果游戏暂停,玩家移动也暂停,但因为节点的层次结构问题,UI没有被暂停,所以需要对处理输入的节点更加关注。这样一来,全局输入节点似乎是好的选择,不过我也还在思考怎么样实现。

场景管理

        Godot有些东西藏得确实隐晦,文档中也说不了那么详细,又或许是我理解有误,场景切换就是一个小坑。那几个Godot的场景切换API其实都是针对场景树的“当前场景CurrentScene”而言的,换句话说所谓的切换场景其实只是把当前场景释放掉,然后添加新的那个场景,乍一看没什么问题,但是一旦把节点置于那个“当前场景”之外,切换时就不会释放了。

        因为使用Unity的习惯,总觉得切换场景是非常干净利落的,可以很好释放资源。但是在Godot中仅仅只是释放某个特殊一点的节点,而非整个场景树。这就造成了一些可能的小问题,比如什么不小心把一些节点添加到场景树根目录,然后切换场景后发现它们还在。

        所以也许是我误会了Godot的场景管理,因为节点这一设计,导致不能简单粗暴地直接给游戏“翻个面”,不过我还是把翻个面的功能加上了,其实就是切换场景时把所有场景树的子节点都释放掉,然后再加载新的场景,除了一些设计上作为“全局”的节点之外。

结语

        其实好像也没有多少好说的,本来以为能多编一些,但是想说的都在源码里了。那个开源项目后面大概率会被归档,因为它的定位不太清楚,我打算等有想法了做一个更框架一点的框架,把功能细化优化。这里更多地应该是收拾收拾心路历程。

        其实优柔寡断真的什么都做不了,每个引擎或框架都有自己的优缺点,而且游戏开发重点在人而非工具,与其纠结用哪个工具不如纠结游戏的玩法。


http://www.niftyadmin.cn/n/5844803.html

相关文章

机试题——最佳检测序列

题目描述 有一家云存储服务提供商,他们家的核心产品是一个可扩展的分布式存储系统。他们的客户使用他们的服务来存储和管理各种数据,包括文档、图片、视频等。由于客户对数据的可靠性和可用性要求非常高,他们需要提供高可用性的存储服务&…

Mybatis之常用动态Sql语句

数据库结构、实体类 public class Youth {private Integer id;private String username;private Date birthday;private Character sex;private String address;private Integer age;public Youth(Integer id, String username, Date birthday, Character sex, String address)…

拥抱开源,助力创新:IBM永久免费云服务器助力开源项目腾飞

近年来,开源项目蓬勃发展,为全球科技进步做出了巨大贡献。然而,服务器成本高昂常常成为开源项目的巨大障碍。许多优秀的项目因缺乏资源而难以持续发展,甚至夭折。令人振奋的是,IBM云计算平台推出了一项重磅活动&#x…

2025年React前端最新面试题整理(记录2025.2月面试合集)

以下是一些2025年 React 前端面试中常见的问题,涵盖了基础知识、进阶概念以及实际应用: 基础知识 什么是 React?它的核心理念是什么?解释组件的概念,以及函数组件和类组件的区别。什么是 JSX?它有什么优点?如何在 React 中管理状态?什么是 props?它与 state 有何不同…

MySQL数据库索引视图练习

一.练习目标 二.实现目标 (1)新建并使用数据库(mydb15_indexstu) (2)新建表(Student,Course,SC) Strudent: Course: SC: (3)处理表 1.修改Student表中年龄&#x…

Unity3D开发之2019.4.5f1版本IPointerClickHandler Bug

实际代码测试ui物体挂载的脚本里: 如果实现IPointerDownHandler和IPointerClickHandler接口,则会触发OnPointerClick和OnPointerDown函数调用。如果只实现IPointerClickHandler接口,则不会触发OnPointerClick函数调用。如果只实现IPointerDo…

ArcGIS技术与土地利用分析全流程实践----从数据管理到建模预测

土地资源对人类至关重要,土地是人类赖以生存和发展的物质基础,是一切生产和一起存在的源泉。利用现代化的技术手段及时、准确地获取土地利用现状,以及充分认识土地利用和土地覆盖变化规律,能极大地提高制定土地利用规划的科学性和…

AUTOSAR汽车电子嵌入式编程精讲300篇-基于FPGA的CAN FD汽车总线数据交互系统设计

目录 前言 汽车总线以及发展趋势 汽车总线技术 汽车总线发展趋势 CAN FD总线国内外研究现状 2 系统方案及CAN FD协议分析 2.1系统控制方案设计 2.2 CAN FD总线帧结构分析 2.2.1数据帧分析 2.2.2远程帧分析 2.2.3过载帧分析 2.2.4错误帧分析 2.2.5帧间隔分析 2.3位…