Есть у меня такая цепочка иерархии, в которой объект справа является полем (или элементом в случае массива) объекта, указанного слева:
Pawn ----> uproperty: ActorComponent* ----> uproperty: TArray<UStruct> ----> эл-т массива: UStruct ----> uproperty: Actor* ----> uproperty: Prop1
Коротко суть проблемы: Не происходит RPC-вызов метода класса ActorDerived (унаследован от Actor), внутри которого должно было бы измениться значение Prop1 (uproperty этого же класса ActorDerived).
Подробнее:
У Pawn'а есть uproperty - указатель на ActorComponent (создаётся сам компонент в констр-торе Pawn'а
и тут же для него вызвано "->SetIsReplicated(true);"
>>> #1 т.е. ActorComponent реплицируется.
В компоненте этом есть uproperty массив TArray<UStruct>, помеченное как "Replicated" (и внесено в реализацию метода ::GetLifetimeReplicatedProps())
>>> #2 т.е. этот массив тоже реплицируется.
В UStruct (тип элементов массива из предыдущего абзаца) есть uproperty типа указателя на Actor. (не помечено, как "Replicated", т.к. для USTRUCT этого не нужно (прочёл и проверил)).
Прочёл и проверил, что при репликации указателя на Actor'а, реплицируется и сам Actor, если у него включено `bReplicates`. У меня включено.
>>> #3 т.е. указываемый объект типа Actor тоже реплицируется.
От этого баз.класса Actor унаследован другой класс, скажем ActorDerived, (проверено - добавленные поля реплицируются). У ActorDerived есть реплицируемое uproperty, скажем `Prop1`, для которого (!Внимание суть проблемы!:) я пытаюсь вызвать RPC-метод, помеченный как "Server, Reliable, WithValidate" и оформленный по правилам (c реализациями "..._Implementation" и "..._Validate"). Метод этот должен был бы поменять значение нашей `Prop1`. (!ПРОБЛЕМА!:)Но вызова не происходит. т.е. в блупринтах всё норм - до вызова этого метода выполнение доходит, как убедился на брейкпоинтах, расставленных в C++ коде этого RPC-метода, RPC-вызов не происходит. И значение нашей `Prop1` остаётся неизменным. =(
Было подозрение, что owner Actor'a, из которого вызываю RPC не является контроллером MyPawn'a. Но при spawn'е этого Actor'а я передаю Owner'ом PlayerController Pawn'а. Т.е., по-идее, проблема должна быть не в этом...
Мне кажется, что где-то на пути иерархии подобъектов от Pawn'а до ActorDerived'а, теряется способность к вызову RPC. Но ПОЧЕМУ??
Спасибо за любые Ваши мысли и идеи!
PS: все упомянутые классы - пользовательские, унаследованные от соответствующих движковых.