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

Ошибки при сборке ue4.26 vs 2019 18.6

#0
20:59, 23 фев. 2021

Привет всем!
Проблема в следующем создаю topdown/с++
добавляю в MyProjectPlayerController.h/cpp (сгенерированы ue4)
в .h
после подключения заголовочных
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FMoveOnClient, AController*, controller, const FVector&, goal);
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(FMoveOnServer, AController*, controller, const FVector&, goal);

в сам класс

  virtual void BeginPlay() override;

  UFUNCTION(SERVER, Reliable)
  void MoveToCursorOnServer(AController* controller, const FVector& goal);
  UFUNCTION(Client, Reliable)
  void MoveToCursorOnClient(AController* controller, const FVector& goal);

private:
  UPROPERTY(BlueprintAssignable)
  FMoveOnServer OnMoveToCursorOnServer;
  UPROPERTY(BlueprintAssignable)
  FMoveOnClient OnMoveToCursorOnClient;
а в .cpp

void AMyProjectPlayerController::BeginPlay()
{
  OnMoveToCursorOnServer.AddDynamic(this, &AMyProjectPlayerController::MoveToCursorOnServer);
  OnMoveToCursorOnClient.AddDynamic(this, &AMyProjectPlayerController::MoveToCursorOnClient);
}

void AMyProjectPlayerController::MoveToCursorOnServer(AController* controller, const FVector& goal)
{
  UAIBlueprintHelperLibrary::SimpleMoveToLocation(controller, goal);
  OnMoveToCursorOnClient.Broadcast(controller, goal);
}

void AMyProjectPlayerController::MoveToCursorOnClient(AController* controller, const FVector& goal)
{
  UAIBlueprintHelperLibrary::SimpleMoveToLocation(controller, goal);
}

а в MoveToMouseCursor заменяю вызов

        //UAIBlueprintHelperLibrary::SimpleMoveToLocation(this, MyPawn->GetCursorToWorld()->GetComponentLocation());
        OnMoveToCursorOnServer.Broadcast(this, MyPawn->GetCursorToWorld()->GetComponentLocation());

и выдает такую ерунду:
MyProjectPlayerController.gen.cpp.obj : error LNK2005: "protected: void __cdecl AMyProjectPlayerController::MoveToCursorOnClient(class AController *,struct FVector const &)" (?MoveToCursorOnClient@AMyProjectPlayerController@@IEAAXPEAVAController@@AEBUFVector@@@Z) уже определен в MyProjectPlayerController.cpp.obj
1>MyProjectPlayerController.gen.cpp.obj : error LNK2005: "protected: void __cdecl AMyProjectPlayerController::MoveToCursorOnServer(class AController *,struct FVector const &)" (?MoveToCursorOnServer@AMyProjectPlayerController@@IEAAXPEAVAController@@AEBUFVector@@@Z) уже определен в MyProjectPlayerController.cpp.obj
1>    Создается библиотека E:\Unreal Projects\MyProject\Intermediate\Build\Win64\UE4Editor\Development\MyProject\UE4Editor-MyProject.suppressed.lib и объект E:\Unreal Projects\MyProject\Intermediate\Build\Win64\UE4Editor\Development\MyProject\UE4Editor-MyProject.suppressed.exp
1>MyProjectPlayerController.cpp.obj : error LNK2001: неразрешенный внешний символ "public: virtual void __cdecl AMyProjectPlayerController::MoveToCursorOnClient_Implementation(class AController *,struct FVector const &)" (?MoveToCursorOnClient_Implementation@AMyProjectPlayerController@@UEAAXPEAVAController@@AEBUFVector@@@Z).
1>MyProjectPlayerController.gen.cpp.obj : error LNK2001: неразрешенный внешний символ "public: virtual void __cdecl AMyProjectPlayerController::MoveToCursorOnClient_Implementation(class AController *,struct FVector const &)" (?MoveToCursorOnClient_Implementation@AMyProjectPlayerController@@UEAAXPEAVAController@@AEBUFVector@@@Z).
1>MyProjectPlayerController.cpp.obj : error LNK2001: неразрешенный внешний символ "public: virtual void __cdecl AMyProjectPlayerController::MoveToCursorOnServer_Implementation(class AController *,struct FVector const &)" (?MoveToCursorOnServer_Implementation@AMyProjectPlayerController@@UEAAXPEAVAController@@AEBUFVector@@@Z).
1>MyProjectPlayerController.gen.cpp.obj : error LNK2001: неразрешенный внешний символ "public: virtual void __cdecl AMyProjectPlayerController::MoveToCursorOnServer_Implementation(class AController *,struct FVector const &)" (?MoveToCursorOnServer_Implementation@AMyProjectPlayerController@@UEAAXPEAVAController@@AEBUFVector@@@Z).
1>E:\Unreal Projects\MyProject\Binaries\Win64\UE4Editor-MyProject.dll : fatal error LNK1120: неразрешенных внешних элементов: 2
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.MakeFile.Targets(51,5): error MSB3073: выход из команды "C:\UE_4.26\Engine\Build\BatchFiles\Rebuild.bat MyProjectEditor Win64 Development -Project="E:\Unreal Projects\MyProject\MyProject.uproject" -WaitMutex -FromMsBuild" с кодом -1.


#1
(Правка: 21:10) 21:02, 23 фев. 2021

я хочу задействовать движение по курсору клиент/сервер
на блюпринтах все работает, хотел также сделать на c++, что-то пошло не так
а если использовать макрос
DECLARE_EVENT_TwoParams( AMyProjectPlayerController, FMoveOnServer , AController*, const FVector&)
он ругается, что FMoveOnServer должен быть uclass, ustruct, uenum
в строке объявления события
  UPROPERTY(BlueprintAssignable)
  FMoveOnServer OnMoveToCursorOnServer;

#2
(Правка: 13:14) 13:06, 24 фев. 2021

Когда создаешь reliable функции они должны иметь вид в cpp имплементации такой:
Имя в .h определено как

UFUNCTION(SERVER, Reliable)
  void MoveToCursorOnServer(AController* controller, const FVector& goal);
А в .cpp должно для сервера быть так:
void MoveToCursorOnServer_Implementation(AController* controller, const FVector& goal)
bool MoveToCursorOnServer_Validate(AController* controller, const FVector& goal)

Для Client, Reliable должны создаваться только c _Implementation.
Т.е. ты не руками должен это делать, а когда в студии правой кнопкой мышки тыкаешь по функции которую ты описал в хидере, там будет в контекстном меню create implementation и должен intellisense сам за тебя создавать с такими именами.
Если студия не создает, то руками тогда сам допиши эти сигнатуры.
Еще раз для client надо дописывать void имя_Implementation(параметры) , для server надо создавать 2 функции, одна void имя_Implementation(параметры), вторая bool имя_Validate(параметры)
В Validate всегда ставь return true

#3
13:20, 24 фев. 2021

О, благодарю, так и есть, все заработало
в документации такого не заметил

#4
13:25, 24 фев. 2021

вот кстати в документации это написано
https://docs.unrealengine.com/en-US/InteractiveExperiences/Networ… ew/index.html
блин, протупил

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