逻辑:碰到敌人,会减一条命。吃超级豆子,会有一段无敌时间

在玩家类,添加一个位置向量,存放初始位置

FVector StartLocation;

在开始函数里,初始化这个变量

StartLocation = GetActorLocation();

在添加一个共有的变量,存放生命个数

 UPROPERTY(VisibleAnywhere, BlueprintReadOnly)int Lifes;

在构造函数中初始化

 //生命数Lifes = 3;

添加一个无敌时间

 UPROPERTY(VisibleAnywhere, BlueprintReadWrite)float InVisibleTime;

初始化为3s

 //无敌时间InVisibleTime = 3.0f;

声明几个函数

 //受伤函数void injured();//重新设置位置函数void ReSetting();//限制移动函数void SetMovement(bool bcanmove);

添加速度成员变量

UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
float NormalSpeed;

构造函数中,初始化为600

 //初始化正常速度NormalSpeed = 600.0f;

添加一个定时器句柄私有属性

 //添加一个句柄FTimerHandle SpwanTimerHandle;

=====================================

在敌人类里,声明一个重叠事件的函数。

//重叠事件函数
UFUNCTION()
void OnEnermyBeginOverlay(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult);

在游戏开始函数里,将胶囊体的碰撞事件绑定这个函数

 //重叠事件与函数的绑定,this是自身,后面的是要绑定的函数GetCapsuleComponent()->OnComponentBeginOverlap.AddDynamic(this, &APacdotEnermy::OnEnermyBeginOverlay);

添加两个变量,一个是正常速度,一个 是脆弱速度

 //正常速度UPROPERTY(VisibleAnywhere, BlueprintReadWrite)float NormalSpeed;//虚弱速度UPROPERTY(VisibleAnywhere, BlueprintReadWrite)float VulnerableSpeed;

在构造函数中,初始化速度

 //初始化移动速度NormalSpeed = 300.0f;VulnerableSpeed = 100.0f;

创建两个成员变量存放状态

 //敌人状态bool bIsDeath;bool bIsVulnerable;

在构造函数中进行初始化

 //敌人状态bIsDeath = false;bIsVulnerable = false;

定义两个成员变量,存放状态时间

 //死亡状态时间UPROPERTY(VisibleAnywhere, BlueprintReadWrite)float DeathTime;//虚弱状态时间UPROPERTY(VisibleAnywhere, BlueprintReadWrite)float VulnerableTime;

在构造函数中初始化

 //状态时常DeathTime = 5.0f;VulnerableTime = 5.0f;

定义一个私有的成员,存放初始位置向量

private:FVector StartLocation;

在游戏开始函数中继续初始化

StartLocation = GetActorLocation();

声明一些函数

//设置虚弱状态void SetVulnerable(bool bRestoreTimer = false , float Time = 0.0f);//设置死亡void SetDeath(bool bRestoreTimer = false , float Time = 0.0f);//设置正常状态void SetNormal();//设置移动void SetMovement(bool bcanmove);

导入玩家头文件

#include "PacdotPlayer.h"

定义重叠事件函数

