自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

axin7c8的博客

游戏废柴

  • 博客(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扩展接口

注意,接口不需要绑定Lua,也没有Bind按钮。1、创建BlueprintInterface。

2024-09-22 08:51:22 421

原创 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

原创 纯C++事件

【代码】纯C++事件。

2024-09-02 14:51:47 323

原创 纯蓝图事件

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

转载 UE5UMG组件的简介与使用(Panel 面板组件篇)

转载一位大佬的UI组件介绍。

2024-03-20 22:24:38 311

原创 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

原创 四、Unity3D的输入控制、GameObject和Prefab

四、Unity3D的输入控制、GameObject和Prefab

2018-01-02 13:36:29 1337

原创 三、Unity3D中的Vector3、Transform和Time

Vector3、Transform、Time

2018-01-01 18:27:21 4970

原创 二、Unity3D挂载脚本与事件函数

如何创建脚本?

2018-01-01 16:13:56 9639

原创 一、Unity3D基础

Unity界面布局

2017-12-31 19:59:14 9335 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除