TurnBased Tactical Combat On Grid
September 9, 2025About 1 min
TurnBased Tactical Combat On Grid
- 课程地址:https://www.udemy.com/course/turn-based-tactical-combat-on-grid/
- 项目地址:https://github.com/BanMing/TurnBasedOnGrid
接入DebugMenu插件,添加IntPoint类型
相机调试参数:

Grid调试器:

添加鼠标debug信息:

添加鼠标高亮格子:

修改InstancesMesh中某个实例的材质的参数:
const FLinearColor Color = GetColorFromStates(TileStates);
InstancesMeshComp->SetCustomDataValue(NewInstanceIndex, 0, Color.R);
InstancesMeshComp->SetCustomDataValue(NewInstanceIndex, 1, Color.G);
InstancesMeshComp->SetCustomDataValue(NewInstanceIndex, 2, Color.B);
在材质中使用PerInstanceCustomData节点读取:

使用自定义数据前提是需要设置InstancesMesh的NumCustomDataFloats变量
InstancesMeshComp->NumCustomDataFloats = 3;
添加选中状态显示:

使用EnhancedInput 设置输入:
void APlayerAction::SetupInput()
{
check(InputContext);
check(SelectAction);
check(UnSelectAction);
APlayerController* PC = UGameplayStatics::GetPlayerController(this, 0);
if (!PC)
{
return;
}
if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PC->GetLocalPlayer()))
{
if (InputContext)
{
Subsystem->AddMappingContext(InputContext, 0);
}
}
if (UEnhancedInputComponent* EnhancedInputComponent = Cast<UEnhancedInputComponent>(PC->InputComponent))
{
EnhancedInputComponent->BindAction(SelectAction, ETriggerEvent::Started, this, &ThisClass::OnSelectTile);
EnhancedInputComponent->BindAction(UnSelectAction, ETriggerEvent::Started, this, &ThisClass::OnUnSelectTile);
}
}
清空绑定:
void APlayerAction::ShotdownInput()
{
APlayerController* PC = UGameplayStatics::GetPlayerController(this, 0);
if (!PC)
{
return;
}
if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PC->GetLocalPlayer()))
{
if (InputContext)
{
Subsystem->RemoveMappingContext(InputContext);
}
}
if (UEnhancedInputComponent* EnhancedInputComponent = Cast<UEnhancedInputComponent>(PC->InputComponent))
{
EnhancedInputComponent->ClearBindingsForObject(this);
}
}
- 增删格子行为
- 调整格子高度


