08UEC++吃豆人[创建敌人碰到玩家的逻辑]
逻辑:碰到敌人,会减一条命。吃超级豆子,会有一段无敌时间
在玩家类,添加一个位置向量,存放初始位置
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++吃豆人[创建敌人碰到玩家的逻辑]相关推荐
- 01UEC++吃豆人[创建工程和场景]
首先创建三个文件夹 保存当前的场景到Maps里面 我们在世界大纲中,对其中的组件进行一个组织. 首先创建文件夹,命名为Env 把现有的部分东西都移动到里面 导入音频 打开项目设置,全部设为我们的mai ...
- 吃豆人游戏-第12届蓝桥杯Scratch选拔赛真题精选
[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第79讲. 蓝桥杯选拔赛每一届都要举行4~5次,和省赛.国赛相比,题目要简单不少,再加上篇幅 ...
- Unity吃豆人敌人BFS广度(宽度)优先算法实现怪物追踪玩家寻路
本人正在努力建设自己的公众号,大家可以关注公众号,此文章最近也会上线我的公众号,公众号将免费提供大量教学Unity相关内容,除了从Unity入门到数据结构设计模式外,我还会免费分享我再游戏开发中使用的 ...
- Python 中用 300 行或更少的代码创建吃豆人游戏(教程含源码)
吃豆人是一款经典的平台游戏,今天可能已为所有人所熟知."吃豆人"这个名字来自日语单词"paku",意思是张开和合上嘴巴.创作者岩谷彻 (Toru Iwatani ...
- 从零开始为《吃豆人》创建BT
从零开始为<吃豆人>创建BT 这一次我们对<吃豆人>游戏创建一组逐渐复杂的BT. 如图所示BT通过包含多个幽灵和大量药丸的迷宫控制智能体,即吃豆人,这些药丸中大的药丸就是说为的 ...
- 吃豆人动态模型创建---canvas
吃豆人模型 吃豆人是我们小时候常玩的街机游戏,常常能勾起我们童年的回忆,写这些文章也是为了记录学习,保留回忆的,如果可以帮助到你们也会很开心,可能内容有些太基础,希望不要介意. 因为不是一个完整的小游 ...
- 观看5万个游戏视频后,英伟达AI学会了自己开发「吃豆人」
晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI AI学会玩游戏已经不是什么新鲜事了,无论是星际争霸还是王者荣耀,AI的水平都已经超过了顶级选手. 现在,AI不仅能玩游戏,还学会了造游戏. ...
- 理解siki学院吃豆人案例脚本
Gamemanager.cs(全局控制) using System.Collections; using System.Collections.Generic; using UnityEngine; ...
- Java语言制作吃豆人游戏
(此项目源码已上传至Github网站,网址为GitHub - Ran-a/Pac-man-yar) 1 游戏界面 游戏的角色分别是追赶者和吃豆人,玩家使用方向键来控制吃豆人的运动方向并吃食物,将食物 ...
最新文章
- Spring整合Hessian
- C语言经典例86-两个字符串连接
- 笔记本电池电量校正方法(转CSDN)
- 混淆工具Dotfuscator基本使用
- C++Postfix Expression 后缀表达式的评估算法(附完整源码)
- oracle bom展开 sql,Oracle EBS-SQL (BOM-15):检查多层BOM(含common BOM).sql
- hexo的yelee主题使用本地自己指定的自定义字体
- 我在SAP这么多年使用过的IDE
- 万恶的C++ 【1】:类型及运算
- spark基础之基于yarn两种提交模式分析
- leetcode693:Binary Number with Alternating Bits
- 拓端tecdat|R语言对HullWhite短期利率模型仿真
- SM4算法详解(2021-12-8)
- 盲盒商城源码|盲盒商城app开发的模式玩法、功能以及开发流程介绍,多套盲盒源码现成案例。让您在了解盲盒项目开发中少走弯路,少踩坑。
- 计算机中常用的声音编辑工具有哪些,电脑常用音频剪辑软件
- python爬虫爬取机床展名录
- 搞懂WebRtc,语音社交源码的开发就入门了!
- TotalControl连接问题
- 移动硬盘突然断电导致坏道产生
- 对往届软件工程的思考——写在软件工程开课之际 by 姜健