六一的部落格


关关难过关关过,前路漫漫亦灿灿。




项目结构


资产

-
Content ExternalContent Animation
Levels DefaultMap
Player Animations ABP_BaseCharacter
BS_Locomotion_Run
BS_Locomotion_Walk
BS_Locomotion_Walk_1D
AM_Death
BP_STUBaseCharacter
BP_STUPlayerController
BP_STUGameModeBase

代码

-
ShootThemUp Public Components STUCharacterMovementComponent
STUHealthComponent
Player STUBaseCharacter
STUPlayerController
Dev STUDevDamageActor
STUFireDamageType
STUIceDamageType
STUGameModeBase

项目基础设置ExternalContent

-
载入 ExternalContent/Animation
创建 DefaultMap 并设置
设置地板
配置头文件搜索路径
添加 PlayerStart
设置 编译成功自动保存

游戏角色

-
C++ Player/STUBaseCharacter
Blueprint Player/BP_STUBaseCharacter
Player/Animations/ABP_BaseCharacter
Player/Animations/BS_Locomotion_Run
Player/Animations/BS_Locomotion_Walk
Player/Animations/BS_Locomotion_Walk_1D
Player/Animations/AM_Death

STUBaseCharacter

C++


函数成员

基本函数 操作
构造函数 设置组件类型(初始化列表);初始化组件
BeginPlay 检查组件是否成功创建(check);组件设置;注册委托
SetupPlayerInputComponent 检查组件;绑定平移旋转跳跃跑步键位
  • 键位绑定
    回调函数 键位 相关函数
    MoveRight 轴映射 左右移动 APawn::AddMovementInput;AActor::GetActorRightVector
    MoveForward 轴映射 前后移动 APawn::AddMovementInput;AActor::GetActorForwardVector
    轴映射 左右旋转 ACharacter::AddControllerYawInput
    轴映射 上下旋转 ACharacter::AddControllerPitchInput
    动作映射 跳跃 ACharacter::Jump
    RunEnable,RunDisable 动作映射 跑步
  • 接口
    接口函数 操作
    GetDirection 计算前进方向和速度方向的夹角;供ABP_STBaseCharacter使用
    IsRunning 判断角色是否满足跑步条件;供STUCharacterMovementComponent使用;供ABP_STBaseCharacter使用
  • 委托
    处理函数 作用 委托成员 操作
    OnChangeHealth 修改显示生命值 HealthComponent::OnChangeHealth 修改HealthTextComponent文本
    OnDeath 游戏角色死亡处理 HealthComponent::OnDeath 播放死亡动画剪辑;禁止操作Character;定时销毁;切换到观察视角
    OnGroundLanded 计算落地伤害 ACharacter::LandedDelegate 计算落地伤害;对Character调用TakeDamage

数据成员

组件 用途
SpringArmComponent 以游戏角色为中心左右旋转
CameraComponent 第三视角
CharacterMovementComponent 运动组件
HealthComponent 生命值系统
HealthTextComponent 显示生命值
  • 标志位
    说明
    AbleRun 跑步键位是否按下
    IsForward 向前方向键是否按下
  • 游戏角色死亡逻辑
    说明
    DeathAnimMontage 死亡动画剪辑
    LifeSpanOnDeath 销毁角色定时间隔
  • 落地伤害逻辑
    说明
    LandedDamageRange 伤害范围
    LandedDamageVelocityRange 造成伤害的速度范围

Player/BP_STUBaseCharacter

Blueprint


CapsuleComponent


MeshComponent

说明
Mesh > Skeletal Mesh Asset HeroTPP
Materials > Element 0 HeroTPP
Animation Mode UseAnimationBlueprint
AnimClass ABP_BaseCharacter

SpringArmComponent

说明
UsePawnControlRotation true

HealthComponent


HealthTextComponent

说明
Horizontal Alignment Center

Player/Animations/ABP_BaseCharacter

Blueprint


AnimGraph

  • 状态机

    1. Locomotion > Slot > OutputPose
    2. 状态
      状态 说明
      走路 Walk BS_Locomotion_Walk;混合空间
      跑步 Run BS_Locomotion_Run;混合空间1D
      跳跃 JumpStart
      JumpLoop
      JumpEnd
      死亡 AM_Death;动画剪辑
    3. 变量
      • 动画输入
        名称
        速度 Velocity
        速度和前进方向的夹角 Directon
      • 转换条件
        说明
        IsRunning C++ 满足3个条件:按下Shift;速度和前进方向夹角为0(或按下W/Up);速度不为0
        IsFalling CharacterMovementComponent::IsFalling 返回true,意味着游戏角色跳起;接着返回false,意味着游戏角色回到地面

