- 博客(32)
- 收藏
- 关注
原创 UnLua实现多态
多态其实就是子类重写父类的函数,在运行时,如果通过父类对象调用函数,实际上会根据子类的实际类型调用子类中重写的函数。最后调用子类的SpawnBall,传进去的self是00000BAD9C969F80,也是子类的self。再调用父类的构造函数,父类的self地址是00000BADB6068600,与子类的self不一样。再调用父类的构造函数,父类的self地址是00000BAD9C969F80,即子类的self。只调用子类的构造函数,并没有调用父类构造函数,所以SpawnBall也没有调用。
2024-10-20 17:46:31
489
原创 UnLua实现继承
2、在子类中设置父类文件名,重写父类函数,并显示调用父类函数。2、创建子类蓝图,如果先创建的子类,可以修改父类继承。4、打印,先执行子类方法,然后执行父类方法。1、创建父类,并绑定Lua脚本。注意,提示选择继承父类的接口!1、在父类Lua脚本中实现函数。
2024-09-22 09:39:44
641
原创 UnLua扩展C++函数和蓝图自定义事件
5、如果在Lua中没有重写LuaNative函数,则会调用C++中的LuaNative_Implementation中LuaImp函数,输出“this is a function implements C++”2、在Lua中重写BP_EventTest函数,需要注意的是Lua中把ReceiveBeginPlay函数注释掉,蓝图的EventBeginPlay才会生效。6、如果在Lua中重写了LuaNative函数,就会调用Lua中的LuaNative函数,输出“Native Event”
2024-09-19 14:48:03
688
原创 UnLua访问C++属性、动态生成Actor
2、在继承自C++的蓝图子类BP_BaseActor中给Name赋值。1、在C++类MyBaseActor中新增蓝图可编辑属性:Name。3、在Lua中实现点击按钮动态生成Actor,并访问其Name属性。
2024-09-19 13:10:54
604
原创 UnLua调用蓝图变量、动画、函数
1、在蓝图中声明一个String类型变量title。1、在蓝图中制作按钮btnTest。2、在Lua中绑定该按钮的点击事件。1、在蓝图中定义播放UI动画的函数。默认值为MyFirstTitle。1、在蓝图中制作UI动画。2、在Lua中播放该动画。2、在Lua中调用该函数。2、在UnLua中调用。
2024-09-09 17:25:30
885
原创 UnLua调用C++函数
2、新建蓝图类BP_BaseActor,继承C++类MyBaseActor,绑定Lua脚本BP_BaseActor.lua。1、新建C++类MyLuaUtils,继承BlueprintFunctionLibrary,实现全局静态函数GetInt。3、将蓝图BP_BaseActor拖到场景中创建一个实例,运行查看Log,每帧都在成功输出。1、新建C++类MyBaseActor,继承Actor,实现GetIndex成员函数。3、运行查看Log。
2024-09-08 15:08:28
682
原创 UnLua环境搭建
1、下载UnLua工程:https://github.com/Tencent/UnLua。1、新建UMG蓝图WBP_FirstLua,打开并点击右上角UnLua->Bind按钮。3、点击Create Lua Template按钮,即可生成与蓝图绑定的Lua代码文件。4、打开VS工程的项目名.Build.cs文件,引用UnLua插件,重新编译工程。2、复制Plugins/UnLua目录下的插件到自己的项目中。2、打开这个函数并填写模块名字,即Lua文件名。3、重新生成自己的VS工程。而且生成了一个接口函数。
2024-09-07 16:12:21
728
原创 自定义事件分发
BlueprintNativeEvent标记的函数,在C++中需要通过OnReceiveEvent_Implement来实现,在蓝图中也可以调出OnReceiveEvent事件节点。声明一个接收事件的函数OnReceiveEvent,这里没有用Virtual关键字,是因为Virtual关键字不能在蓝图中使用。添加事件监听AddEventListener。2、在蓝图中监听、接收、移除事件。2、在蓝图中监听、接收、移除事件。注意:事件管理器包含了下面函数。1、C++发送事件同上。1、在蓝图中发送事件。
2024-09-06 15:50:24
622
原创 C++和蓝图混用事件
注意:这里相比纯C++多播委托,由AddUObject函数变为了AddDynamic宏。注意:相比纯C++多播委托,宏名字多了DYNAMIC单词。注意:一定要加UFUNCTION。
2024-09-03 16:36:17
447
1
原创 纯蓝图事件
3、直接将创建好的事件分发器拖入EventGraph中会显示出Call、Bind、UnBind、Assign等方法。1、蓝图中可直接添加Event Dispatchers事件分发器。2、还可以设置事件的传递参数。
2024-09-01 14:54:30
389
原创 Gameplay Ability System(通过GameplayEffect里的Execution修改角色属性)
这个函数将编辑器里设置的参数传进来,然后通过计算再返回出去,这个函数被标记为BlueprintNativeEvent,所以我们可以在自己的类PlayerEffectExecutionCalculation里实现Execute_Implementation函数来计算属性。可以发现,之前的文章里使用的是Modifiers来修改角色生命值属性,这次我们改用Executions来算上角色的护甲,并覆盖了角色的生命值。在头文件里使用父类的宏DECLARE_ATTRIBUTE_CAPTUREDEF来声明要修改的属性。
2024-08-25 20:09:39
1272
原创 Gameplay Ability System(通过表配置不同等级的伤害)
1、打开普攻蓝图GAB_MeleeAttack,将随机的普攻等级设置给GameplayEffectLevel,注意随机值一定要先存储为变量才能传出去,否则会出现第一次使用和第二次使用不一样的情况。1、导入为CurveTable的稳定格式,命名为CT_MeleeAttackCurve。1、创建Excel表格,输入数据,表示1级的普攻伤害为5;2级的普攻伤害为15。3、上述设置表示,每次增加 -1 * 配置表里每级相应的伤害数值的血量。3、当然也可以通过记事本直接写成下图这样。2、另存为.csv格式文件。
2024-08-24 16:53:07
344
原创 Gameplay Ability System(角色属性夹值)
3、这样就完成了对角色生命值等属性的数值大小限制在0到最大值之间。1、修改角色属性类BaseAttributeSet.h。
2024-08-24 16:33:06
318
原创 Gameplay Ability System(通过GameplayEffect修改角色属性)
2、添加按类应用Effect版本的ApplyGameplayEffectToTarget节点,并在接收到普攻事件时执行。1、上图表示持续10S扣血,每秒扣1滴血,注意取消第一次应用时不扣血,否则会导致10S扣了11滴血。例如上图中的设置表示:每当GameplayEffect生效一次时,将角色的Health加上-10。Modifier Op: 修改的计算方式,有加法、乘法、除法。5、此时,每当玩家普攻到敌人时就会修改敌人的生命值属性了。1、打开普通攻击的蓝图类GAB_MeleeAttack。
2024-08-24 16:22:21
396
原创 Gameplay Ability System(事件通知)
1、添加Send Gameplay Event to Actor节点,当玩家的武器碰到敌人时发送GameplayEvent。2、给该事件添加Event Tag标签:Ability.MeleeAttack.Damage.Event。1、注意,别忘记在播放蒙太奇动画结束、打断后结束能力,否则会一直接收事件。1、添加Wait Gameplay Event 节点,等待事件触发。3、设置EventReceived引脚:表示事件接收后执行的逻辑。2、设置事件的Tag:与上面发送事件时设置的Tag要相同。
2024-08-24 15:48:32
793
原创 UE5启用SteamOS流程
确保Steam平台已打开,运行后按下shift+Tab即可调用steam。打开项目根目录/Config/DefaultEngine.ini文件。1、在UE里安装OnlineSubsystemSteam。2、设置默认开始地图。复制并粘贴到该文件中。
2024-03-31 19:38:41
836
原创 UE5 基于UMG的UI基类和Manager
最近发现为数不多的UI框架代码,基本逻辑跟Unity的其实差不多,都是通过UIManager来管理UI的显示和退出。Unreal的UIManager继承自AActor,并且需要提供蓝图调用的接口。3、Unity的UIManager不继承MonoBehaviour。1、Unity的UI实例一般使用Dictionary来存取。2、Unity面板基类继承自MonoBehaviour。Unreal的面板基类继承自UUserWidget。Unreal则使用Map。
2024-03-20 16:26:40
317
原创 角色攻击动画(武器碰撞生效的时机)
2、打开蓝图类之后,重写Received Notify Begin 和 Received Notify End函数。AnimNotifyState可以在动画播放中间Tick的时候或播放结束的时候调用指定的逻辑。3、在蒙太奇动画中新增一个Notify轨道,并添加上面新建的AnimNotifyState。编译运行,可以看到不攻击时武器触碰到敌人不会触发碰撞,只在播放攻击动画时才会触发。2、在对应的动画蓝图中添加Notifies节点对应的事件逻辑。1、在角色的蒙太奇攻击动画中的Notifies中添加节点。
2024-03-17 22:57:29
452
原创 资源处理(给角色模型的武器部分添加碰撞)
注意:这里的Collision Enabled设置为Query Only(仅查询),是因为接下来碰撞生效时只打印信息,项目中可根据具体情况改成其他模式。2、设置敌人的Capsule Component和Mesh的碰撞通道忽略Camera。1、可以看到玩家角色身上的SpringArm的碰撞通道是Camera。给角色模型的武器添加碰撞,角色基类有两个子类:玩家和敌人。3、设置碰撞体的Transform。5、设置碰撞通道只对Pawn有用。2、设置碰撞体的骨骼插槽。4、设置碰撞体的范围。
2024-03-17 18:22:47
507
原创 Gameplay Ability System(给角色添加属性)
注意:FGameplayAttributeData类型在概述里Attribute有讲过,提供BaseValue与CurrentValue。编译之后可在角色蓝图里看到生成了属性的结构体。
2024-03-17 16:39:04
453
原创 Gameplay Ability System(普攻间隔/冷却)
创建好普攻冷却的蓝图后,可在普攻蓝图的Cooldown中选中刚刚创建的GE_PlayerAttack_Cooldown。关闭GE_PlayerAttack_Cooldown后重新打开可看到下图的面板,我们只需要研究这个面板里的参数即可。1、当Cooldown这个Gameplay Effect生效时,会在Tags里贴上一个Cooldown标签。2、当再次生效时(即在普攻间隔时再次攻击)会检查Tags里有没有已经存在的Cooldown标签。3、如果已经有了Cooldown标签就不再进行普攻,否则执行普攻。
2024-03-17 15:15:19
623
原创 Gameplay Ability System(普通攻击能力)
5、注意继承自BP_TestBasePlayerController蓝图类的BP_TestPlayer类中的BeginPlay事件要调用父类的BeginPlay事件。3、在角色蓝图BP_TestBaseCharacter里编写逻辑,选择创建好的GAB_PlayerAttack能力蓝图。1、在UE里新建C++,路径填写新的文件夹名来在C++Classes目录下同时创建新的文件夹。4、在BP_TestPlayerController蓝图类中编写点击鼠标左键调用普攻的逻辑。2、激活能力时打印测试。
2024-03-16 19:45:24
444
原创 Gameplay Abilitie System(使角色获得能力)
1、在VS里打开自定义Character脚本,引入头文件,使其继承IAbilitySystemInterface接口。注:FGameplayAbilitySpec其实是个结构体,可以查看其源码发现有很多初始化构造函数,包括能力等级等等。编译完成后创建C++的蓝图类,会发现多出来个Ability System Component组件。2、实现接口的GetAbilitySystemComponent方法,并声明其返回值类型的变量。
2024-03-16 16:36:51
545
原创 Gameplay Ability System(安装插件)
4、关闭引擎和VS,在项目目录里删除以下文件夹,最好只保留。1、在UE里安装Gameplay Abilities。2、在VS里打开xxx.Build.cs文件。和.uproject文件。
2024-03-16 15:43:55
472
原创 Gameplay Ability System概述
2、可查找(父子关系的层级查找)、可叠加(比如游戏中某种暴击效果:普攻4次必定暴击或者是站在火焰上有叠加烧伤效果)1)基于等级的可消耗资源并带有冷却的角色能力(GameplayAbility)1、为了执行随时间推移而发生的动作所提供的异步操作(比如等待动画播放完成)2)对Actor所拥有的数值型属性的操控(AttributeSet)2、要使用GAS的Actor必须有一个为其服务的ASC来管理相关一切。1)即,不推荐直接做:基本输入操作、界面交互操作、商城购买操作等。可消耗资源,进行冷却,执行逻辑。
2024-03-13 15:47:01
1195
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人