PacManCharacter.cpp
void APacManCharacter::MoveXAxis(float AxisValue)
{
// 只有游戏开始的时候才能移动
if (GameMode->GetCurrentState() == EGameState::EPlaying)
{
CurrentVelocity.X = AxisValue;
AddMovementInput(CurrentVelocity);
}
}
void APacManCharacter::MoveYAxis(float AxisValue)
{
// 只有游戏开始的时候才能移动
if (GameMode->GetCurrentState() == EGameState::EPlaying)
{
CurrentVelocity.Y = AxisValue;
AddMovementInput(CurrentVelocity);
}
}
Enemy.cpp
AEnemy::AEnemy()
{
// 启用碰撞函数
SetActorEnableCollision(true);
}
void AEnemy::BeginPlay()
{
Super::BeginPlay();
// 注册碰撞函数
GetCapsuleComponent()->OnComponentBeginOverlap.AddDynamic(this, &AEnemy::OnCollision);
}
// 是否移动
void AEnemy::SetMove(bool bMoveIt)
{
// 获得AI
// 最后括号里面的AIControllerClass弃用 换成 GetController()
AAIEnemy* AI = Cast<AAIEnemy>(GetController());
// 移动
if (bMoveIt)
{
// 找下一个点
AI->SearchNewPoint();
}
else
{
// 停止移动
AI->StopMove();
}
}
项目设置---引擎---Collision---新建对象通道
新建通道:
Preset:
新建
新建概述文件:
只需要和墙、地板发生碰撞,静态
Block :区块
区块:就是阻碍的意思
EnemyBody---碰撞预设值 改成 Enemy
CapsuleComponent---碰撞预设值 也改成 Enemy
解决场景中的敌人不移动的办法:
把场景中的敌人都删除,然后再重新拖入试一下
这样场景中的敌人就可以移动了
注册碰撞函数
启用碰撞函数:
主角的碰撞预设值是:Pawn
重叠:Overlap,一致才能发生作用