167 |
С т р а н и ц а
2. Далее, в панели по левую сторону, под
Engine прокручивайте вниз, пока не
увидите
Input.
3. По правую сторону, вы можете установить привязки (
Bindings). Щёлкните по
маленькой стрелке после
Axis Mapping, чтобы открыть меню. Добавьте
только две оси на карту, чтобы начать. Одна называется
Forward – Вперёд
(связана с буквой W на клавиатуре), а вторая называется
Strafe – Обстрел
(связанная с буквой D на клавиатуре). Запомните названия, которые вы
даёте, мы скоро обратимся к ним в коде С++.
4. Закройте диалоговое окно
Project Settings. Теперь откройте ваш С++ код.
В конструкторе Avatar.h, вам нужно добавить три объявления
функции-члена, как
показано здесь:
UCLASS()
class GOLDENEGG_API AAvatar : public ACharacter
{
GENERATED_UCLASS_BODY()
//
Новые! Эти три новых объявления
функций-членов
//
будут применяться для движения нашего игрока!
void SetupPlayerInputComponent(class UInputComponent* InputComponent)
override;
void MoveForward( float amount );
void MoveRight( float amount );
};
168 |
С т р а н и ц а
Обратите внимание, что первая функция-член, которую мы добавляем
(
SetupPlayerInputComponent
) является подменой для виртуальной функции.
SetupPlayerInputComponent
это виртуальная
функция в базовом классе Apawn.
В файле Avatar.cpp, вам нужно поместить тела функций. Добавьте следующие
определения функции-члена:
void AAvatar::SetupPlayerInputComponent(class UInputComponent*
InputComponent)
{
check(InputComponent);
InputComponent->BindAxis("Forward", this, &AAvatar::MoveForward);
InputComponent->BindAxis("Strafe", this, &AAvatar::MoveRight);
}
Эта
функция-член ищет привязки осей Forward и Strafe, которые мы только что
создали в Unreal Editor и связывает их к
функции-члену внутри этого класса. К
какой
функции-члену должны мы привязать? Почему мы должны привязывать к
AAvatar::MoveForward
и
AAvatar::MoveRight
. Вот определение
функции-члена для этих
двух функций:
void AAvatar::MoveForward( float amount )
{
//
Не вводите тело этой функции, если контроллер
//
ещё не установлен или если сумма для движения равна 0
if( Controller && amount )
{
FVector fwd = GetActorForwardVector();
//
мы вызываем AddMovementInput, чтобы собственно двигать
//
игрока `суммой` в направлениях `fwd`
AddMovementInput(fwd, amount);
}
}
void AAvatar::MoveRight( float amount )
{
if( Controller && amount )
{
FVector right = GetActorRightVector();
AddMovementInput(right, amount);
}
}
Достарыңызбен бөлісу: