Hi there, I’m trying to build a sim using Unreal and Cesium for Unreal, and I’ve created a character that is georeferenced with C++ behind it:
georeference = CreateDefaultSubobject(TEXT(“Character”));
georeference->SetMobility(EComponentMobility::Movable);
georeference->MoveToLongitudeLatitudeHeight(glm::dvec3(-72.5, 40.5, 100));|
The last line is causing a crash; when it’s commented out the rest of the game works properly. Any ideas on why? I need to update the actor’s location in lat/lon/alt dynamically in C++. Thanks!
John
Hi @DrSustersic,
What type of object is Character
? Is it derived from a Cesium object? The only Cesium object with a MoveToLongitudeLatitudeHeight
method is UGlobeAnchorComponent
, and I don’t think it would make sense to derive a character from that. If that method is your own, what is its implementation?
Assuming you’re calling MoveToLongitudeLatitudeHeight
on a globe anchor component, it may be necessary to call ResolveGeoreference()
prior to MoveToLongitudeLatitudeHeight
. That shouldn’t cause a crash, but the method may log an error and otherwise do nothing.
Kevin
Hi Kevin,
Appreciate your thoughts - thanks!
It’s the Unreal ACharacter class (derived from APawn). I’m associating the CesiumGeoreference in the constructor and spawning this character programmatically in C++.
I learned a couple of things since my post - (1) Setting Latitude, Longitude, and Height on the CesiumGeoreference only triggers an update (via call through MoveToLongitudeLatitudeHeight(…) ) in Editor mode (you can see this in the C++ code for CesiumGeoreference). (2) calling MoveToLongitudeLatitudeHeight(…) triggers the exception when invoked in the constructor (guessing something isn’t fully instantiated that the method needs. I was able to get this to work by moving the initial ‘MoveTo…’ call to BeginPlay() method where it makes more sense.
Thanks again!
John