Unreal Engine 4 http://uengine.ru/forum/ |
|
Отключить коллайдер у компонента чужого Actor-а http://uengine.ru/forum/viewtopic.php?f=19&t=13629 |
Страница 1 из 1 |
Автор: | rachok [ 26 апр 2018, 13:07 ] |
Заголовок сообщения: | Отключить коллайдер у компонента чужого Actor-а |
Добрый день! На сцене есть персонаж и еще несколько 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-а? |
Автор: | gary_cho [ 26 апр 2018, 14:11 ] |
Заголовок сообщения: | |
тебе поможет Cast<> |
Автор: | rachok [ 27 апр 2018, 09:21 ] |
Заголовок сообщения: | |
Спасибо! Но возник ряд непоняток. Я сделал так: Код: 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. Это, блин, совсем не очевидно. А как определить, например, тип у источников света к которому приводить, чтобы получить доступ к свойствам... |
Автор: | gary_cho [ 27 апр 2018, 09:28 ] |
Заголовок сообщения: | |
1. приводишь ко всем тебе нужным типам и смотришь к какому привелось 2. UStaticMeshComponent* doska_= Cast<UStaticMeshComponent>(doska); можно и так и писать 3. SetCollisionEnabled этот метод у класса UPrimitiveComponent, а от него наследуются все коллизионные объекты |
Автор: | rachok [ 27 апр 2018, 10:35 ] |
Заголовок сообщения: | Re: |
gary_cho писал(а): 1. приводишь ко всем тебе нужным типам и смотришь к какому привелось У меня сегодня один раз все привелось, скомпилировалось, а при запуске закрашилось и вылетела UT4... Привел UStaticMeshComponent к AActor. Не, у меня немножко другой вопрос, компоненты Эктора можно получить, например, с помощью GetComponentsByClass, но почему он возвращает их как UActorComponent... А других способов нет, чтобы не надо было гадать что за класс у объекта и к чему приводить? |
Автор: | gary_cho [ 27 апр 2018, 13:49 ] |
Заголовок сообщения: | |
почитай что такое полиформизм в с++, и тебе сразу всё станет понятно! Все твои вопросы сводятся к незнанию с++. И то, что у тебя крашит движок это твои ошибки по незнанию с++, скорее всего не проверяешь указатели на валидность |
Автор: | rachok [ 27 апр 2018, 15:06 ] |
Заголовок сообщения: | |
Цитата: скорее всего не проверяешь указатели на валидность Исключено, массив заполняется какими-то объектами, которые выдает функция GetComponentsByClass. Если она может выдать пустые указатели вникуда... А она так не может. Цитата: почитай что такое полиформизм в с++, и тебе сразу всё станет понятно! Все твои вопросы сводятся к незнанию с++. И то, что у тебя крашит движок это твои ошибки по незнанию с++ Да, после Шарпа опять восстанавливать все тонкости плюсов - болезненно, конечно. Но у меня проблемы, скорее, от незнания что от кого наследуется, иерархии объектов... Да и после Юньки все кажется вообще архитопорным, излишне усложненным... В Юнити есть отправной класс - Gameobject, все вертится вокруг него, на сцене все геймобжекты, от пустышки и персонажа до лампочек и солнца. Причем нет разницы между дочерним и родительским компонентом - они все, и персонаж, и меч в его руке, всё это Gameobject-ы... А всякие там коллайдеры, ригидбади (физика) и т.п. трансформы - это все компоненты, которые можно навесить хоть на пустышку (аналог Scene). А тут все совсем нелогично: тут приаттаченые объекты нифига не дочерние, а дочерние - нифига не компоненты. Ок, вроде есть центральный класс AActor - родоначальник всего, от него наследуются все остальные, так вот компоненты - это похоже не Actor-ы... Или Actor-ы? |
Автор: | gary_cho [ 27 апр 2018, 16:44 ] |
Заголовок сообщения: | |
ну ты в коде посмотри что от чего наследуется.. c# и с++ разные вещи, поэтому разная иерархия http://api.unrealengine.com/INT/API/Run ... index.html |
Автор: | rachok [ 28 апр 2018, 08:58 ] |
Заголовок сообщения: | |
Ладно, спасибо! В любом случае, ответы на вопросы получены! |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |