Полезное

Мы Вконтакте

Discord канал

#
Аватара пользователя
Пользователь
Сообщения: 98
Добрый день!
На сцене есть персонаж и еще несколько Actor-ов, эти Actor-ы состоят из кубика, к нему добавлен компонент сфера, к которой добавлен Plane.
Я хочу отключить коллайдер у Plane.
Я нахожу их с помощью
Код:
UGameplayStatics::GetAllActorsOfClass(this, AMyActor666::StaticClass(), mas);

где mas - TArray<Actor*>
Затем в цикле получаю у каждого Эктора его компоненты:
Код:
TArray<UActorComponent*> mas3=mas[i]->GetComponentsByClass(UActorComponent::StaticClass());

И вот дальше я не знаю что делать...
У UActorComponent нет SetActorEnableCollision (или чего-то в этом роде)
1. Как отключить коллайдер компонента чужого Actor-а?
2. Можно ли изменить тип (Collision Presets) коллизии компонента чужого Actor-а?
Аватара пользователя
Пользователь
Сообщения: 195
тебе поможет Cast<>
Аватара пользователя
Пользователь
Сообщения: 98
Спасибо! Но возник ряд непоняток. Я сделал так:
Код:
TArray<UActorComponent*> mas3=mas[xy]->GetComponentsByClass(UActorComponent::StaticClass());
for (int xy3 = 0; xy3< mas3.Num(); xy3++)
{
   if (mas3[xy3]->GetName() == "Plane")
   {
      UActorComponent* doska = mas3[xy3];
      UStaticMeshComponent* doska_= Cast<UStaticMeshComponent, UActorComponent>(doska);
      doska_->SetCollisionEnabled(ECollisionEnabled::NoCollision);
   }
}

До этого я нашел все интересующие меня Actor-ы.
Задем я создаю массив mas3, в который заталкиваю ссылки на все компоненты.
Потом проверяю, нет ли компонента с именем "Plane".
после этого привожу тип из UActorComponent к UStaticMeshComponent
И вот тут у меня возникла еще пара вопросов, ответы на которые очень для меня важны:
1. Все компоненты Actor-а имеют тип UActorComponent?
2. У меня от С++ класса создан Блюпринт, в котором я и размещал все свои сферы-кубики и плейны:
Изображение
КАК ОПРЕДЕЛИТЬ ТИП КОМПОНЕНТА, к которому мне приводить?
Вот у Plane стоит UStaticMesh, при этом у него нет SetCollisionEnabled... И я только методом тыка привел к UStaticMeshComponent. Это, блин, совсем не очевидно.
А как определить, например, тип у источников света к которому приводить, чтобы получить доступ к свойствам...
Аватара пользователя
Пользователь
Сообщения: 195
1. приводишь ко всем тебе нужным типам и смотришь к какому привелось
2. UStaticMeshComponent* doska_= Cast<UStaticMeshComponent>(doska); можно и так и писать
3. SetCollisionEnabled этот метод у класса UPrimitiveComponent, а от него наследуются все коллизионные объекты
Аватара пользователя
Пользователь
Сообщения: 98
gary_cho писал(а):
1. приводишь ко всем тебе нужным типам и смотришь к какому привелось

У меня сегодня один раз все привелось, скомпилировалось, а при запуске закрашилось и вылетела UT4... Привел UStaticMeshComponent к AActor.

Не, у меня немножко другой вопрос, компоненты Эктора можно получить, например, с помощью GetComponentsByClass, но почему он возвращает их как UActorComponent... А других способов нет, чтобы не надо было гадать что за класс у объекта и к чему приводить?
Аватара пользователя
Пользователь
Сообщения: 195
почитай что такое полиформизм в с++, и тебе сразу всё станет понятно! Все твои вопросы сводятся к незнанию с++. И то, что у тебя крашит движок это твои ошибки по незнанию с++, скорее всего не проверяешь указатели на валидность
Аватара пользователя
Пользователь
Сообщения: 98
Цитата:
скорее всего не проверяешь указатели на валидность

Исключено, массив заполняется какими-то объектами, которые выдает функция GetComponentsByClass. Если она может выдать пустые указатели вникуда... А она так не может.
Цитата:
почитай что такое полиформизм в с++, и тебе сразу всё станет понятно! Все твои вопросы сводятся к незнанию с++. И то, что у тебя крашит движок это твои ошибки по незнанию с++

Да, после Шарпа опять восстанавливать все тонкости плюсов - болезненно, конечно.
Но у меня проблемы, скорее, от незнания что от кого наследуется, иерархии объектов... Да и после Юньки все кажется вообще архитопорным, излишне усложненным...
В Юнити есть отправной класс - Gameobject, все вертится вокруг него, на сцене все геймобжекты, от пустышки и персонажа до лампочек и солнца. Причем нет разницы между дочерним и родительским компонентом - они все, и персонаж, и меч в его руке, всё это Gameobject-ы...
А всякие там коллайдеры, ригидбади (физика) и т.п. трансформы - это все компоненты, которые можно навесить хоть на пустышку (аналог Scene).

А тут все совсем нелогично: тут приаттаченые объекты нифига не дочерние, а дочерние - нифига не компоненты.
Ок, вроде есть центральный класс AActor - родоначальник всего, от него наследуются все остальные, так вот компоненты - это похоже не Actor-ы... Или Actor-ы?
Аватара пользователя
Пользователь
Сообщения: 195
ну ты в коде посмотри что от чего наследуется.. c# и с++ разные вещи, поэтому разная иерархия
http://api.unrealengine.com/INT/API/Run ... index.html
Аватара пользователя
Пользователь
Сообщения: 98
Ладно, спасибо! В любом случае, ответы на вопросы получены!


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

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