Beiträge von Soap

    Ja creative und coding challenges wären doch ganz nett. Und da das hier ein UE4 Forum ist, müssten sich doch eigentlich ein paar finden, die abseits vom Modeling in der UE was machen. Es kommt fasst so rüber als gäbe es hier nur Artists und keine Coder. Und wenn die Challenges nicht zu schwer/komplex sind, finden sich vielleicht auch ein paar mehr Anfänger. Klar, wenn jetzt direkt ein SteamLobbySystem geamcht werden soll sind alle abgeschreckt, aber was einfaches wie Schalterrätsel oder nen HelperAsset, welches iwas automatisiert, o.ä.

    Das setzt natürlich voraus, dass genug Leute mitmachen. Bei der letzten UE4 Freestyle Challange haben nur 3 Leute abgegeben.

    Wir haben dieses Thema Challage jetzt nun echt sehr oft ausdiskutiert, dabei sind wir ja nun verblieben, dass man einfach abstimmt. Was ja auch am meisten Sinn macht, denn die Leute wissen worauf sie Bock haben. Wenn also 10 Modellieren wollen und nur 3 Programmieren.... hmm

    Durch Befragungen sieht man worauf die Mehrheit lust hat.


    Man kann aber auch allerdings (und das wurde auch schon öfters angesagt) andere Challanges nebenbei machen. Aktuell läuft ja auch das Forenprojekt.

    Ja gut. Wenn natürlich einfach keine Leute mit machen wollen, wenn es nicht um Modelling geht, dann macht das natürlich nicht viel Sinn.

    kyodai Ach krass, dass wusste ich gar nicht, Hab das generell nicht gecheckt. Denn das Widget konnte ich so oder so anklicken. Aber wusste nicht, dass das den "TAB" -Input ignoriert, Kann man dann denn trotzdem noch bspw. in ne TextBox schreiben?

    Ich find den Punkt, dass man eher direkt in der Engine arbeiten sollte eigentlich ganz gut, da hat er iwie Recht mit "Sonst könnten wir auch einen DJ-Contest machen". Aber mir ist ebenfalls bewusst, dass man um etwas zu gestalten meistens Assets benötigt. Aber man könnte halt regelmäßig durch Themen rotieren.


    Also nächste Challenge Programmieren, die folgende Creatives Modeln, danach in Richtung Lighting/Composing, danach mal Cutscenes erstellen, etc. und dann beginnt man wieder von vorne. Also das quasi jedes Mal nen anderes Themengebiet dran ist, mal was kreatives, mal was logisches, usw. und so jeder die Möglichkeit hätte wenigstens ab und zu mal eine mit zu machen.

    Die Frage wäre auch, ob sich immer jemand findet, der etwas beretstellen würde, sodass alle den gleichen Start haben. Also wenn man als Bsp. Cutscenes zum Thema hat. Wäre es ja schön, wenn jemand eine Scene bereitstellt und dann alle wirklich nur eine Cutscene darin erstellen müssten. Lighting usw. wäre aber schon gegeben. Aber das ist denke ich ne Menge Freiwilligenarbeit, die man dafür benötigt.


    Ist halt nicht einfach jedes Gebiet auch für Anfänger abzudecken, Aber da kann man sicher auch einfach verschiedene Schwierigkeitsstufen einführen.


    Aber derzeit sind glaube ich halt die meisten Challenges eher im Bereich Modelling, Texturing, etc. gewesen. Das ist zwar spannend anzusehen, aber mit machen kann nicht jeder, der mit bzw. in der UE arbeitet.


    Und ich könnte mir vorstellen, dass es auch für Anfänger dann um so interessanter wäre, wenn die Ergebnisse auch erklärt werden.


    Wenn z.B. Thema Programmieren ist, und man soll z.B. eine Zeitbombe programmieren (Ja ist sehr vereinfacht) wäre es ja super interessant die verschiedenen Lösungswege zu sehen, statt nur das Ergebnis. Und lernen kann man auch was, ob nun die generelle Logik oder eben den Designaspekt des Codes.

    ich weiß was er meint. Habe das selbe Problem in einem Ausrüstungswidget. Öffne mein IngameMenu mit TAB und kann dies damit wieder schließen. Aber sobald ich in mein Widget geklickt habe (Etwas ausgewählt, mein MenuCharModel gedreht habe oder sowas, kann ich nicht mehr mit TAB raus, da er dann auf die Buttons springt und diese dadruch angewählt werden.


    Wir benötigen also eine Funktion, welche die OS-Input-Verwaltung ausblendet oder so. Dadurch würde dann z.B. die Windowstaste ebenfalls nicht mehr funktionieren.


    Da gibt es sicher einen Weg

    Ja ok, ist ja schonmal gut, dass sich das mit den IDs erledigt hat. Das liegt daran, dass ja nicht alle gleichzeitig auf dem Server gespawnt werden. Somit funktioniert BeginPlay() nur bedingt. Deshalb hatte es auch nachdem du das Widget aufgerufen hattest funktioniert, da waren alle Instancen geladen/gespawnt.


    Ich verstehe deine Frage "Wie kann ich über eine Variable, die ja immer eine andere Information (ID) inne hat, diese in einem Widget in 3 Zeilen darstellen lassen? Es ist ja kein Array." nicht so richtig.


    Die ID ist immer vom Typen Integer, weil es eben nur eine Zahl ist. Du kannst die PlayerIds in einem IntegerArray speichern, und die einzelnen Elemente dann in TextBoxen im Widget anzeigen lassen.


    Zum Punkt der Spielerliste :

    Am besten hast du auf dem Server ein PlayerControllerArray und jedes Mal, wenn ein PlayerController gespawnt/Zugewiesen wird, fügst du die Referenz dem Array hinzu.


    Dann kannste durch das Array loopen und dir alle Informationen ausgeben lassen

    Ich habe ein paar Anmerkungen.


    Ich verstehe erstmal iwie nicht, warum du ständig die IDs hin und her schickst, diese aber eigentlich dann in deinem Gamestate benötigst. Z.B. holst du dir im "MenuNurFürServer" den gamestate, holst dir das Playerarray und dann gibst du der Funktion aus dem Gamestate die Playerliste mit. Aber du solltest halt nur die Funktion aufrufen, die Playerliste hat der Gamestate doch schon :)


    und auch würde ich nicht immer ein eigenes Event für ne ander ID machen.


    Lieber der Funktion "ErstelleEinladung" als Parameter (Input) die Playerrefenz oder so nehmen, und dann in der Funktion entscheiden, für welchen Spieler/ID die Einladung nun ist. Also lieber "LadeSpielerEin" mit Parameter "Spieler", statt 5 verschiedene LadeSpielerXein, LadeSpielerYein. etc.


    Außerdem fällt mir auf, dass die IDs ja auch im Gamestate bei dir nur vom Server gesetzt werden können, also ist klar, dass der Client die IDs nie mit Werten füllen kann. Somit sind alle IDS 0 oder eben unbestimmt.

    Ich hatte das Problem mit Materials, deren Texturen nicht mehr zugeordnet waren, Obwohl die Verzeichnisse im RootOrdner nicht verändert wurden. Musste alle Materials, welche in Benutzung waren, die Texturen erneut zuweisen. Und meinem Playercharacter reichte das alles nicht, das war sehr Buggy und die MAterials wurden nicht korrekt angenommen, Projekt nochmal gelöscht und neu kopiert, danach wars i.O. ..


    Ich könnte mir vorstellen, dass es bei mir daran lag, dass ich die alte Projektversion nicht gelöscht sondern nur überschrieben hatte. Dadurch gab es sicher iwelche falschen Verweise oder so. Keine Ahnung.


    Mittlerweile lösche ich lieber die Version, welche auf dem anderen Gerät ist und kopiere einfach das ganze Projekt. Also nicht einfügen und Überschreiben, sondern löschen und einfügen. (Wenn du viele Assts für deine Level hast, würde ich diese vielleicht auch nicht immer neu kopieren, wenn sich nichts geändert hat, Mal eben 20GB für nichts kopieren ist ja Zeitverschwendung.)


    Wenn ich nur eine Klasse hinzugefügt habe oder ähnliches und die anderen Dateien noch nicht eingebunden wurden. (zb. Waffenklasse ist schon mit Character,etc verknüpft.) dann reicht es auch meist, nur diese Klasse zu kopieren und einzufügen.


    Aber die Probleme sind meiner Erfahrung nach auch nerviger/häufiger/schlimmer, wenn du ein C++Projekt hast und kein reines BP-Projekt. Iwie verknüpft die Engine scheinbar Sourcedateien anders, als BPs. Wahrscheinlich weil BPs direkt Objekte werden und nicht erst durchs compilen zum Obj wird. Aber das ist nur geraten.

    falls das Problem noch besteht, solltest du vielleicht mal nen Screen von deinem Inventar anhängen, das klingt auf jedenfall nach einem Logikfehler in deinem Component. Verstehe auch nicht, warum erst ne ArrayVariable gebildet werden muss. Das Inventar kann das Array doch genrell schon beinhalten und diese wird dann entsprechend gefüllt. Klingt so, als würdest du es über ein Interface machen, da darfst du natürlich nur den Actor ansprechen, welcher das Item aufhebt. und nicht alle die das Interface nutzen.

    Tipp 1 :

    - Erstelle deine BP-Parentactors in C++

    - weise deinen BPs die neuen C++ Parentclasses zu


    Nun kannst du sie nutzen, als hättest du von Anfang an eine C++ Klasse erstellt.

    Also du kannst deiner Characterklasse dann ebenfalls die Referenz des Schwertes übergeben. Aber du kannst nur auf in C++ geschriebene Funktionen/Variablen zugreifen. Auf die BP-Variablen/Funktionen kannst du meines Wissens nach nur im BP-Editor zugreifen. Also musst du dir gut überlegen, welche Daten du in c++ schreibst und welche du dann im BP implementierst.


    Tipp 2 :

    - Der Fehler beim Animieren/Synchronisieren des Schwertes liegt aber nicht an C++

    oder kein C++, sondern daran, dass du einen Fehler in der Replication des

    Schwertes/bzw dessen Components eingebaut hast.

    - Dazu solltest du dich in Multiplayer/Server/Replication einlesen


    Tipp 3 :

    - Da du ja eh, so wie es scheint, dein Projekt mehr oder weniger neu machen musst, wenn du alles in C++ schreiben willst, würde ich entweder dein

    Projekt in BP weiter führen, die Logik, welche man für MP benötigt, ist ja die gleiche.


    ODER


    - vielleicht doch erstmal den Kurs komplett durchziehen, bevor du versuchst einen Teil zu adaptieren. So hast du die Grundidee/Logik durch das Kursprojekt verstanden und kannst es dann auf dein Projekt übertragen.

    (z.B. vielleicht merkst du, dass du nur Funktionen X,Y, Z und Variablen 1,2,3 replizieren musst und nicht den Rest deiner Klassen. Somit müsstest du nur gewisse Teile in C++ schreiben neu schreiben)



    Ich hoffe ich kann dir damit etwas helfen,


    bei weiteren Fragen frag einfach :)

    Genau einfach im Character_BP die Logic einbauen.


    dem Char ne Collisionbox geben, welche dann checkt, ob dein Gegner in der Nähe ist. Oder mit nem Trace checken.


    Dann haste auch direkt den anderen Actor. Den kannste dann zum Gegner casten und kommst an dessen Socket, dann machste dein Mesh, attach to Enemymesh-Socket.


    Sollte es gewesen sein

    Wenn ich dich richtig verstehe und du dir eigentlich nur ein Fenster mit versch. Meshs anzeigen lassen willst, welches du dann rotieren usw kannst. Wofür verschiedene Maps? Reicht es nicht, dass gewünschte Mesh anzuzeigen und die anderen zu Hiden oder alle sind halt im leeren Raum (Offscreen) geladen und werden dann nur an gewünschte Stelle "teleportiert".


    Verstehe aber vielleicht auch deine Projektidee falsch.

    mich verwirren einige Sachen

    - warum wird immer Has Authority durch "geschaltet"?

    - Warum kann der Server Player Input empfangen? Wenn es doch ein dedicated

    Server ist.

    (Es ist ja so, dass der Input über den Client zum Server übergeben wird)

    - Mach den Input mal in den PlayerController, statt im Testactor und spreche dann

    das Server Event an

    ---------------------------------------------

    ODER

    - Kann es sein, dass du einen anderen Rechner benötigst, um den Server zu

    Simulieren? Da wie gesagt, immer Has-Authority auf true geht. Auch als Client, welcher ja der gleiche Rechner (IP) ist.


    Aber habe bisher nur mal eine Lobby mit Steamanbindung im Peer-to-Peer-Format gemacht. Aber ich hoffe, dass meine Vorschläge/Denkanstöße vielleicht helfen

    ich weiß nicht, ob es sinnvoller ist dabei evtl widgets zu verwenden, statt die Textur zu ändern.

    Weiß nicht, was performanter und gängiger ist.


    Oder ob man lieber nen Texturatlas erstellt, wo man dann durch die einzellnen Frames skipped.

    ich glaube das Target ist ebenfalls der Pawn. Sprich du blockierst den Input für den Controller 0 für Pawn X.


    Und beim Target haste ebenfalls den PC drinnen.


    Aber freezernick hat Recht. Du solltest bei UI Interaktion eher set Inputmode UI Only und dann wieder gameonly nutzen. Das ist aber abhängig, ob du z.B. das Menü per Controller steuern wollen möchtest, dafür darf der Input von Tastatur/Controller nicht abgeschaltet sein, was durch Inputmode only UI passiert.

    Der Default Wert bringt dir aber nichts, wenn du einen Varaiblen Wert abfragen möchtest. Da du dann halt nur den Default-Wert bekommst,


    Ich glaube du hast das mit der Referenz noch nicht ganz verstanden.


    Nur weil du eine Variable des Typs "Test" anlegst. Ist diese nicht gefüllt. Es ist das gleiche, als wenn du einen Integer anlegst. Dieser ist erstmal 0.


    Deshalb kannst du auch nicht auf diese Zugreifen. Sie ist eben noch leer (NULL).

    Daher musst du sie SETTEN. Das wird üblicherweise beim Begin Play/On Construct o.ä. gemacht.


    Wenn du nun 2 Actors in der Welt hast, mit denen du interagieren kannst, sollte dein Weg nicht sein. Wenn ich Button 1 anspreche soll A passieren und wenn es aber Button 2 ist soll B passieren.


    Dein Weg sollte eher sein, wenn ich Button X anspreche, macht Button X was button X eben macht.


    z.B. : Du hast 2 Buttons in der Welt. Der eine Ändert das Wetter, der andere Ändert deine Bewegungsgeschwindigkeit.


    Beide Buttons haben eine Funktion namens DoSomething.


    Button Wetter DoSomesting : Benötigt die Level-/ oder Wetteractorreferenz. und Ändert dann in diesem das Wetter.


    Button Movement DoSomething : Benötigt die Playerreferenz und ändert die Movementgeschwindigkeit.


    Wenn du nun den Button "ansprichst" weiß dieser von sich aus, was zu tun ist. Beim Movement, gibt's du ihm beim Ansprechen deine "SelfReference" mit, somit "kennt" der Button dich.


    Du kannst aber den Buttons auch ne Variable namens ID oder Name geben. und dann fragen, welche ID/Name der Button hat. Gibt viele Wege,