传送,条件加速 Learn Unreal Engine (with C++)
本文以吃豆人游戏为例UE4项目: 自制UE4 小游戏 (gitee.com)
传送
pawn
进入box
触发OnActorBeginOverlap
- 获取目标位置,下一帧将
pawn
坐标更改为目标位置
首先需要重叠函数与开始重叠事件绑定
OnActorBeginOverlap.AddDynamic(this, &ATeleporterActor::OnOverlapBegin);
头文件声明
UPROPERTY(EditAnywhere)ATeleporterActor* Target = nullptr; //目标位置,在蓝图中设置比较方便UPROPERTY(EditAnywhere)USoundCue* TeleportSound;//声音UFUNCTION()void OnOverlapBegin(AActor* TeleporterActor, AActor* OtherActor);//触发重叠后执行的操作
实现
void ATeleporterActor::TeleportToTarget(AActor * Actor) {//获取传送目标名为"Spawn"的场景组件USceneComponent* TargetSpawn = Cast<USceneComponent>(Target->GetDefaultSubobjectByName("Spawn"));UGameplayStatics::PlaySound2D(this, TeleportSound);Actor->SetActorLocation(TargetSpawn->GetComponentLocation());//更改坐标 }void ATeleporterActor::OnOverlapBegin(AActor * TeleporterActor, AActor * OtherActor) {if (OtherActor->ActorHasTag("Pacman")) {//下一帧,调用传送函数GetWorldTimerManager().SetTimerForNextTick([OtherActor, this]() { TeleportToTarget(OtherActor); });} }
Target->GetDefaultSubobjectByName
获取名为xxx的子对象,例如本游戏中就是获取ATeleporterActor
名为spawn
的子对象
条件加速
当吃豆人吃到特殊的豆子的时候就会加速,这使用了动态多播1主要目的是降低对象之间的耦合,代码更加清晰简洁
动态多播:观察者模式, 动态即支持蓝图序列化,即可在蓝图中绑定事件,但蓝图获取不到在C++中定义的动态多播的实例引用,即使用元数据 BlueprintReadWrite 标记也不行,但可以通过 【Assign 实例名称】 的蓝图节点为在C++中定义的动态多播对象绑定新的委托函数
- 将加速豆被吃操作绑定到豆被吃事件上
- 每次有豆被吃事件发生的时候,都会广播当前豆子的类型
- 普通豆被吃无反应
- 加速豆被吃就会执行加速豆被吃事件
注册动态多播
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FFoodieEatenEvent, EFoodieType, FoodieType);
绑定事件
忽略下面的error,不知道为什么,重新打开的时候就这样了,但还能正常运行…
广播豆子类型,当豆子被吃掉的时候
void AFoodie::Consume() {UGameplayStatics::PlaySound2D(this, ConsumptionSound);FoodieEatenEvent.Broadcast(FoodieType); // 广播类型Destroy(); }
https://mp.weixin.qq.com/s/Vliuv3jfUWU_1VvWSBx70w ↩︎
传送,条件加速 Learn Unreal Engine (with C++)相关推荐
- 禁止摄像机跟随`Actor`旋转 Learn Unreal Engine (with C++)
禁止摄像机跟随Actor旋转 Learn Unreal Engine (with C++) SpaceshipBattle · fanxingin/UE4项目 - 码云 - 开源中国 (gitee.c ...
- 旋转根组件 Learn Unreal Engine (with C++)
旋转根组件 Learn Unreal Engine (with C++) 在UE4中,根组件是无法旋转定位的,只能够缩放,在一些情况下,我们有旋转根组件的需求 SpaceshipBattle · fa ...
- 子弹创建及发射 Learn Unreal Engine (with C++)
子弹创建及发射 Learn Unreal Engine (with C++) SpaceshipBattle · fanxingin/UE4项目 - 码云 - 开源中国 (gitee.com) 子弹的 ...
- Actor范围内随机生成 Learn Unreal Engine (with C++)
Actor范围内随机生成 Learn Unreal Engine (with C++) SpaceshipBattle · fanxingin/UE4项目 - 码云 - 开源中国 (gitee.com ...
- 碰撞,处理碰撞,发射 Learn Unreal Engine (with C++)
本文使用打砖块游戏举例 碰撞,处理碰撞 碰撞就相当于一个Actor进入另一个Box中,用这个思路就可以处理碰撞了 OnComponentBeginOverlap 当某些内容开始重叠此组件时调用的事件, ...
- 控制`Actor`朝向,运动 Learn Unreal Engine (with C++)
控制Actor的朝向,以及Actor的运动 SpaceshipBattle · fanxingin/UE4项目 - 码云 - 开源中国 (gitee.com) 控制Actor朝向鼠标 设置鼠标在游戏中 ...
- 主角的创建与选择 Learn Unreal Engine (with C++)
主角创建有两种方式,本教程以SpaceshipBattle · fanxingin/UE4项目 - 码云 - 开源中国 (gitee.com) 1. 新建游戏模式方式 新建一个蓝图类,选择游戏模式基础 ...
- 获取摄像机,摄像机切换Learn Unreal Engine (with C++)
摄像机应该是使用最普遍的组件了 获取摄像机,摄像机切换 新建C++类(以CameraActor为父类) 将摄像机在地图中放置 头文件声明 virtual void BeginPlay() overri ...
- Unreal Engine 4 —— Smear Frame效果的实现与分析
这篇博客介绍了类似守望先锋中的帧转移模糊(Smear Frame)效果. 该效果由Jan Kaluza实现,本博客的介绍已获得原作者同意. Github地址:传送门 效果 效果图如下,两个模型实际上都 ...
最新文章
- 广告点击率预测_精品案例|在线广告点击率预测
- arcengine开发如何获取ipolygon的中心点_如何保证倾斜摄影建模效果和建模精度?...
- python获取当前时间的函数_java/python中获取当前系统时间,并与字符串相互转换格式,或者转化成秒数,天数等整数...
- 20170803 - 今日技能封装 - Q
- 今天的天气格外地好的dabeicun
- python打包成exe_python打包成exe有GUI工具啦
- C++ cmake 命令用法
- java密码加密方式_我去,同事居然用明文存储密码!!!
- 使用IPv6下载google drive 大文件
- python如何设置当前工作路径?
- 如何学习Java并发编程
- 将台式机组成云服务器_如何用parsec软件搭建自己的云游戏平台 篇三:自己搭建云服务器,一次折腾,全家/全国收益...
- SQL 各种锁等待类型 wait type--sys.dm_os_wait_stats 表
- 换行符不换行的原因与解决方法
- linux删除 0 字节文件,如何恢复 Linux 上删除的文件
- Bootstrap carousel轮转图的使用
- python实现12306全自动抢票
- 计算机组成原理——乘法运算(一位乘)
- 读书笔记《假若再上一次大学》1.1
- gdb 调试 no debugging symbols
热门文章
- 获得picker选项的当前年月值_如果你用OPPO手机!千万记得开启开发者选项,手机性能大幅度提升...
- 王道操作系统考研笔记——1.1.1 操作系统的概念、功能和目标
- Javascript基础(一)
- C++ 学习基础篇(一)—— C++与C 的区别
- Linux 应用---make及makefile的编写
- ant-design table 分页(tableProps)
- iTerm2分屏时,如何使得新窗口的当前路径和前一个窗口一样?
- 使用 rose 将 c++代码转换为 uml 类图
- 重学java基础第二十四课:标识符合关键字
- 前端学习(3157):react-hello-react之一个简单的helloworld