Войти
Unreal EngineФорумПрограммирование

Как включить основную камеру игрока после ее отключения в UE

#0
(Правка: 22:29) 22:15, 9 апр. 2020

На сцене есть игрок и камера (не камера игрока), на которую я переключаюсь, чтобы проиграть анимацию того, как игрок встает с кровати. Когда анимация заканчивается, я хочу вернуть камеру игрока, но почему-то она оказывается посередине капсулы игрока, а не на уровне глаз, где сама камера находится.

Мне непонятно, какой так изначально объект у player. По идее, в SetViewTarget нужно передавать UCameraComponent, а не APlayerController, но тогда выдает ошибку "no suitable conversion function from "UCameraComponent" to "AActor *" exists"

И у меня есть виджет, который отображает описания предметов, если на них навести курсор. Он почему-то отключается после использования кода ниже

.h

UPROPERTY(EditAnywhere)  AActor* cameraPlayerWakeUp;
UPROPERTY() APlayerController* player;

.cpp

void AAct_31::GameCicle()
{
  player->SetViewTarget(cameraPlayerWakeUp);
        //.. анимация пробуждения
  player->SetViewTarget(player);
}
1 | Как включить основную камеру игрока после ее отключения в UE

#1
(Правка: 23:51) 23:39, 9 апр. 2020

dmitrykozyr
> player->SetViewTarget(player);
может тут нужно player.GetControlledPawn?
ну или саму камеру как компонент найти не долго через каст типа к твоему персонажу

для UE кстати есть отдельная ветка на форуме, старайся постить туда

#2
1:30, 10 апр. 2020

mitroxa
> может тут нужно player.GetControlledPawn?
Что-то не нашел такую функцию. Есть только GetPawn, но если написать

player->SetViewTarget(player->GetPawn());
, то движок крашится.

mitroxa
> ну или саму камеру как компонент найти не долго через каст типа к твоему
> персонажу
Этак так, в смысле?

UPROPERTY(EditAnywhere) UCameraComponent* playerCameraComponent;
Непонятно, что дальше с этим делать
#3
(Правка: 2:10) 2:06, 10 апр. 2020

проверку на null делай, наверно там краш

Cast player->GetPawn() к твоему классу персонажа, в нём можно найти компонент камеры если он задан у тебя в коде
кароче зависит от того что ты там используешь

чара наверно нужно получать, если у тебя используется ACharacter, а не APawn как базовый
  /** Getter for Character */
  FORCEINLINE ACharacter* GetCharacter() const { return Character; }

или кстати если движок крашится, возмножно слетает Posses для твоего чара, хотя вряд ли
тогда может быть проще вызвать player->Possess(твой чар) или как-то так

#4
19:17, 11 апр. 2020

Не очень понял, где компонент камеры должен быть в коде задан.
Вот как я пробовал, но ничего не работает

.h

UPROPERTY() APlayerController* player;
UPROPERTY(EditAnywhere) AActor* cameraPlayerWakeUp;

// What else I've tried:
UPROPERTY(EditAnywhere) UCameraComponent* playerCameraComponent;
UPROPERTY(EditAnywhere) ACharacter* character;
FORCEINLINE ACharacter* GetCharacter() const { return character; }
UPROPERTY(EditAnywhere) APawn* playerPawn;

.cpp

void AAct_31::BeginPlay()
{
    Super::BeginPlay();
    player = UGameplayStatics::GetPlayerController(this, 0);
}

     void AAct_31::GameCicle()
     {
       player->SetViewTarget(cameraPlayerWakeUp);

       //.. animation of awakening

       // What I've tried to set up camera:
       player->SetViewTarget(player);
       player->SetViewTarget(playerCameraComponent);
       player->SetViewTarget(character);
       player->SetViewTarget(playerPawn);
     }
#5
(Правка: 21:24) 21:14, 11 апр. 2020

dmitrykozyr
https://docs.unrealengine.com/en-US/Programming/Tutorials/FirstPe… /7/index.html
вот этот туториал посмотри

создается  AFPSCharacter : public ACharacter
в нём есть переменная
FPSCameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera"));

в контроллере вызываешь GetCharacter()
он возвращает тебе ACharacter*
делаешь каст как-то так
AFPSCharacter* Character = Cast<AFPSCharacter>(controller->GetCharacter());
из этого чара получаешь камеру
Character->FPSCameraComponent
передаешь её в SetViewTarget

сам не проверял, но должно так работать вроде
но там еще нужно не забыть в гейммоде поставить чтобы использовался именно твой тип персонажа, если у тебя их там несколько

#6
0:17, 12 апр. 2020

Спасибо, все получилось

Unreal EngineФорумПрограммирование