Блокировка стрельбы при беге
Возможность стрельбы при беге смотрится нереалистично из-за нашей анимации бега, поэтому стрельбу лучше отключать при беге.
Рекомендую сначала попробовать реализовать данную логику самостоятельно, как домашнее задание.
Улучшение можно сделать после Лекции 065 или в самом конце прохождения курса.
Решение
Добавляем новый флаг в базовый класс оружия
FireInProgress
void ASTUBaseWeapon::StartFire()
{
FireInProgress = true;
}
void ASTUBaseWeapon::StopFire()
{
FireInProgress = false;
}
bool ASTUBaseWeapon::IsFiring() const
{
return FireInProgress;
}
В компонент оружия также добавляем функцию:
bool USTUWeaponComponent::IsFiring() const
{
return CurrentWeapon && CurrentWeapon->IsFiring();
}
В классе персонажа создаем функцию
OnStartFire
и биндимся на нее при стрельбе, а не напрямую, как раньше, в компонент оружия:
PlayerInputComponent->BindAction("Fire", IE_Pressed, this, &ASTUPlayerCharacter::OnStartFire);
После этого добавляем код для функции
OnStartFire
и обновляем две другие функции:
void ASTUPlayerCharacter::OnStartFire()
{
if (IsRunning()) return;
WeaponComponent->StartFire();
}
...
void ASTUPlayerCharacter::OnStartRunning()
{
WantsToRun = true;
if (IsRunning())
{
WeaponComponent->StopFire();
}
}
...
void ASTUPlayerCharacter::MoveForward(float Amount)
{
IsMovingForward = Amount > 0.0f;
if (Amount == 0.0f) return;
AddMovementInput(GetActorForwardVector(), Amount);
if (IsRunning() && WeaponComponent->IsFiring())
{
WeaponComponent->StopFire();
}
}
Дополнительные детали с вызовом родительских функций
StartFire
иStopFire
можно посмотреть в репозитории
Last updated
Was this helpful?