Hello. I’ve been searching through the documentation but i didnt find good example. So i got pawn class which consists of cube mesh. I got also MyAIController class. SpawnActor spawns the pawn, but how should i create the controller for it? And is it possible to control the pawn controller using my main character controller?
What i mean is to send command to pawn controller using the playercontroller, and the pawn controller would do things i want with the pawn
Call of the APawn::SpawnDefaultController() will create AIController instance for pawn. You may send commands for pawns from one place such as APlayerController or HUD.
But what if i have my own AIController? How can i select which class is the controller?
What i mean is i got MyPlayerController which is being set up in GameMode, and i got also MyAIController. Wouldnt the function be confused which one to choose? it takes no parameters so.
For a selection of the controller’s class you need to create blueprint of the pawn and to select the class in the field AIControllerClass.
/**
* Default class to use when pawn is controlled by AI.
*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta=(DisplayName="AI Controller Class"), Category=Pawn)
TSubclassOf<AController> AIControllerClass;
Setting AIControllerClass in Pawn constructor works and the aicontroller moves him to random location as specified in Tick function. But this works only when i drag and drop the pawn in editor. When i spawn the Pawn with SpawnActor it doesnt move.
Thats the MyAIController
Thats the pawn
When i drag and drop i see debug output that controller’s consutructor is called and then it ticks. But when i use SpawnActor i see only message from Pawn’s BeginPlay() method, when its clearly stated in constructor that AIControllerClass = AMyAIController::StaticClass();
What im doin wrong?
Okay edit2:
I made it work. I removed the AIControllerClass from pawn constructor. Instead i use SpawnActor for Pawn, SpawnActor for controller and then Possess the new pawn with new controller. Is it the fully proper way to do this?
And other question, how to properly use MoveToLocation? It seems to not move my pawn (SetActorLocation works fine tho). Do i need to create a movement component first for the pawn to use MoveToLocation function??
No. I use SpawnActor to create instance of controller and then Posses. it works. The reason movetolocation isnt working is that i dont have movement component which im goin to implement now. Wish me luck!
The “main” character controller spawns a pawn when E is pressed, then MyPawn->SpawnDefaultController() is called. I see debug output from controller’s constructor and tick. I created CharacterMovementComponent ( its empty, what should i put inside?? ) and added it to pawn class and initialized in constructor. But i see that UMovementComponentForMyPawn::TickComponent is not being ticked. There is no documentation at that at all i digged the forum, wiki, answers and i still didnt find that basic info how to succesfully control those **** pawns.
Not really weird. CharacterMovementComponent requires a character based class. Hence the “Character” part
Its kind of daft though, because there’s really no reason for movement components to require a special base class, its just a holdover from the inheritance-based nature of old unreal engine code I think. There’s even a trello card on the development trello to make the movement component work on anything. So clearly they know its dumb
It’s because Character and CMC talk to each other so much and talk to lot’s of different properties of one another, so they have to be used together or not at all.
Sure, but actually that suggests a refactor is required, because movement is a pretty basic usage case and should not really be tied to the type of thing needing movement. Its kind of my point really, using real composition you could have simply added the movement component to the pawn and have it work. Equally you could have developed a special movement component and had it work across character and pawn and have it work. That’s the real advantage of components (the compartmentalization of specific features to composable classes).