EventGraph

设置变量

-
Velocity
Directon
IsRunning
IsFalling

组件

C++


STUCharacterMovementComponent

满足跑步条件时,提高运动速度上限

参数 说明
SpeedAcceleration 加速系数

STUHealthComponent


函数成员

基本函数 操作
构造函数 每帧调用Tick标志位置为false
BeginPlay 初始化生命值;注册AActor::OnTakeAnyDamage
TickComponent 屏蔽
  • 接口
    接口函数 操作
    GetHealth 获取当前生命值;STBaseCharacter调用
    IsDead 判断角色是否死亡
  • 内部逻辑
    说明
    SetHealth 修改生命值;受到伤害或治疗时调用,随之广播
  • 治疗
    说明
    OnHeal 定时器回调函数;治疗;满生命值停止定时器
    StartHealTimer 受到伤害则开启定时器
    StopHealTimer 受到伤害会关闭之前开启的定时器;满生命值时停止定时器
  • 受伤处理函数
    -
    OnTakeAnyDamage 进入条件:伤害为正数,当前角色存活;受伤后,停止已开启的治疗定时器;更新生命值;若角色死亡,广播,否则,开启治疗定时器

数据成员

说明
Health 生命值
MaxHealth 最大生命值
  • 委托成员
    说明
    OnChangeHealth 修改生命值(SetHealth)时广播
    OnDeath 受到伤害时,若死亡,广播
  • 治疗
    说明
    HealTimer 定时器
    AutoHeal 使能治疗
    HealModifier 治疗量
    HealRate 治疗频率
    HealDelay 治疗延时

伤害

C++


STUDevDamageActor


函数成员

基本函数 操作
构造函数 初始化组件
BeginPlay
Tick 绘制球体模拟爆炸范围;对球体内以及相交Actor造成伤害

数据成员

说明
SceneComponent 变换属性
Radius 球体半径
SphereColor 球体颜色
Damage 伤害的数值特征
DoFullDamage 计算伤害机制标志位

STUFireDamageType和STUIceDamageType


阶段性总结



项目结构


资产

-
Content ExternalContent Animation
Levels DefaultMap
Player Animations ABP_BaseCharacter
BS_Locomotion_Run
BS_Locomotion_Walk
BS_Locomotion_Walk_1D
AM_Death
BP_STUBaseCharacter
BP_STUPlayerController
BP_STUGameModeBase

代码

-
ShootThemUp Public Components STUCharacterMovementComponent
STUHealthComponent
Player STUBaseCharacter
STUPlayerController
Dev STUDevDamageActor
STUFireDamageType
STUIceDamageType
STUGameModeBase

项目基础设置ExternalContent

-
载入 ExternalContent/Animation
创建 DefaultMap 并设置
设置地板
配置头文件搜索路径
添加 PlayerStart
设置 编译成功自动保存

游戏角色

-
C++ Player/STUBaseCharacter
Blueprint Player/BP_STUBaseCharacter
Player/Animations/ABP_BaseCharacter
Player/Animations/BS_Locomotion_Run
Player/Animations/BS_Locomotion_Walk
Player/Animations/BS_Locomotion_Walk_1D
Player/Animations/AM_Death

STUBaseCharacter

C++


函数成员

基本函数 操作
构造函数 设置组件类型(初始化列表);初始化组件
BeginPlay 检查组件是否成功创建(check);组件设置;注册委托
SetupPlayerInputComponent 检查组件;绑定平移旋转跳跃跑步键位
  • 键位绑定
    回调函数 键位 相关函数
    MoveRight 轴映射 左右移动 APawn::AddMovementInput;AActor::GetActorRightVector
    MoveForward 轴映射 前后移动 APawn::AddMovementInput;AActor::GetActorForwardVector
    轴映射 左右旋转 ACharacter::AddControllerYawInput
    轴映射 上下旋转 ACharacter::AddControllerPitchInput
    动作映射 跳跃 ACharacter::Jump
    RunEnable,RunDisable 动作映射 跑步
  • 接口
    接口函数 操作
    GetDirection 计算前进方向和速度方向的夹角;供ABP_STBaseCharacter使用
    IsRunning 判断角色是否满足跑步条件;供STUCharacterMovementComponent使用;供ABP_STBaseCharacter使用
  • 委托
    处理函数 作用 委托成员 操作
    OnChangeHealth 修改显示生命值 HealthComponent::OnChangeHealth 修改HealthTextComponent文本
    OnDeath 游戏角色死亡处理 HealthComponent::OnDeath 播放死亡动画剪辑;禁止操作Character;定时销毁;切换到观察视角
    OnGroundLanded 计算落地伤害 ACharacter::LandedDelegate 计算落地伤害;对Character调用TakeDamage

