GetAllActorsOfClass? https://docs.unrealengine.com/en-US/API/Runtime/Engine/Kismet/UGa… ss/index.html
тот итератор внутри тоже GetAllActorsOfClass использовал.
но так теперь хотя бы не крашится.
но вектор все так же пустой, хотя я уже танков 5ть наверно на уровень воткнул!(
TArray<AActor*> tanksArray; UGameplayStatics::GetAllActorsOfClass(GetWorld( ), TSubclassOf<ATankActor>( ), tanksArray); for ( int i = 0; i < tanksArray.Num( ); ++i) { ATankActor* tank = Cast<ATankActor>( tanksArray[i]); if ( tank) GEngine->AddOnScreenDebugMessage( -1, 30.f, FColor::Yellow, tank->GetFName( ).ToString( )); //Print name of the Actor }
проблема разрешилась
TSubclassOf<AEnemy> classToFind; classToFind = AEnemy::StaticClass(); TArray<AActor*> foundEnemies; UGameplayStatics::GetAllActorsOfClass( GetWorld( ), classToFind, foundEnemies);
а по какой причине редактор может крашится после каждой компиляции?(
и я заметил что это похоже происходит именно тогда, когда в сцену добавлен мой с++ танк.
если удалю все танки перезапущу редактор, то хоть занажимайся он не падает.
где-то память что-ли течет? UE не особо многословен в плане отчета почему он падает(
и еще у меня есть снаряды(AProjectile) которыми стреляют танки.
я не пойму почему у них не срабатывают ни OnHit, ни - OnOverlapBegin, хотя они отталкиваются от кубиков и катаются по полу, только InitialLifeSpan = 4.0f; их и уничтожает.
AddDynamic все сидят в BeginPlay()
cpp https://codeshare.io/5zL4qj
h https://codeshare.io/5eEp47
Suslik
> именно поэтому учиться графике по анриал/юнити туториалам — это полный зашквар.
> учиться нужно отдельно графике
А по этой теме есть подробные туторы ? По анрилу вон дофига.
А по графике раньше почти не было инфы, сейчас хз. Вроде что то даже на ютубе есть, но как там с качеством подачи материала и объяснений не вникал, а тема довольно большая и сложная.
В том же анриле дофига настроек и всяких фич которые не пойми что делают, вроде читаешь мануал смотришь там две картинки показывают на одной фича включена на другой выключена и они почти не отличаются ...
endeavour_pr
> А по графике раньше почти не было инфы, сейчас хз
почитай OpenGL суперкнига
вопрос дня: Спавнить ParticleSystem из Projectiles это гиблая идея?
void AProjectile::BeginPlay() { Super::BeginPlay( ); UGameplayStatics::SpawnEmitterAttached( ExplosionEffectTail, RootComponent, NAME_None, GetActorLocation( ), GetActorRotation( ), EAttachLocation::KeepWorldPosition, true); } void AProjectile::OnHit( UPrimitiveComponent * HitComp, AActor * OtherActor, UPrimitiveComponent * OtherComp, FVector NormalImpulse, const FHitResult & Hit) { // Only destroy projectile if we hit a physics if ( ( OtherActor != nullptr) && ( OtherActor != this) && ( OtherComp != nullptr)) //if ((OtherActor != nullptr) && (OtherActor != this) && (OtherComp != nullptr) && OtherComp->IsSimulatingPhysics()) { //OtherComp->AddImpulseAtLocation(GetVelocity() * 100.0f, GetActorLocation()); //DrawDebugLine(GetWorld(), Hit.ImpactPoint, Hit.ImpactPoint + Hit.ImpactNormal * 100.0f, FColor::Yellow, false, 5.0f, 255, 2.0f); UGameplayStatics::SpawnEmitterAttached( ExplosionEffectExplosion, RootComponent, NAME_None, GetActorLocation( ), GetActorRotation( ), EAttachLocation::KeepRelativeOffset, true); Destroy( ); } }
Мне кажется партиклы уничтожаются сразу же после того как пулька вызвала свой Destroy()
А как тогда? Заводить специальный компонент (один на всю игру) который вызывать для спавна партиклов?
pixelperfect_
> RootComponent
кто такой? ты спавнишь в пулю что ли? конечно тогда ничего не увидишь. Надо спавнить отдельный Actor а уже в него спавнить частицы (или сразу блупринт с уже размещенными частицами)
>а по какой причине редактор может крашится после каждой компиляции
может, из-за того что ты удалил какой то компонент или блупринт или ещё чего, а тот блупринт который на него ссылался теперь не может получить к нему доступ. Гадать можно бесконечно, для этого есть режим отладки. Может из-за кода кривого, который компилится, но имеет ошибки (ошибки бывают не только синтаксические).
или так
тут уж кому что приятнее и какой IDE машинка тянет).
Salamandr
> ты спавнишь в пулю что ли? конечно тогда ничего не увидишь. Надо спавнить
> отдельный Actor а уже в него спавнить частицы (или сразу блупринт с уже
> размещенными частицами)
да, спавнил в пуле...
>может, из-за того что ты удалил какой то компонент или блупринт или ещё чего, а тот блупринт >который на него ссылался теперь не может получить к нему доступ. Гадать можно бесконечно, для >этого есть режим отладки. Может из-за кода кривого, который компилится, но имеет ошибки
>(ошибки бывают не только синтаксические).
у меня нету BP пока еще, все написано на с++
думаю нужно попробовать чисть указатели на компоненты на Destroy() мб поможет.
вообще это частая проблема, как я понял почитав в инете и многие так и мучаются.
compile -> editor crash -> editor restart ((
призывается специалист по повороту костей в UE!
работает норм пока я не покручу танк по Z!
пушка должна повторять зеленую линию в не зависимости от поворота танка!
беру кости в ws и оринтирую их же в ws. фига ей надо?
float angle2 = FMath::RadiansToDegrees(acosf( FVector::DotProduct( headForward, requestedHeadDirection))); //FString TheFloatStr = FString::SanitizeFloat(angle2); //GEngine->AddOnScreenDebugMessage(-1, 30.f, FColor::Yellow, *TheFloatStr); // start addjust weapon bone only if headForward direction close to requestedHeadDirection direction if ( angle2 < 5.0f) { FQuat w1 = PoseMesh->GetBoneQuaternion( "Weapon"); // word space bone rotation FQuat w2 = requestedWeaponDirectionQuat * FQuat( FRotator( 0.0f, 90.0f, 0.0f)); FQuat weaponBlended = FQuat::Slerp( w1, w2, DeltaTime * 5.0f); // blend two ws rotations on every frame PoseMesh->SetBoneRotationByName( "Weapon", FRotator( weaponBlended), EBoneSpaces::WorldSpace);
ATankActor::RotateOnTarget(float DeltaTime)
а как сделать прицел по центру экрана? мне для прицеливания нужно точку или круг нарисовать(
и еще вопросик!
А как прокинуть LifeTime системы партиклов (2-3 сек живет) в её же Меш-материал, только нормализированный вариант ?
если я просто так спавню партиклы где мне их потом ловить и как считать время начала их жизни?
опять класс AActor-обертку писать что-ли?(
по умолчанию в партиклах спавнится материал с параметром "MAT_TIME_NORMALIZED" = 0.6f
сразу после спавна пытаюсь поменять значение параметра материала, но он не меняется вообще!
что тут не так?
UParticleSystemComponent* PS = UGameplayStatics::SpawnEmitterAtLocation(GetWorld( ), ExplosionEffectExplosion, pos, GetActorRotation( ), true); if ( PS) { UMaterialInterface* Material = PS->GetMaterial( 0); if ( Material) { UMaterialInstanceDynamic* MatInstance = UMaterialInstanceDynamic::Create( Material, PS); MatInstance->SetScalarParameterValue( "MAT_TIME_NORMALIZED", 0.1f); if ( MatInstance) PS->SetMaterialParameter( "MAT_TIME_NORMALIZED", MatInstance); } }
а для текстур UI разве нельзя нагенерировать mip уровней в UE?
он сам может или нет?
она должна быть POT или любая?
у меня текстура прицела 1к, а рисуется она уменьшенной.
мипов почему-то нет и она выглядит как ..овно!
AMyHUD::AMyHUD() { static ConstructorHelpers::FObjectFinder<UTexture2D> AimTexObj( TEXT( "/Game/Textures/aimTexture.aimTexture")); AimTex = AimTexObj.Object; } void AMyHUD::DrawHUD( ) { Super::DrawHUD( ); const FVector2D Center( Canvas->ClipX * 0.5f, Canvas->ClipY * 0.5f); const FVector2D SpriteSize( 32.0f, 32.0f); const FVector2D DrawPosition( Center.X - ( SpriteSize.X * 0.5f) ,Center.Y - ( SpriteSize.Y * 0.5f)); FCanvasTileItem TileItem( DrawPosition, AimTex->Resource, FLinearColor::White); TileItem.BlendMode = SE_BLEND_Translucent; TileItem.Size = SpriteSize; Canvas->DrawItem( TileItem); } void AMyHUD::BeginPlay( ) { Super::BeginPlay( ); }
и точно он не может не POT текстурам мипы генерить(
переделал текстуру на POT и двиг нагенерировал мипов
вопрос дня в одном blend файле сделал несколько простых объектов, как за один раз их импортировать в разные статик меш ассеты? а не заниматься такой работой - для каждой модельки selected -> fbx -> ue (n-times)