ich habs Jungens, in der Animation ein Notify erstellen, dass im EventGraph als Event die Integer auf einen anderen Wert setzt, der eine Bedingung ändert in der AnimGraph Transition Regel.
Beiträge von JonnyMachony
-
-
Bralligator jap, hab ich auf 0 gestellt bzw. ist von Anfang an auf 0, looped trotzdem. Warum auch immer.
Kriegst du es, oder irgend jemand hin, dass nicht immer die selber Animationen abgespielt werden, sondern halt der Zufall eine Auswahl an Animationen hat, die er abspielen kann?
-
Phoenix super Antwort danke, das mit dem Thread kommt mir sehr komplex vor.
Wegen dem Random Sequenzer, den kenn ich, das Problem ist, dass der Sequencer die Animationen loopen lässt, was ich dort nicht abstellen kann, deshalb habe ich einen Umweg gesucht um den Random Sequenzer nicht zu nutzen.
-
unegfähr verstanden, mein Beispiel gilt nur für den SpielerCharacter, es soll mal die eine, mal die andere Animation spielen, der Zufall soll entscheiden. Was hat das mit irgendwelchen Threads zu tun? ich habe ja nur eine Figur. Naja.
-
Danke für eure Erklärungen,
was ist ein Thread?
Und nein, mein Beispiel funktioniert nicht, es wird keine Zufallszahl generiert, die dann eine zufällige Animation abspielt, schade, warum eigentlich nicht?
wie würde es stattdessen gehen?
eigentlich einfacher Gedanke, den ich umsetzen will, aber stellt sich schwierg dar.
-
ich habe das hier im AnimBP mir so gedacht, warum geht das nicht?
Warum der Compile Fehler?
-
sorry wenn ich nerve, aber ihr beantwortet die Fragen echt gut und hilfreich, vllt hilfts ja der Community auch.
Jedenfalls entdecke ich das Makro? oder was es auch immer ist, das hier:
checkf(Ammo + Amount <= MagazineCapacity, TEXT("Versucht nachzuladen mit mehr als Magazin Kapazitaet"));
dieses checkf sehe ich auch nun zum ersten mal. ich kenne wohl "check()" dass auf validität prüft meine ich, aber was ist checkf() ???
Vielen Dank Leutz.
-
hallo Community,
ich sehe oft zum Beispiel vom Sinn her diese beiden if-Abfragen:
//"EquippedWeapon" ist hier ein Pointer, wenn also der Char eine Waffe in der Hand hat, dann kann gefeuert werden.
if (EquippedWeapon)
{
FireWeapon();
}
//oder ich sehe auch das hier:
if (EquippedWeapon == nullptr) return;
FireWeapon();
//beim zweiten if wird also gefragt, Wenn der Pointer ein Nullpointer ist, also leer ist, dann gib leere Funktion zurück, also lies nicht weiter.
//Meine Frage nun, gibt es irgendeinen Grund warum es diese beiden unterschiedlichen Abfragen gibt? Eigentlich wollen doch beide auf das Gleiche hinaus. Warum vom Gedanken her einmal so und einmal so? Gibt es dort überhaupt einen Unterschied?
-
hi C++ Mitbegeisterte,
ich schaue Udemy und sehe diese Code-Zeile
auto TraceHitWeapon = Cast<AWaffe>(TraceHitItem);
was bedeutet dieses "auto" sehe es zum ersten mal, einer ne Idee/Erklärung?
danke schonmal.
-
danke @freezernick, gibt es irgendeinen Unterschied zu diesen drei Methoden zu initialisieren?
ich habe bei meinem Beispiel was vergessen, hier nochmal das genaue neue Initialisieren mit einem Integer diesmal. Meine Frage ist, ob es egal ist welche Methode ich verwende?
in.h
int32 ItemAnzahl;
in.cpp
AItem::AItem() : //das ist der Constructor-Name
ItemAnzahl(0)
{
}
merkwürdig finde ich, dass dies vor den Klammern des Constructor-Körpers passiert und ohne Semikolon, aber es klappt. Was soll das, warum sollte jemand so initialisieren? Hat das eine Bedeutung?
-
in .h
bool bAiming;
in .cpp
bAiming(false);
hingegen kenne ich nur in .cpp
bAiming = false;
wo ist der Unterschied?
-
Hi liebe UE4 Kompagnons,
ich lerne mit Udemy Kursen und sehe das hier:
```bAiming(false);``` im Constructor der CharacterKlasse, diese bool-Variable soll dort initialisiert werden. In anderen Worten, die Variable soll hier ihren Anfangswert bekommen, hier "false".
Bisher kannte ich nur diese Schreibweise ```bAiming = false;```
Gibt es einen Unterschied bei den Schreibweisen? Tun die Schreibweisen nicht das Gleiche? Was macht die erste Schreibweise evtl anders?
-
Vielen Dank Phoenix-100 , das hat geholfen, ich nutze jetzt die "TAB-Taste" zum bestätigen statt Enter, jetzt nimmt er es immer an, Vielen Dank
-
hi Leute, bin neu mit Visual Studio, lerne an Udemy Kursen.
Was mir immer und immer wieder passiert und ich nicht verstehe, es auch schon richtig nervt, ist:
ich tippe die gesuchte Funktion, der Assist schlägt mir eine Reihe von möglichen Funktionen vor, ich wähle mit den Pfeiltasten die gewünschte Funktion aus und drücke Enter.
In den meisten Fällen schreibt der Assist diese Funktion nun auch auf, aber auch oft, tut er es auch einfach nicht, obwohl ich es genau so tue, wie beschrieben, manchmal schreibt der Assist das gewählte nieder, manchmal aber auch nicht.
Ich verstehe es einfach nicht, warum es manchmal klappt, manchmal nicht. Ich muss das ganze dann einfach wiederholen, dann geht es wieder.
Kennt das einer? Der Assist zeigt mir in allen Fällen die möglichen Funktionen, aber nicht immer schreibt er das gewählte auch nieder, warum?
-
Das hat geholfen, vielen Dank. Ich suche jemanden, der deutsch spricht und mir genau solche Verständnisfragen ab und zu beantworten kann. Sagen wir über Discord. Hättest Interesse? ich zahl auch gerne dafür.
-
Oft redet man im englischen aneinander vorbei.
Folgende Verständnisfrage:
Bisher dachte ich immer, ich setze Variablen, die einen Wert inne haben in eine Funktion als Eingangsparameter ein (also in die Klammer einer Funktion).
Die Funktion arbeitet mit den Parametern und gibt am Ausgang (links von der Funktion) das Ergebnis heraus, das ich weiterverwenden kann für andere Sachen.
Nun sehe ich diesen Code:```
FVector2D ViewportSize;
if (GEngine && GEngine->GameViewport)
{
GEngine->GameViewport->GetViewportSize(ViewportSize);
}```
Jetzt bin ich verwirrt, "ViewportSize" wird erstellt, hat aber noch keinen Wert, was bringt es dann, dies in die Funktion einzusetzen? Was soll dann dabei rauskommen, es ist ja leer. Dazu kommt noch, die Funktion wird lediglich aufgerufen, aber am "Ausgang" wird garkein Wert zurückgegeben bzw garnicht entgegengenommen.
Es scheint so, als würde "ViewportSize" auch durch einsetzen in den Eingang einer Funktion einen Wert zugewiesen bekommen, stimmt das?
Bisher kannte ich Werte zuweisen nur durch das "=" Zeichen.
Bitte kann mir da einer Licht in mein Dunkel bringen^^?
-
Bücher, Tutorials, Videos aller Art, vieles schon hinter mir.
Ich suche jemanden, der mir gezielt Fragen zu Unreal Engine 4 C++ beantworten kann.
Gerne über Discord, Bildschirmübertragung, ...etc
Für so eine Hilfe zahle ich auch gern.
-
Cast klappt, hier der Code: Der Pointer "EnemyCharacter" ist in der "F_Taste" Funktion NULL, obwohl er erfolgreich in "BeginOverlap" gesetzt wurde.
```in .h
UPROPERTY()
AMyCharacter* EnemyCharacter;
```
```in .cpp
void AMyCharacter::BeginBoxOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult) {
if (OtherActor != this)
{AMyCharacter* MeChar = Cast<AMyCharacter>(OtherActor);
if (MeChar)
{ EnemyCharacter = MeChar;
UE_LOG(LogTemp, Warning, TEXT("drin"));
UE_LOG(LogTemp, Error, TEXT(" %s"), *AActor::GetDebugName(EnemyCharacter));
}
}
}void AMyCharacter::F_Taste()
{UE_LOG(LogTemp, Warning, TEXT("FTaste gedrückt"));
UE_LOG(LogTemp, Error, TEXT(" %s"), *AActor::GetDebugName(EnemyCharacter));
if (FinisherMontage)
{
if (EnemyCharacter)
{
PlayAnimMontage(FinisherMontage, 1.f, FName("Start"));
EnemyCharacter->PlayAnimMontage(FinisherMontage, 1.f, FName("KO"}
}
}
-
Es scheint so, dass er nicht in diese If Abfrage reinkommt, ich nehme an, EnemyCharacter wird nicht gefüllt, verstehe aber nicht warum. Also es lässt sich kompilieren, aber in dieser If Abfrage komme ich nicht hinein, bzw. von da aus bekomme ich auch kein UE_Log aufgerufen.
-
@Stephan ich hab nun versucht die Variable zu speichern, geht trotzdem nicht, hier der Code, hab kein Plan was ich nicht verstehe.
in .h
UPROPERTY() AMyCharacter* EnemyCharacter; in .cpp
void AMyCharacter::BeginBoxOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult)
{
Code
Alles anzeigenif (OtherActor != this) { AMyCharacter* MeChar = Cast<AMyCharacter>(OtherActor); if (MeChar) { EnemyCharacter = MeChar; } }
}
void AMyCharacter::F_Taste()
{
Codeif (FinisherMontage) { if (EnemyCharacter) { EnemyCharacter->PlayAnimMontage(FinisherMontage, 1.f, FName("KO")); } }
}