数据成员

组件 用途
SpringArmComponent 以游戏角色为中心左右旋转
CameraComponent 第三视角
CharacterMovementComponent 运动组件
HealthComponent 生命值系统
HealthTextComponent 显示生命值
  • 标志位
    说明
    AbleRun 跑步键位是否按下
    IsForward 向前方向键是否按下
  • 游戏角色死亡逻辑
    说明
    DeathAnimMontage 死亡动画剪辑
    LifeSpanOnDeath 销毁角色定时间隔
  • 落地伤害逻辑
    说明
    LandedDamageRange 伤害范围
    LandedDamageVelocityRange 造成伤害的速度范围

Player/BP_STUBaseCharacter

Blueprint


CapsuleComponent


MeshComponent

说明
Mesh > Skeletal Mesh Asset HeroTPP
Materials > Element 0 HeroTPP
Animation Mode UseAnimationBlueprint
AnimClass ABP_BaseCharacter

SpringArmComponent

说明
UsePawnControlRotation true

HealthComponent


HealthTextComponent

说明
Horizontal Alignment Center

Player/Animations/ABP_BaseCharacter

Blueprint


AnimGraph

  • 状态机

    1. Locomotion > Slot > OutputPose
    2. 状态
      状态 说明
      走路 Walk BS_Locomotion_Walk;混合空间
      跑步 Run BS_Locomotion_Run;混合空间1D
      跳跃 JumpStart
      JumpLoop
      JumpEnd
      死亡 AM_Death;动画剪辑
    3. 变量
      • 动画输入
        名称
        速度 Velocity
        速度和前进方向的夹角 Directon
      • 转换条件
        说明
        IsRunning C++ 满足3个条件:按下Shift;速度和前进方向夹角为0(或按下W/Up);速度不为0
        IsFalling CharacterMovementComponent::IsFalling 返回true,意味着游戏角色跳起;接着返回false,意味着游戏角色回到地面

EventGraph

设置变量

-
Velocity
Directon
IsRunning
IsFalling

组件

C++


STUCharacterMovementComponent

满足跑步条件时,提高运动速度上限

参数 说明
SpeedAcceleration 加速系数

STUHealthComponent


函数成员

基本函数 操作
构造函数 每帧调用Tick标志位置为false
BeginPlay 初始化生命值;注册AActor::OnTakeAnyDamage
TickComponent 屏蔽
  • 接口
    接口函数 操作
    GetHealth 获取当前生命值;STBaseCharacter调用
    IsDead 判断角色是否死亡
  • 内部逻辑
    说明
    SetHealth 修改生命值;受到伤害或治疗时调用,随之广播
  • 治疗
    说明
    OnHeal 定时器回调函数;治疗;满生命值停止定时器
    StartHealTimer 受到伤害则开启定时器
    StopHealTimer 受到伤害会关闭之前开启的定时器;满生命值时停止定时器
  • 受伤处理函数
    -
    OnTakeAnyDamage 进入条件:伤害为正数,当前角色存活;受伤后,停止已开启的治疗定时器;更新生命值;若角色死亡,广播,否则,开启治疗定时器

数据成员

说明
Health 生命值
MaxHealth 最大生命值
  • 委托成员
    说明
    OnChangeHealth 修改生命值(SetHealth)时广播
    OnDeath 受到伤害时,若死亡,广播
  • 治疗
    说明
    HealTimer 定时器
    AutoHeal 使能治疗
    HealModifier 治疗量
    HealRate 治疗频率
    HealDelay 治疗延时

伤害

C++


STUDevDamageActor


函数成员

基本函数 操作
构造函数 初始化组件
BeginPlay
Tick 绘制球体模拟爆炸范围;对球体内以及相交Actor造成伤害

数据成员

说明
SceneComponent 变换属性
Radius 球体半径
SphereColor 球体颜色
Damage 伤害的数值特征
DoFullDamage 计算伤害机制标志位

STUFireDamageType和STUIceDamageType