- 博客(91)
- 收藏
- 关注
原创 骑砍Ⅱ霸主MOD开发(28)-定制化ScriptComponentBehavior- MissionObject
Mission.MeleeHitCallback(近战攻击) & Mission.MissileHitCallback(远程武器攻击)1.继承MissionObject,覆写OnInit,OnPreInit,OnRemove等被重写过的方法。Mission.OnEntityHit(判断是否有MissionObject)MissionObject.OnHit(回调攻击方位,伤害,角度等信息)游戏中可被攻击的游戏实例,例如挡箭板,城门。2.实现自定义OnHit回调。
2025-04-03 15:11:49
83
原创 C#-使用VisualStudio创建C#工程
csproj文件可配置PropertyGroup(编译,平台等参数),ItemGroup(外部DLL引用)。csproj:VisualStudio项目配置文件,会根据csproj中配置加载外部依赖,调整编译环境。将C#依赖的外部库整体打包至一个文件夹即为发布,通过发布得到的exe不需依赖.NET运行时环境。通过csproj文件可实现控制台应用,窗体应用,Web应用等不同编译环境的工程创建。2.工具->选项->项目解决方案->生成并运行,调整日志输出级别。obj:存放编译流程中的中间文件和缓存文件。
2025-03-14 16:29:29
502
原创 C#-委托delegate
定义了输入和返回的delegate,例如Func<int, string>表示输入为int,输出为string。定义了输入的delegate,例如Action<int, string>表示输入为int,string。C#中委托即C++中函数指针,通过delegate关键字可声明一个代理.代理可像指针一样作为参数传递和调用.<2.Action(不具有返回值的委托)<1.Func(具有返回值的委托)<4.目标方法赋值代理变量。<1.声明一个代理类型。<5.代理变量传参&调用。
2025-03-14 15:45:18
293
原创 骑砍Ⅱ霸主MOD开发(27)-定制化GameEntity-MissionWeapon
游戏中近战武器,石头,油罐等在战场上等与人物Agent绑定的GameEntity即为MissionWeapon。当武器对应Item物品配置有多个WeaponComponent时,战场上按下X键可触发形态切换.战场上按下G键可将武器进行丢弃,丢弃后会在场景中生成SpawnedGameEntity游戏实例。武器的使用,挥舞,丢弃,切换形态均为定制化GameEntity实现。双手长枪与骑枪之间相互切换。2.物理碰撞检测结果处理。飞斧与单手斧之间相互切换。1.物理碰撞检测回调。
2025-03-09 15:15:09
67
原创 天芒传奇Ⅱ·前传-特殊武器
通过delegate关键字可声明一个代理.代理可像指针一样作为参数传递和调用.一.C#-委托delegate。C#中委托即C++中。C#-委托delegate。
2025-02-14 16:38:28
143
原创 天芒传奇Ⅱ·前传-天芒的使用
1.红色天芒碎片+天芒的魂魄·忠 = 召唤P51战斗机。<2.红色天芒碎片+天芒的魂魄·义 = 召唤89虎式坦克。<1.蓝色天芒碎片 + 天芒的魂魄·忠 = 变身巨人。<3.红色天芒碎片+天芒的魂魄·勇 = 召唤迫击炮。Ctrl+A/D:飞机纵向旋转。Ctrl/ALT:加速/减速。Shift:RTS视角瞄准。
2025-02-14 16:35:39
130
原创 天芒传奇Ⅱ·前传-天芒的任务
通关方法:3×3的奇异矩阵填充1-9数字使之横竖斜之和相等,变身巨人(长按Q键喷火技能)线索:左上角3×3的奇异矩阵好像封印着什么,案件的真相?线索:五个幻影旗帜构成了魔法幻影,守卫金龙的卫士正等待被召唤...通关方法:连接五个幻影旗帜为五角星,召唤友军进行对抗.通关方法:通过移动两个棋子将正立的金字塔变为倒立金字塔。线索:破解一线天的诅咒,找到逍遥岛藏匿的三处的宝藏。前往开封府与包拯对话完成任务。
2025-02-14 16:33:50
153
原创 骑砍Ⅱ霸主MOD开发(11)-可编程渲染管线Shader编程
由于GPU,GPU版本,硬件平台等因素影响,不同的环境下shader编译方式不同,故采用动态shader编译方式编译shader,而后将shader提交至GPU中。Shader缓存路径:C:\ProgramData\Mount and Blade II Bannerlord\Shaders。2.在Mod目录下生成Shaders文件夹,\MOD\Shaders\D3D11\sack文件(shader缓存文件)已经编译过的shader不会重复编译,故将编译好的shader缓存至本地文件中.
2025-01-18 03:25:46
553
原创 C#-使用StbSharp库读写图片
StbSharp是基于C++/Stb图形处理库封装的C#接口,支持多种格式PNG/JPG等图片的处理.创建一张500*500的高度图PNG图片。
2024-12-27 18:20:18
351
原创 骑砍2霸主MOD开发(26)-Mono脚本系统
点击确定后,RGL引擎根据Platform平台(Steam/EPIC)拉起WOTS应用主进程,完成MONO运行时环境创建,系统资源加载.RGL中实现的C++对象例如Agent,GameEntity,数组,链表经过映射后转变为C#中NativeObject.通过MonoPInvokeCallback注解,Mono会扫描这些注解映射的方法,完成C++接口的映射.RGL引擎完成运行时环境加载时产生的回调,例如C#实例的GC,创建,销毁.
2024-12-25 17:47:44
289
原创 C#-调用C++接口
C#应用程序在编译为可执行exe时将外部DLL装载至本应用中,例如在CSC编译指令中添加相关参数可实现DLL引用.C#应用程序在运行时通过调用kernel32.dll中LoadLibrary完成外部DLL的装载.C++中接口通过编译为DLL对外提供调用,C#需要将DLL加载至本应用才可实现C++接口调用.实现C++方法MYFunction,将接口编译为MyClass.dll。
2024-12-25 13:45:11
415
原创 骑砍2霸主MOD开发(25)-顶点动画
3.实现自定义顶点动画播放ScriptComponentBehavior(VertexAnimator)1.创建MorphAnimation对应静态资源morph_animation.tpac。1.创建MetaMesh顶点动画,生成静态顶点动画资源meta_mesh.tpac。2.获取MetaMesh(从静态资源中获取/从GameEntity中获取)2.Agent设置对应MorphAnimation。定制化顶点动画用于人物Agent的面部表情.
2024-11-24 20:24:21
128
原创 游戏引擎中LOD渲染技术
为了降低GPU渲染压力,根据摄像机距离模型距离将面数较高的模型替换为面数较低的模型.故通常引擎中MetaMesh是由一个或多个LOD模型构成.精简修改器-塌陷/反细分/平坦手段进行LOD模型制作。
2024-11-11 20:21:41
544
原创 游戏引擎中Static,Kinematic,Dynamic三种刚体属性
包括常用的RayCast检测,BoxCast检测,AABB包围盒检测。Dynamic:实际游戏中具有重力和速度的物体,飞石,钢球等。在每一帧刷新时进行Collider刷新。Static:实际游戏中不可能发生移动的房子,树木,建筑物等。Kinematic:实际游戏中奇特的物体,传送门,陷阱等, 每一帧刷新时进行Collider刷新。Kinematic-Dynamic 穿模,会产生引擎回调OnCollisionStart。Static-Kinematic 穿模,会产生引擎回调OnCollisionStart。
2024-10-28 08:22:45
614
原创 游戏引擎中ECS架构及内存布局
E:Entity-游戏世界中的人,房子等实际物体,这些物体可能由不同的MetaMesh,ParticleSys组成。4.创建对应Entity下的Component,人具备技能,人具备盔甲,人具备AI三种不同的Component。C:Component-组成实际物体的MetaMesh,ParticleSys,也可以是一个实际物体。S:System-游戏引擎,负责完成实际物体的初始化,内存管理,帧同步,线程同步等核心功能。2.创建GameSystem引擎回调接口,帧渲染回调,实例创建回调,物理检测回调等。
2024-10-21 08:54:19
633
原创 骑砍Ⅱ霸主MOD开发(24)-定制化GameEntity-Missile
游戏中弩箭/弓箭/飞石/炮弹等在场景中沿抛物线飞行实例GameEntity即为Missile.Missile的发射,飞行,物理碰撞等都是定制化GameEntity实现。Missile的飞行抛物线是二次曲线,Missile相对于发射点的X/Y轴偏移与角度关系如下。不同Missile碰撞后可能会出现爆炸(燃油罐),附着(弩矢),消失(落水)等。抛物线方程y = x/tan(α) + k * x^2/cos(α)^2。2.根据落地点相对发射点相对坐标(X,Y)和α确定常量k。<4.飞行时粒子系统(火箭,飞石)
2024-10-08 11:20:18
350
原创 骑砍2霸主MOD开发(23)-定制化GameEntity-Agent
根据require_left_hand_usage_root_set="hand_shield"和左手武器的item_usage共同确定当前骨骼动画。当前为no_weapon,状态,取item_usage_sets.xml中id="no_weapon"中动画。当前为no_weapon,状态,取item_usage_sets.xml中id="no_weapon"中动画。<3.根据Agent对应Monster获取实际骨骼动画(ModuleData/monster_usage_sets.xml)
2024-09-29 13:27:14
243
原创 骑砍2霸主MOD开发(22)-使用TRFExporter&Blender导出TRF文件
【代码】骑砍2霸主MOD开发(22)-使用TRFExporter&Blender导出TRF文件。
2024-09-11 04:03:41
356
原创 骑砍Ⅱ霸主MOD开发(21)-定制化AgentComponent- MissionMainAgentInteractionComponent
>Agent.HandleStartUsingAction //使用投石车。SpawnedItemEntity //捡起&丢弃已有的武器,捡起弩矢。UsableMachine //弩炮,投石车等武器使用。Agent //玩家上马&下马,与领主对话。通过玩家位置&摄像机位置发射射线,获取命中游戏实例,实现交互机制.->Agent.OnUse //上马&下马。<4.与可使用GameEntity交互:使用冲车,投石车,弩炮。<1.与Agent交互:上马/下马,与人对话等功能。
2024-08-28 08:34:38
241
原创 骑砍2霸主MOD开发(20)-系统资源Resource
预制Resource被存储至AssetPackage,Asset文件夹下的TPAC文件中.每一个Asset对应一个Resource,可以是mesh,material,physics_shape,texture.Asset=GUID(唯一标识)+ResourceName(名称)+ResourceData(mesh,texture数据)<2.动态Resource:随业务动态变化的网格,例如边界墙,毒圈,自定义轨道等Mesh.2.动态获取:Texture.CreateFromByteArray()
2024-08-15 09:50:54
397
原创 骑砍Ⅱ霸主MOD开发(19)-定制化Shader
modding-kit中导入decal_siege_tower贴花材质。<2.创建Decal-GameEntityComponent。<3.添加Decal贴花至GameEntity中。<1.创建Decal贴花material。<1.设置GameEntity轮廓。<2.激活GameEntity轮廓。
2024-08-15 09:31:09
340
原创 骑砍Ⅱ霸主MOD开发(18)-存档
在类上添加SaveableProperty注解,声明字段的saveID,例如要将学生Student的年龄Age和身高Height进行存储。构造GameData:GameData.CreateFrom(byte[][])通过将游戏中Party状态,坐标等字段进行序列化后保存至sav文件,即游戏存档。写入sav文件:SaveContext.save()
2024-08-08 17:14:44
795
原创 骑砍Ⅱ霸主MOD开发(17)-使用XSLT文件合并覆写XML文件
k</test> <test id = '78'>k</test>开发MOD:NativeTest/ModuleData/a.xml <test id = '12'>k</test> <test id = '78'>k
2024-07-27 11:02:41
668
原创 骑砍2霸主MOD开发(16)-FaceKey&BannerKey
2.ModuleData\lords.xml中Character对应的BodyProperties中的key属性替换,实现对应英雄的皮肤替换。
2024-07-24 23:47:48
1229
原创 骑砍2霸主MOD开发(15)-游戏AI系统
获取Formation所有Agent成员:Formation.Arrangement.GetAllUnits()
2024-07-24 22:57:18
516
原创 骑砍2霸主MOD开发(14)-多人联机模式开发环境搭建
Token文件路径:C:\Users\taohu\Documents\Mount and Blade II Bannerlord\Tokens。发起Http请求:HttpClient.PostAsync(string requestUri, HttpContent content)发起TCP连接请求:TcpSocket.Connect(string address, int port)UDP收包:UdpClient.receive()UDP发包:UdpClient.send()Port:专用服务器端口号。
2024-07-22 09:54:30
673
原创 骑砍战团MOD开发(33)-使用BrfExporter&Blender制作BRF文件
【代码】骑砍战团MOD开发(33)-使用BrfExporter&Blender制作BRF文件。
2024-07-19 07:45:46
490
原创 骑砍Ⅱ霸主MOD开发(13)-物理系统
2.2.2 远程武器Missile与其他GameEntity物理碰撞(弩矢,箭矢的附着,反弹)Agent.Monster:Agent血量,重量,骨骼特性参数(Ragdoll特性,Item绑骨)BodyFlag:定制化物理标识,static/dynamic/kinematic,梯子,双面墙等。根据RigidBody中物理参数计算实际物体物理碰撞反应参数,反弹距离,反弹高度等。根据BodyFlag处理碰撞反应,穿模,坐标同步,反弹等物理反应机制。自定义物理形体边界,根据相对坐标进行碰撞,位置同步等操作。
2024-06-18 00:18:59
570
原创 骑砍2霸主MOD开发(10)-游戏实例GameEntity
梯子,椅子,攻城云梯,战车,武器,人物等定义为GameEntity,一个GameEntity若干子GameEntiy或Component组成.例如攻城云梯的轮子,梯子,支架等都是GameEntity或Component组成.引擎在渲染每个GameEntity时,会在每一帧进行位置同步,物理碰撞检测,时序同步等,通过注册该ScriptComponentBehavior实现事件通知.例如物理碰撞事件,实例化事件,移除事件.物理形体通常由碰撞体,刚体组成,使得这个物体具有一定的物理属性。
2024-06-07 08:52:48
722
原创 骑砍2霸主MOD开发(9)-游戏大地图(MapScene)
Settlement类型由town,castle,castle_village,village,hideout五种类型组成,通过对GameEntity中添加tag实现类型的加载.大地图中军团(MobileParty)的移动速度,AI寻路,食物消耗等均和当前MobileParty所处地形有关,地形统一被定义为TerrainType,类型有森林,荒漠等.MapScene.Read("Main_map", ref sceneInitializationData, "") 装载Main_map大地图。
2024-05-30 09:07:49
1319
原创 使用DirectX Texture Tool处理DDS图片
目录:Microsoft DirectX SDK (June 2010)\Utilities\bin\x64。游戏贴图专用格式,区别于PNG,BMP等文件格式,DDS占用内存更小,加载速度更快。不同的DDS图片适用于不同的材质贴图,例如法贴和通道贴图使用的DX格式不同。纹理的不同LOD层级即为Mipmap,在制作纹理贴图时就需要生成.GPU渲染管线加载贴图时,类似于模型LOD技术,纹理也有LOD.texconv.exe:纹理贴图格式转化工具。DxTex.exe:纹理贴图的可视化工具。
2024-05-07 08:10:19
425
原创 骑砍2霸主MOD开发(8)-骨骼动画
1.系统资产TPAC文件中有两种类型的资源,骨骼动画skel_animation和动画切片anim_clip。针对不同骨架(人/动物/房子)等具有不同的动画切片,将每种骨架所具备的动画切片汇总为一个ActionSet。
2024-04-24 10:31:37
833
原创 骑砍2霸主MOD开发(7)-世界坐标系&局部坐标系&屏幕坐标系&Camera
MatrixFrame frame = Vec3 orign(坐标X,Y,Z) + Mat3 rotation(旋转角度X,Y,Z);绝对坐标获取:GameEntity.getGlobalFrame()设置相对坐标:GameEntity,setLocalFrame()相对坐标获取: GameEntity.getFrame()3.Frame获取沿X/Y/Z轴旋转角度。4.Frame设置沿X/Y/Z轴旋转角度。1.Frame沿X/Y/Z轴移动。2.Frame沿X/Y/Z轴旋转。2.相对坐标→绝对坐标。
2024-04-24 10:12:36
452
原创 骑砍2霸主MOD开发(6)-使用C#-Harmony修改本体游戏逻辑
2.实现Prefix,Postfix前置后置插桩,实现对本体代码的修改,例如游戏菜单的加载调用前插入一个对话框MsgBox。
2024-04-21 17:58:44
1243
原创 C#-使用Harmony重写Dll文件
通过C#运行时CIR环境中,通过动态反射创建目标类的代理类delegate,在原方法调用时调用delegate指定的方法.利用C#运行时Runtime的反射机制,动态加载dll中的方法,字段,属性,实现对DLL方法的重写和代码注入。通过反射创建目标类的代理,可实现对方法调用前,方法调用后,方法异常等进行拦截。2.调用实例方法&字段内置Setter/Getter方法。使用AccessTool访问类的私有/受保护的字段&方法。使用Traverse访问类的私有/受保护的字段&方法。入参类型: object。
2024-04-20 12:05:20
1722
1
原创 骑砍Ⅱ霸主MOD开发(5)-2D界面
2D界面 = GauntletLayer1(通用) + GauntletLayer2(GameMenu) + GauntletLayer3(Dialog)GauntletLayer(图层) = (Movie1 + ViewModel1) + (Movie2 + ViewModel2)Movie(HTML静态页面) = Widget1(下拉框控件) + Widget2(文本控件)与网页HTML相同,组成Movie的基本元素为控件Widget,例如文本框,下拉框,按钮等.
2024-04-19 16:26:17
792
原创 骑砍Ⅱ霸主MOD开发(4)-游戏场景Scene
scene.xscene<environment_properties/>:水平面(water_level),战争迷雾(fog_start_distance)terrain_shaders_header_data.bin:pbr_terrain.rs着色器所需数据。1.定制化GameEntity,通过flora.bin配置植被预制件数量,坐标.实现场景中森林,草地等效果。scene.xscene<game_entity/>:出生点,地图边界,地图outer_mesh等实例。
2024-04-19 16:06:07
949
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人