- 博客(8)
- 收藏
- 关注
原创 C++中嵌入C#作脚本引擎(一)
然后,对于所有C++中的Component,我们都在C#定义对应的类型。当C++和C#交互时传输时,如果数据类型不是基础类型(整型,浮点型等),而是C#中的托管类型(如string)或者自定义类型时,涉及到数据类型在C++和C#中的内存排布不同的情况时,需要进行数据的封送(Marshalling)。存储,简单起见,键类型这里选用ECS系统中entity本身的id,但其实是有问题的,更好的办法是给每个entity添加一个通用唯一标识符(UUID),在序列化时记录下来,这样才能将挂载的脚本信息保存在场景中。
2025-09-26 23:08:40
703
原创 C++中嵌入C#作脚本引擎(二)
文章探讨了在C++引擎中嵌入C#作为脚本引擎的实现方案。采用双Mono Domain架构,分别维护编辑和运行状态,通过序列化实现数据同步,更接近Unity的灵活控制方式。文章详细介绍了包含ScriptDomain、ScriptClass、ScriptInstance等核心类的设计实现,重点阐述了通过反射信息缓存提升访问效率、支持编辑/运行模式切换等关键技术点。
2025-09-26 23:06:36
691
原创 C++反射
在游戏引擎中,很多常用的功能需要用到反射系统。例如在Unity的Inspector面板中,可以直观地看到每个Component的属性,并且在编辑器中实时修改;又比如在保存和加载游戏场景时,需要用到对游戏对象的序列化与反序列化。保存时,通过反射将各组件的属性转化成文本数据存储到json,yml或toml等文件中;加载时,解析文本文件并由反射系统创建游戏物体。)是程序在运行时检查和修改自身结构和行为的能力,C++本身不支持反射,虽说有C++26的静态反射提案,但是离主流编译器支持还早。
2025-09-04 22:34:00
987
原创 在Unity中实现简化的光线追踪
本文介绍了在Unity中实现简化版光线追踪的方法。通过Unity Shader编写光线追踪核心逻辑,利用OnRenderImage函数将自定义着色器应用于相机渲染。文章详细讲解了光线与球体求交的数学原理和代码实现,包括射线参数方程求解、蒙特卡洛积分应用等关键步骤。虽然该实现经过简化(仅使用顺序表存储球体数据,未采用BVH等加速结构),但完整展示了路径追踪的基本原理。
2025-07-17 16:16:53
1815
原创 C++中嵌入C#作脚本引擎(一)
本文介绍了在C++游戏引擎中嵌入C#脚本系统的实现方法。通过Mono这一跨平台.NET运行时,可以实现C++与C#的互操作,将引擎底层逻辑与Gameplay逻辑分离。
2025-07-02 22:24:44
1754
原创 ECS的两种主流实现:基于SparseSet和基于Archetype
ECS架构的两种主流实现方式对比:基于SparseSet的方案通过稀疏集数据结构高效管理组件,利用密集数组和稀疏数组实现O(1)时间复杂度的查询和遍历,同时采用分页技术优化内存;而基于Archetype的方案将组件组合分类存储,在内存中连续排列,适合多组件查询场景。两者都遵循面向数据编程(DOP)原则,通过紧密存储数据、顺序访问和批量内存操作提升性能。Unity和Unreal分别采用Archetype方案(DOTS/Mass),而EnTT等框架则选择SparseSet实现,各具优势。
2025-06-24 22:43:00
763
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1