void APacdotEnermy::OnEnermyBeginOverlay(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
{if (OtherActor->IsA(APacdotPlayer::StaticClass())){//如果敌人是死亡状态,就没有任何事情发生if (bIsDeath){return;}//如果是脆弱状态,就进入死亡状态if (bIsVulnerable){SetDeath();}//否则就导致玩家受伤else{Cast<APacdotPlayer>(OtherActor)->injured();}}
}

=======================

现在设置一下游戏起始组件,先缩放到0.1

然后降低高度

新建无敌状态碰撞预设

现在定义一下玩家受伤函数

void APacdotPlayer::injured()
{//将胶囊体设为无敌碰撞预设GetCapsuleComponent()->SetCollisionProfileName(TEXT("InVisible"));//生命-1Lifes--;//如果没有生命值,游戏状态设为游戏结束if (Lifes == 0){ModeBaseRef->SetCurrentState(EGameState::EGameOver);}else{//设置位置为游戏开始位置SetActorLocation(StartLocation);//用定时器来调用重新设置函数GetWorld()->GetTimerManager().SetTimer(SpwanTimerHandle, this, &APacdotPlayer::ReSetting, InVisibleTime, false);}}

定义一下状态重置函数

void APacdotPlayer::ReSetting()
{//释放计时器GetWorld()->GetTimerManager().ClearTimer(SpwanTimerHandle);//将碰撞变回pawn//将胶囊体设为无敌碰撞预设GetCapsuleComponent()->SetCollisionProfileName(TEXT("pawn"));}

测试

08UEC++吃豆人[创建敌人碰到玩家的逻辑]相关推荐

  1. 01UEC++吃豆人[创建工程和场景]

    首先创建三个文件夹 保存当前的场景到Maps里面 我们在世界大纲中,对其中的组件进行一个组织. 首先创建文件夹,命名为Env 把现有的部分东西都移动到里面 导入音频 打开项目设置,全部设为我们的mai ...

  2. 吃豆人游戏-第12届蓝桥杯Scratch选拔赛真题精选

    [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第79讲. 蓝桥杯选拔赛每一届都要举行4~5次,和省赛.国赛相比,题目要简单不少,再加上篇幅 ...

  3. Unity吃豆人敌人BFS广度(宽度)优先算法实现怪物追踪玩家寻路

    本人正在努力建设自己的公众号,大家可以关注公众号,此文章最近也会上线我的公众号,公众号将免费提供大量教学Unity相关内容,除了从Unity入门到数据结构设计模式外,我还会免费分享我再游戏开发中使用的 ...

  4. Python 中用 300 行或更少的代码创建吃豆人游戏(教程含源码)

    吃豆人是一款经典的平台游戏,今天可能已为所有人所熟知."吃豆人"这个名字来自日语单词"paku",意思是张开和合上嘴巴.创作者岩谷彻 (Toru Iwatani ...

  5. 从零开始为《吃豆人》创建BT

    从零开始为<吃豆人>创建BT 这一次我们对<吃豆人>游戏创建一组逐渐复杂的BT. 如图所示BT通过包含多个幽灵和大量药丸的迷宫控制智能体,即吃豆人,这些药丸中大的药丸就是说为的 ...

  6. 吃豆人动态模型创建---canvas

    吃豆人模型 吃豆人是我们小时候常玩的街机游戏,常常能勾起我们童年的回忆,写这些文章也是为了记录学习,保留回忆的,如果可以帮助到你们也会很开心,可能内容有些太基础,希望不要介意. 因为不是一个完整的小游 ...

  7. 观看5万个游戏视频后,英伟达AI学会了自己开发「吃豆人」

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI AI学会玩游戏已经不是什么新鲜事了,无论是星际争霸还是王者荣耀,AI的水平都已经超过了顶级选手. 现在,AI不仅能玩游戏,还学会了造游戏. ...

  8. 理解siki学院吃豆人案例脚本

    Gamemanager.cs(全局控制) using System.Collections; using System.Collections.Generic; using UnityEngine; ...

  9. Java语言制作吃豆人游戏

    (此项目源码已上传至Github网站,网址为GitHub - Ran-a/Pac-man-yar) 1  游戏界面 游戏的角色分别是追赶者和吃豆人,玩家使用方向键来控制吃豆人的运动方向并吃食物,将食物 ...

最新文章

  1. Spring整合Hessian
  2. C语言经典例86-两个字符串连接
  3. 笔记本电池电量校正方法(转CSDN)
  4. 混淆工具Dotfuscator基本使用
  5. C++Postfix Expression 后缀表达式的评估算法(附完整源码)
  6. oracle bom展开 sql,Oracle EBS-SQL (BOM-15):检查多层BOM(含common BOM).sql
  7. hexo的yelee主题使用本地自己指定的自定义字体
  8. 我在SAP这么多年使用过的IDE
  9. 万恶的C++ 【1】:类型及运算
  10. spark基础之基于yarn两种提交模式分析
  11. leetcode693:Binary Number with Alternating Bits
  12. 拓端tecdat|R语言对HullWhite短期利率模型仿真
  13. SM4算法详解(2021-12-8)
  14. 盲盒商城源码|盲盒商城app开发的模式玩法、功能以及开发流程介绍,多套盲盒源码现成案例。让您在了解盲盒项目开发中少走弯路,少踩坑。
  15. 计算机中常用的声音编辑工具有哪些,电脑常用音频剪辑软件
  16. python爬虫爬取机床展名录
  17. 搞懂WebRtc,语音社交源码的开发就入门了!
  18. TotalControl连接问题
  19. 移动硬盘突然断电导致坏道产生
  20. 对往届软件工程的思考——写在软件工程开课之际 by 姜健

热门文章

  1. TS入门(TS类型有哪些?怎么使用?)
  2. Java基础后端面试点大全(六)
  3. 关于 android oom(内存溢出的分析)
  4. Vue—表单的输入绑定,绑定Vue3表单的输入
  5. iDB是如何运转的 一
  6. 2023年5月16日 Python用163邮箱发送邮件最简方式
  7. 理解JavaScript中部分设计模式
  8. 低成本兼职创业,每个互联网人都需要知道的方法论
  9. 摄像头结构及工作原理
  10. 在计算机创建用户名和密码是什么情况,怎样创建用户名与密码