sagt mir jetzt garnicht.
Beiträge von JonnyMachony
-
-
Hi jungens, ich tue mich noch schwer zu erkennen, wann ich dereferenzieren "*..." soll und wann nicht, hat da jemand ne gute Erklärung?
Hier ein Beispiel:
CodeIOnlineSubsystem* OnlineSubsystem = IOnlineSubsystem::Get(); if (OnlineSubsystem) { if (GEngine) { GEngine->AddOnScreenDebugMessage(-1, 15.f, FColor::Yellow, FString::Printf(TEXT("found subsystem: %s"), *OnlineSubsystem->GetSubsystemName().ToString())); } }
Im Beispiel wird ja "*OnlineSubsystem" ja durch das "*" dereferenziert.
Da "OnlineSubsystem" ein Pointer ist und somit eine Adresse innehat, wird durch das Dereferenzieren der Pointer nun wieder einen Wert ausgeben, versteh ich richtig so?
Kann das Rereferenzieren noch etwas anderes? Kann es auch auf eine normale Variable angewendet werden um wieder die Adresse der Variable wiederzugeben? Kann das Rereferenzieren noch etwas anderes?
-
Noch jemand eine andere Erklärung?
-
Hi Jungens,
bin bisschen verwirrt gerade, mein bisheriges Wissen war:
Eine Variable z.B "A" wird erstellt, diese kann einen Wert zugewiesen bekommen.
Dann gibt es Pointer z.B "A*", diese sind nur die Adressen zu dieser Variable, ein Pointer hat also keinen Wert, er ist nur der "Link" zu dieser Variable.
Was ist jetzt nochmal dann eine Referenz ??? also das hier "&A" ???
vielen dank schonmal.
Dann weiß ich noch, man kann Pointer Dereferenzieren, also schreibt man "*A" , so wird aus dem Pointer wieder der Wert von A wiedergegeben. Soweit richtig alles?
-
Phoenix-100 , danke für deine Antwort, ich versteh deinen Code leider nicht und mein Problem besteht immer noch, kannst du vllt das mit meinem bisherigen Code erklären, dieser Crasht auch, obwohl ich nach validen Pointern filtere.
Ich nehme doch aus meinem Array "MeineMinions" jedes Element heraus mit einer for-Schleife und prüfe es mit "if (MeineMinions[i])", wieso kann es dann noch crashen?
-
evtl ist dies der Code dafür. Stimmt das?
Beim rumprobieren ist mir aufgefallen, dass mein Projekt öfter abstürzt.
Zweite Frage also, wie stelle ich sicher, dass ein Array mindestens ein valides Element noch inne hat?
bei einzlenen Pointern macht man das ja so
if (PointerName)
{
}
wie macht man das bei Arrays voller Actoren?
Danke schonmal.
-
Hi Jungens, ich habe also ein Array voll von Actoren.
Wenn ein Actor davon stirbt, wird er zum Nullpointer.
Kann ich also das Array irgendwie sortieren, dass die gefüllten Elemente im Array nach vorne geschoben werden und die Nullpointer Elemente nach hintern. So dass wenn ich das Array Element [0] aufrufe, immer ein gefüllter Actor drin ist?
Bin mit Arrays noch nicht so fit, kann man das machen?
-
ich habs schon, in unterschiedlichen Gruppen müssen die Slots sein, dann geht es, falls es einer wissen will.
-
Hi Jungens, gibt es einen Weg zwei Animation Montages unabhängig voneinander zu verwenden?
Ich habe z.B einen AICharacter, er startet eine SchlagSerie mit Hilfe einer AnimationMontage, während dieser SchlagSerie wird er von der Seite angegriffen und er spielt nun seine Treffer AnimationMontage.
Problem dabei ist, dass er nun seine SchlagSerie unterbricht und auch nicht mehr fortsetzt. Irgendwie hat seine Treffer Animation seine SchlagSerie Animation unterbrochen und auch beendet.
Ich habe gedacht, wenn ich AnimationMontage so nutze, dass die auf verschiedenen Slots laufen und auch in den Slot Nodes hintereinander stehen im AnimGraph, dass sie beide unabhängig voneinander funktionieren.
Hab ich etwas vergessen oder ist das garnicht möglich bzw. wie macht man es dann möglich dass man während einer AttackenNahkampfSerie eine Treffer Animation auch mit einspielen kann?
danke euch schonmal.
-
Jungens, die Funktion, die ausgeführt wird, wenn ein Gegner gesichtet, wird so eingebunden:
CodePerceptionComponent->OnPerceptionUpdated.AddDynamic(this, &AAIController_Minion::AIWahrnehmungUpdate);
Zu dieser meinen Funktion:
Sie wird ausgeführt, wenn ein neuer Gegner ins Sichtfeld hineinkommt oder hinausgeht, das Array enthält die gesichteten Gegner.
Meine Frage: kann ich diese meine Funktion auch irgendwie selber aufrufen lassen?
Weil mein NPC tötet einen Gegner und tut dann nix mehr, obwohl er noch andere Gegner erkannt hat, ich bekomme mein NPC nicht mehr dazu, die WahrnehmungsFunktion nochmal auszuführen.
Das einzige was mir eingefallen ist, den NPC, nach dem Tot des ersten Gegners, sich selber drehen zu lassen, dadurch kommt der 2. Gegner auch aus der Sicht heraus und dann tickt diese meine Funktion wieder, aber das ziemlich ne blöde Lösung.
Alle NPC´s drehen sich ständig nach dem ersten Gegner um weitere NPC zu suchen.^^
-
Gibt es einen geschmeidigen Weg, die Kollision der eigenen Stangenwaffe(BoxCompoenente) mit sich selber zu vermeiden?
Die Stangenwaffe soll aber durchaus andere meiner Klasse treffen könne, nur halt die eigene Instanz nicht, geht das?
-
ich denke ich habs gefunden, GetInstigator() ist das, was ich suche, danke trotzdem.
-
Ich dachte eher an den Owner, bzw. den Besitzer, von welchem Actor dieser Actor gespawnt wurde. Kann man das auch irgendwie abfragen?
Beispiel: ein Granate wird von einem Spielger gespawnt, wie kann ich in der Granate jetzt abfragen, von welchem Spieler diese Granate jetzt gespawnt wurde?
-
hm, hab ich auch gedacht, aber wenn ich das
bei meinen gespawnten Character mache, dann gibt der mir sein AIController zurück, statt sein Besitzer, der ja eigentlich der SpielerCharacter sein sollte.
So frage ich z.B das im gespawnten Character in seiner BeginPlay() Funktion ab:
-
ich habe das
im AIController vergessen, jetzt läuft es. Aber warum ist diese Zeile so wichtig, ist mir noch ein Rätsel, sie ruft wohl die ElternFunktion auf? Warum ist das notwendig?
Meine BeginPlay Funktion spielt doch auch so oder?
-
-
AI hat im Blackboard ein Vektor, mit gefüllten Daten, will sich aber mit dem vorgefertigten MoveTo Node trotzdem nicht dahin bewegen.
NavMeshBoundsVolume ist da.
BehaviorTree führt auch aus.
AI Module "NavigationSystem", "AIModule" in .Build.cs auch hinzugefügt.
was anders ist, es ist ein im Spiel gespawnter AI Character. Hier paar Bilder, einer ne Idee?
-
mega, es hat tatsächich daran gelegen, wow, kannst du mir das kurz erklären, worum es sich bei dieser Einstellug handelt?
Vielen vielen Dank, du hast mir echt den Tag gerettet ;-)))))
-
ich habe das Gefühl, dass ich den BP spawne und die C++ Funktionen dann nicht ausgeführt werden, die ja den BehaviorTree starten. Wenn ich aber die C++ Klasse spawne, dann hat sie kein Mesh, also kein Plan, was da schief läuft.
-
bei dem gespawnten AIChar steht "Placed in World"