- 博客(21)
- 收藏
- 关注
原创 UE官方示例项目Lyra Game拆解(四)
实现跨设备/按键配置的输入逻辑(例如不同平台的“跳跃”动作统一由Input.Jump标签处理),支持复杂的技能逻辑(如连击、蓄力技能通过标签状态判断阶段),供多个技能或系统共享输入状态(如UI提示根据标签是否按下改变),通常由输入子系统或标签管理器广播,技能通过订阅标签响应。直接关联到具体的技能实例(AbilitySpec),处理绑定的输入动作ID,当与技能绑定的具体输入按键(如键盘按键或手柄按钮)被按下或释放时触发。以上函数主要作用就是将玩家输入加入到不同的队列中批量处理,我们继续看具体处理输入的函数。
2025-03-12 15:41:49
536
原创 UE官方示例项目Lyra Game拆解(三)
此处函数以_Implementation后缀结尾,因为它使用了函数说明符BlueprintNativeEvent,支持C++默认实现和蓝图覆盖,一下是它的声明。在World的SpawnPlayActor中对控制器进行了一些设置,最后调用gameMode的PostLogin函数处理登录后的逻辑。UGameEngine是继承自UEgine的在其中重写了Init函数,在该函数中创建GameInstance实例。在资源加载时隐式的把该组件添加到了LyraGameState中,已完成了组件的初始化。
2025-03-12 10:09:00
793
原创 UE官方示例项目Lyra Game拆解(二)
在之前的逻辑中,Lyra通过在初始地图中放置了B_ExperienceList3D蓝图实例来创建了不同的游戏入口也就是B_TeleportToUserFacingExperience蓝图实例。该蓝图作为子游戏的入口,我们继续来看该蓝图的内部逻辑。并将UserFacingExperienceToLoad变量的值传递进去,该变量的值是在上一篇博客中通过AssetManager加载并传递的。以上基本上就是进入子游戏的全部逻辑了,具体如何通知到客户端,感兴趣的朋友可以继续依次点进对应的函数去看,不在此处啰嗦了。
2025-03-06 19:50:56
449
原创 UE官方示例项目Lyra Game拆解(一)
Unreal Engine 5 官方示例项目 Lyra Game 是一个面向多人射击游戏的模块化、数据驱动的模板项目,其设计体现了 UE5 的新特性与最佳实践。学习Lyra是入门UE的一种高效方式。官方文档。
2025-03-05 14:52:55
309
原创 有限状态机的简单实现
有限状态机(Finite State Machine,简称FSM)是一种数学模型,用于表示系统或组件在有限个状态之间进行切换和响应特定事件的行为。它由一组状态、状态之间的转移规则和触发这些转移的事件组成。有限状态机在计算机科学中有广泛的应用,在游戏开发中常用于角色的简单AI逻辑,角色的动画播放,动画切换等。以下我们将使用一个有限状态机模板来执行一段简单的AI逻辑。
2025-02-27 12:23:41
245
原创 行为树基础实现
行为树(Behavior Tree,BT)是一种控制结构,通过组合不同的行为节点,能够定义复杂的行为逻辑,使自主体能够根据当前的环境状态和目标做出决策并执行相应的动作。常用于游戏中AI逻辑的实现。
2025-02-25 18:08:54
1049
原创 C++ Lambda函数
如果在名称前加上&,如[&x],将按引用访问变量。[&]让您能够按引用访问所有动态变量,而[=]让您能够按值访问所有动态变量。也可混合使用两种方式,如,[x,&y]让您能够按值访问x,按引用访问y,[&,x]让您能够按值访问x,按引用访问其他动态变量;[=,&x]让您能够按引用访问x,按值访问其他动态变量。在c++11中,对于接受函数指针或函数符的函数,可以使用匿名函数(lambda)作为其参数。函数指针会阻止内联,因为编译器传统上不会内联其地址被获取的函数,因为函数地址的概念就意味着非内联函数。
2025-01-31 20:01:07
244
原创 C++函数对象
很多STL算法都是用函数对象,也叫函数符(functor)。函数符是可以以函数方式与()结合使用的任意对象。public://重载()运算符Linear f1;//Linear对象//Linear对象//调用重载的()//调用重载的()通常第三个参数可以是常规函数,也可以是函数符。实际上这里提出一个问题:如何声明第三个参数?不能把它声明为函数指针,因为函数指针指定了参数类型。由于容器可以包含任意类型,所以无法预先知道使用那种类型。
2025-01-31 17:30:13
887
原创 C++智能指针
智能指针是一种用于自动管理动态内存分配的类模版,旨在减少手动管理内存带来的错误和复杂性。c++11标准库主要引入了三种智能指针。shared_ptr所使用的策略是跟踪引用特定对象的智能指针数,也就是引用计数,例如,赋值时,计数将加1,而指针过期时,计数将减1,仅当最后一个指针过期时才调用delete。2.std::unique_ptrunique_ptr 是一种独占所有权的智能指针,意味着同一时间只能有一个 unique_ptr 拥有某个资源。当 unique_ptr 被销毁时,它所管理的资源也会被自动
2025-01-29 21:39:01
172
原创 C++11 简化声明功能
关键字auto还可以简化模版声明。关键字decltype将变量的类型声明为表达式指定的类型。这里解决的问题是,在编译器遇到eff的参数列表前,T和U还不在作用域内,因此必须在参数列表后使用decltype。c++11将auto用于实现自动类型推断。这要求进行显示初始化,让编译器能够将变量的类型设置为初始值的类型。上述语句具体化模版array<T,int>。
2025-01-29 11:05:33
250
原创 C++函数模版
T temp;temp = a;a = b;b = temp;模版并不创建任何函数,而是告诉编译器如何定义函数。需要交换int的函数时,编译器将按模版模式创建这样的函数,并用int替换T。int b = 2;swap(a,b);编译器会生成如下的函数int temp;temp = a;a = b;b = temp;
2025-01-28 20:42:51
410
原创 C++函数指针
与数据项相似,C++函数也有对应的内存地址。函数地址是存储其机器语言代码的内存的开始地址。所以我们可以编写将另一个函数的地址作为参数的函数,这样第一个函数就能找到第二个函数并执行它。
2025-01-28 11:03:17
662
原创 Cocos creator 3.8.3 无限滚动列表
滚动组件和item的样式在预制体里自行调整,目前只支持垂直从上往下滚动。可以看到我们插入了1000条数据 但是draw call 始终是没变的。封装一个无限滚动的列表,以后要用的时候免得重复写。方法 传入预设的行和列以及自定义。自定义滚动项的类继承Item类。
2024-10-27 11:12:26
714
原创 分离轴碰撞检测算法
最近在做一个2d打砖块游戏,一番百度谷歌后找到了这个算法,比较好的符和预期在此记录一下。分离轴定理(SAT | Separating Axis Theorem)通常用于2D凸多边形之间和凸多边形与圆形做碰撞检测的算法。
2023-07-13 22:38:17
481
1
原创 A*寻路TS实现
const {ccclass, property} = cc._decorator;@ccclassexport default class Helloworld extends cc.Component {@property(cc.Prefab)blockPb: cc.Prefab = null;@property(cc.Node)DITU: cc.Node = null;@p...
2019-08-05 10:20:56
1351
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人