Hallo
Aktiviere mal in den project settings->packaging->Full Rebuild.
Wenns nicht klappt, kannst du noch mal die logs posten.
Gruss
Hallo
Aktiviere mal in den project settings->packaging->Full Rebuild.
Wenns nicht klappt, kannst du noch mal die logs posten.
Gruss
Hallo
die sind am selben Ort einfach unter Plugins. Engine->UE?->Plugins.
Gruss
Hey zusammen
Aber du erstellst eigentlich niemals ein Baseobjekt, welches mal eine Wand, mal eine Waffe, mal eine Kuh oder so sein kann.
Da muss ich dir widersprechen. Die Unreal Engine macht nämlich genau das.
Egal was du in der Engine erstellst, du erbst eig. so gut wie immer von UObject.
Alles erbt davon, egal ob du eine Wand, eine Waffe oder eines der über 6000 weiteren Children erstellst.
Es kann also durchaus Sinn machen.
Gruss
Du meinst vermutlich das Gizmo Coordinate System in World oder Coordinate Space.
Es ist der Button oben rechts der wie eine Welt oder Box aussieht (je nach aktivem Modus).
Ich kann leider keine Bilder einfügen, aber hier siehst du es.
Hey zusammen
Ja das kannst du mit den Scalability Settings.
Oder mit commands, hier zum Beispiel für die Schatten Qualität:
sg.ShadowQuality 0
0 also Qualität low.
Wenn man an einem Spiel bastelst, muss man mit den Ressourcen haushalten. Üblicherweise will man ja, dass das Spiel auch auf schwächeren Rechnern gut läuft. Entsprechend empfehle ich grundsätzlich eher das Projekt zu optimieren, statt RAM nachzurüsten.
Gruss
Hallo zusammen
Beheben kannst du dass in der Unreal Engine nicht dass muss du in einem 3D Programm machen.
Du kannst das direkt in der Engine machen. Dazu wählst du oben links den Modeling Mode aus. Dann dein Objekt auswählen und dann links unter UVs AutoUV auswählen, für den Anfang. Du kannst natürlich auch manuell die Seams auswählen.
Dann kannst du auch das tiling in deinem Material anpassen.
Gruss
Hallo
Mein Code entfernt die nullptr aus dem Array. Also behält nur Elemente bei denen das true ist.
Dein nullptr ist vermutlich entweder AIController_Minion oder GetBlackboardComponent().
Die prüfst du beide nicht. Mit ensure und check findest du diese Probleme einfacher, und sonst einfach mit dem debugger.
MeineMinions[i]->AIController_Minion->GetBlackboardComponent()->SetValueAsObject("Spieler", this);
Gruss
Hallo
Wenn du kein Listen Server willst bleibt Dedicated Server. Willst du diesen in der Cloud haben, oder eben doch beim "hostenden" Spieler, also lokal auf den PC des Spielers?
Wenn in der Cloud ist es kein Problem, lokal higegen ist nicht so einfach, weil da fehlt das P2P Interface vom Listen Server.
Gruss
Hey zusammen
Sieht wirklich cool aus. Das Level design und Grafik gefallen!
Die Szene im Kampf ist aktuell etwas trist, vor allem im Kontrast. Das ist aber sicher noch ein Placeholder.
Ich hoffe du bleibst dran und erzählst ein paar tolle Geschichten. Freue mich jetzt schon auf Updates!
Gruss
Hallo
Ja das Multiplayer Networking und Remote Control web server sind komplett verschiedene Dinge.
Der Remote Controler Web Server sollte auch nicht offen für das Internet sein.
1. Das macht alle die Engine für dich. Du musst nur noch den server starten mittels:
WebControl.StartServer<br>
Es ist wirklich nur ein lokaler web server. Du kannst diesen gut benutzen um mittels REST funktionen aufzurufen mittels JSON.
Vergiss aber nicht das Plugin zu aktivieren. Der Server hört dann auf 127.0.0.1:30010.
Dein Companion app könnte dann von mir aus relativ simpel einfach funktionen aufrufen und daten lesen.
2. Die sind für Multiplayer games, auch über das Internet. Das ist vermutlich nicht was du willst. Aber auch hier brauchst du keine extra Software.
Gruss
und er spuckt mir ständig nur 1 aus.
Das Array müsste doch größer oder kleiner werden, je nachdem ob einer in Sichtweite kommt oder die Sichtweite verlässt.
Kann mir das einer erklären???
Nein, UpdatedActors sind nur die Actors die ein Update erhalten haben. Das ist unabhängig davon ob in Sichtweite oder nicht.
Gruss
Welcher Teil?
TArray<AActor*> OutActors;
PerceptionComponent->GetCurrentlyPerceivedActors(Sight->GetSenseImplementation(), OutActors);
Das snippet speichert dir alle aktuell wahrgenommene Actors im OutActorts Array. Das sind alle Actoren aktuell im Sichtfeld.
Dann können wir über diese im Sichtfeld befindenen Actoren durch loopen, dann printe ich jeden einzelenen Name davon auf den Screen.
for (AActor* OutActor : OutActors)
{
GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Red,
FString::Printf(TEXT("I can see you %s"), *OutActor->GetName()));
}
Das war auch schon.
OnPerceptionUpdated wird nicht nur dann aufgerufen, wenn etwas neues wahrgenommen wird, sondern auch dann, wenn etwas, das wahrgenommen wurde nicht mehr wahrgenommen wird.
Also vereinfacht, es wird aufgerufen, wenn es ins Sichtfeld tritt und erneut wenn es das Sichtfeld wieder verlässt.
Du kannst in deiner Update Methode alle wahrgenommenen Actor ausgeben lassen.
void AMyCharacter::PerceptionUpdated(const TArray<AActor*>& UpdatedActors)
{
GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Blue,
FString::Printf(TEXT("Updated")));
TArray<AActor*> OutActors;
PerceptionComponent->GetCurrentlyPerceivedActors(Sight->GetSenseImplementation(), OutActors);
for (AActor* OutActor : OutActors)
{
GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Red,
FString::Printf(TEXT("I can see you %s"), *OutActor->GetName()));
}
}
Alles anzeigen
Hallo
Der Perceptioncomponent hat Multicast Delegates die die nutzen kannst. Hier der Sourcecode davon.
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FPerceptionUpdatedDelegate, const TArray<AActor*>&, UpdatedActors);
FPerceptionUpdatedDelegate OnPerceptionUpdated;
Dieses Deleagte wird im ProcessStimuli vom PerceptionComponent broadcasted. Vereinfacht dann, wenn sich etwas relevantes im Sichtfeld verändert.
Du musst also deine Update methode dem Delegate hinzufügen.
Wenn sich nun etwas im Sichtfeld verändert, wird deine PerceptionUpdates Methode aufgerufen. Das heisst, du weisst immer, was du gerade siehst.
Gruss
Sehr gut!
Die complexity kommt daher, weil der blend mode translucent ist und vermutlich zudem noch überlappt.
Gruss
Die IDE sollte dadurch nicht crashen, lediglich die Engine. Hot Reload ist sowieso ziemlich fehleranfällig, was das compilieren aus der IDE sinnvoll macht und damit wird sowieso ein neustart aus der Engine notwendig.
Aber nochmal, die Engine crashed im Beispiel so oder so, sie crashed nun einfach früher.
Meistens handelt es aber nicht um fatale Fehler, und hier kannst du ensure nutzen, dann crashed die Engine nicht und du hast den Error im output log.
Gruss
Hey zusammen
Ich glaube aber irgend wo konnte man die Size einer Textur direkt in Unreal runterstellen. Ich hab das aber aus den oben genanten gründen noch nie gemacht.
Vielleicht weiß dass jemand anderst
Man kann in den Texture settings den LOD bias hoch stellen. Hier ein Beispiel, dass diese normal map von 2K auf max 1K runter schraubt.
Doch ich verstehe. Genau das soll passieren. Wir sind in einem Zustand der nicht sein darf, fatal, keine Erholung möglich. Anstatt das jetzt durchzuschleppen und dann beim nullptr oder was auch immer zu crashen, crashen wir lieber gleich beim check. Der Programmierer findet so schneller sein Fehler und wir crashen kontrolliert.
Du hast schon recht, das ist vermutlich seltener der Fall. Häufiger hast du ensure, dann crashed die Engine nicht, eben für nicht fatale Zustände. Du musst aber natürlich sicherstellen, dass du das auffängst.
Beispiel: Ich habe hier einen nullptr gebaut. Nun wird geloggt, wo genau der aufgetreten ist mit dem stack.
Crashen tut die Engine hier nicht.