本文以吃豆人游戏为例UE4项目: 自制UE4 小游戏 (gitee.com)

传送

  1. pawn进入box触发OnActorBeginOverlap
  2. 获取目标位置,下一帧将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++中定义的动态多播对象绑定新的委托函数

  1. 加速豆被吃操作绑定到豆被吃事件上
  2. 每次有豆被吃事件发生的时候,都会广播当前豆子的类型
  3. 普通豆被吃无反应
  4. 加速豆被吃就会执行加速豆被吃事件
  • 注册动态多播

    DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FFoodieEatenEvent, EFoodieType, FoodieType);
    
  • 绑定事件

    忽略下面的error,不知道为什么,重新打开的时候就这样了,但还能正常运行…

  • 广播豆子类型,当豆子被吃掉的时候

    void AFoodie::Consume()
    {UGameplayStatics::PlaySound2D(this, ConsumptionSound);FoodieEatenEvent.Broadcast(FoodieType); // 广播类型Destroy();
    }
    


  1. https://mp.weixin.qq.com/s/Vliuv3jfUWU_1VvWSBx70w ↩︎

传送,条件加速 Learn Unreal Engine (with C++)相关推荐

  1. 禁止摄像机跟随`Actor`旋转 Learn Unreal Engine (with C++)

    禁止摄像机跟随Actor旋转 Learn Unreal Engine (with C++) SpaceshipBattle · fanxingin/UE4项目 - 码云 - 开源中国 (gitee.c ...

  2. 旋转根组件 Learn Unreal Engine (with C++)

    旋转根组件 Learn Unreal Engine (with C++) 在UE4中,根组件是无法旋转定位的,只能够缩放,在一些情况下,我们有旋转根组件的需求 SpaceshipBattle · fa ...

  3. 子弹创建及发射 Learn Unreal Engine (with C++)

    子弹创建及发射 Learn Unreal Engine (with C++) SpaceshipBattle · fanxingin/UE4项目 - 码云 - 开源中国 (gitee.com) 子弹的 ...

  4. Actor范围内随机生成 Learn Unreal Engine (with C++)

    Actor范围内随机生成 Learn Unreal Engine (with C++) SpaceshipBattle · fanxingin/UE4项目 - 码云 - 开源中国 (gitee.com ...

  5. 碰撞,处理碰撞,发射 Learn Unreal Engine (with C++)

    本文使用打砖块游戏举例 碰撞,处理碰撞 碰撞就相当于一个Actor进入另一个Box中,用这个思路就可以处理碰撞了 OnComponentBeginOverlap 当某些内容开始重叠此组件时调用的事件, ...

  6. 控制`Actor`朝向,运动 Learn Unreal Engine (with C++)

    控制Actor的朝向,以及Actor的运动 SpaceshipBattle · fanxingin/UE4项目 - 码云 - 开源中国 (gitee.com) 控制Actor朝向鼠标 设置鼠标在游戏中 ...

  7. 主角的创建与选择 Learn Unreal Engine (with C++)

    主角创建有两种方式,本教程以SpaceshipBattle · fanxingin/UE4项目 - 码云 - 开源中国 (gitee.com) 1. 新建游戏模式方式 新建一个蓝图类,选择游戏模式基础 ...

  8. 获取摄像机,摄像机切换Learn Unreal Engine (with C++)

    摄像机应该是使用最普遍的组件了 获取摄像机,摄像机切换 新建C++类(以CameraActor为父类) 将摄像机在地图中放置 头文件声明 virtual void BeginPlay() overri ...

  9. Unreal Engine 4 —— Smear Frame效果的实现与分析

    这篇博客介绍了类似守望先锋中的帧转移模糊(Smear Frame)效果. 该效果由Jan Kaluza实现,本博客的介绍已获得原作者同意. Github地址:传送门 效果 效果图如下,两个模型实际上都 ...

最新文章

  1. 广告点击率预测_精品案例|在线广告点击率预测
  2. arcengine开发如何获取ipolygon的中心点_如何保证倾斜摄影建模效果和建模精度?...
  3. python获取当前时间的函数_java/python中获取当前系统时间,并与字符串相互转换格式,或者转化成秒数,天数等整数...
  4. 20170803 - 今日技能封装 - Q
  5. 今天的天气格外地好的dabeicun
  6. python打包成exe_python打包成exe有GUI工具啦
  7. C++ cmake 命令用法
  8. java密码加密方式_我去,同事居然用明文存储密码!!!
  9. 使用IPv6下载google drive 大文件
  10. python如何设置当前工作路径?
  11. 如何学习Java并发编程
  12. 将台式机组成云服务器_如何用parsec软件搭建自己的云游戏平台 篇三:自己搭建云服务器,一次折腾,全家/全国收益...
  13. SQL 各种锁等待类型 wait type--sys.dm_os_wait_stats 表
  14. 换行符不换行的原因与解决方法
  15. linux删除 0 字节文件,如何恢复 Linux 上删除的文件
  16. Bootstrap carousel轮转图的使用
  17. python实现12306全自动抢票
  18. 计算机组成原理——乘法运算(一位乘)
  19. 读书笔记《假若再上一次大学》1.1
  20. gdb 调试 no debugging symbols

热门文章

  1. 获得picker选项的当前年月值_如果你用OPPO手机!千万记得开启开发者选项,手机性能大幅度提升...
  2. 王道操作系统考研笔记——1.1.1 操作系统的概念、功能和目标
  3. Javascript基础(一)
  4. C++ 学习基础篇(一)—— C++与C 的区别
  5. Linux 应用---make及makefile的编写
  6. ant-design table 分页(tableProps)
  7. iTerm2分屏时,如何使得新窗口的当前路径和前一个窗口一样?
  8. 使用 rose 将 c++代码转换为 uml 类图
  9. 重学java基础第二十四课:标识符合关键字
  10. 前端学习(3157):react-hello-react之一个简单的helloworld