Полезное

Мы Вконтакте

Discord канал

#
Аватара пользователя
Пользователь
Сообщения: 110
Есть у меня такая цепочка иерархии, в которой объект справа является полем (или элементом в случае массива) объекта, указанного слева:
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: все упомянутые классы - пользовательские, унаследованные от соответствующих движковых.
Аватара пользователя
Тех. администратор
Сообщения: 367
Опишите ещё раз, подробнее. Желательно с кусками кода. И как spawn делается.
Аватара пользователя
Пользователь
Сообщения: 110
К сожалению, мы не могли терять время и уже ушли от этого варианта реализации, пожертвовав пока красотой конструкции в угоду скорейшей работоспособности. Поэтому, боюсь, я сейчас уже не смогу восстановить ту версию кода. Я осознанно не стал вдаваться в подробности, т.к. пост значительно приобрёл бы в объёме, а мне он и так кажется сложновато читаемым. Я просто надеялся услышать какие-то мысли, или опыт тех, кто сталкивался с подобной проблемой неработающего вызова RPC (предположительно вызванного глубиной вложенности объекта, из которого я пытаюсь этот вызов осуществить).
Аватара пользователя
Тех. администратор
Сообщения: 367
Не используете даже git?
Ну да ладно.


Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 57

UEngine.ru © 2017
Все права защищены. При копировании материалов с сайта, ссылка на первоисточник обязательна.
Яндекс.Метрика
Главная страница