Jump to content
Unity Insider Forum

Leaderboard


Popular Content

Showing content with the highest reputation since 04/29/2020 in Posts

  1. 3 points
    Hat sich erledigt. Habe die Antwort in einem englischsprachigen Forum gefunden. Falls ein Anfänger die gleiche Frage hat, hier die Lösung des Problems: Das Feld zur Eingabe der Framerate kann tatsächlich ein- und ausgeblendet werden. Es scheint Standarsmäßig ausgeblendet zu sein, so dass man es erst einblenden muss. Hierfür gibt es ganz rechts oben im Animationsfenster (dort wo die Zeitleiste dargestell wird) eine Schaltfläche zum Einblenden eines Menüs, in dem man das Eingabefeld selektieren kann. Siehe Screenshot!
  2. 2 points
    Du musst das Client/Server Prinzip verstehen. D.h. es gibt einen Server, welcher auf einem Port lauscht. Ein Client verbindet sich mit diesem Server über den Port. IdR werden in Heimnetzwerken NAT Router genutzt. D.h. um einen Server von extern zu erreichen braucht es ein Port-forwarding oder du brauchst einen Server, welcher im Interneterreichbar ist (z.B. bei einem Provider).
  3. 1 point
    Hallo Kompetenz. Das wäre was. Im Ernst: Ich befinde mich am Anfang einer hoffentlich langen Reise. Ich stehe allerdings deutlich mehr auf das fantasy setting und habe mir deswegen da ein paar assets gegönnt. Deine Nachfrage ist wirklich nett. Christoph
  4. 1 point
    @chrische5 was könntest du denn gebrauchen? Vielleicht könnte ich da ein neues Asset draus machen?
  5. 1 point
    Musst halt eins bauen! So als Beispiel: public int moneyAmount; public void Collect() { Debug.Log(moneyAmount + " eingesammelt"); } Das packst du auf deinen Prefab, bzw irgendwo da rein (auf den Button z.B.) und dann löst du einfach Collect() mit dem Button aus. Jetzt kannst du mehrere Prefabs machen die verschiedene Dinge tun. Wenn du da mehr machen willst, oder evtl nur ein Prefab haben willst, ist es besser, dieses Script auf dem Prefab zu erweitern, als andere Scripts in den Prefabs rumpfuschen zu lassen. private int moneyAmount; public Text label; private void Start() { moneyAmount = Random.Range(10, 100); label.text = "Du hast " + moneyAmount + " gewonnen!"; } public void Collect() { Debug.Log(moneyAmount + " eingesammelt"); } Wenn du das auf dein Prefab tust, den Text reinziehst und den Button Collect() auslösen lässt, dann bist du fertig! Du kannst das Prefab sogar ohne dein Spawn-Script benutzen. Einfach mal zum Testen in die laufende Szene reinziehen.
  6. 1 point
    Da gibt es zwei Wege. Zum einen kannst du im Script, welches ja an dein Prefab gebunden ist, Werte angeben. Hier wäre z.B. ein Script zum Laden einer anderen Szene: public string sceneName; public void LoadScene() { SceneManager.LoadScene(sceneName); } Jetzt kann man die Komponente in die Nähe des Buttons (oder halt direkt drauf) ziehen und den Namen der zu ladenden Szene eingeben. Das funktioniert, weil du ja nicht die Methode der Klasse aufrufst, sondern der Instanz. Wenn du zwei Buttons hast, der eine zeigt auf das eine GameObject mit diesem Script drauf und der zweite zeigt auf ein anderes GO mit diesem Script, dann wird auch wirklich nur von der Komponenten-Instanz die Methode aufgerufen, auf die da gezeigt wird. Die beiden Komponenten-Instanzen können daher unterschiedliche Werte haben (z.B. für sceneName), und diese Werte werden dann bei der Ausführung berücksichtigt. Alternativ kann man der Methode einen Parameter geben: public void LoadScene(string sceneName) und dann den Wert dieses Parameters beim Button einstellen. Die erste Variante ist vielseitiger, da der Button nur einen Parameter übergeben kann, man aber beliebig viele Felder in das Script packen kann. Die erste Variante erlaubt dir, dass du eine Methode in einem Script ausführen kannst, das eben nicht schon vorher weiß, welchen Wert es haben muss. Man denke z.B. an eine Light-Komponente. Die hat ja auch kein Feld "Farbe, die ich annehme, wenn ein Button gedrückt wird". Für solche Fälle kann man dann sagen Light.color und eine Farbe direkt im Inspektor des Buttons einstellen.
  7. 1 point
    Du kannst entweder selber Reaktionen in UnityEvents (wie onClick) einfügen oder eine Methode auf einem Script innerhalb des Prefabs verlinken. Selber hinzufügen: var button = Instantiate(buttonPrefab); button.onClick.AddListener(() => { TuZeug(100); }); Und beim fest Verlinken, was meistens die bessere Variante ist, baust du halt ein Script mit einer Methode, das landet irgendwo auf dem Prefab, der Button löst die MEthode auf und was dann in der Methode passiert, kannst du dann da implementieren.
  8. 1 point
    Heute war ein schöner Tag, aber ich war trotzdem nicht draußen. Ich habe endlich den Endgegner vom Level 2 programiert und konnte nicht locker lassen, bis er (weitestgehend) fertig war. Beim spätern finalen Einsatz im Spiel wird es noch weitere Geräusche geben, wenn die verschiedenen Teile vom Gegner aus diesem herraus fahren. Zudem wird es im fertigen Spiel etwas mehr Hintergrund geben. Es werden verschiene alte Wracks sichtbar sein. Hier nun das Video:
  9. 1 point
    Die sind generell überall da eine Überlegung wert, wo du Daten hast, die nicht speziell an bestimmte Objekte gebunden sind. Damit sind Items, Achievements und Charaktereigenschaften sehr gute Beispiele für Dinge, bei denen man gut ScriptableObjects benutzen kann. Naja, du ziehst das Achievement-SO aus den Assets in deine Komponente, nachdem du ein Feld dafür gemacht hast: [SerializeField] private Achievement achievement; bzw. [SerializeField] private Achievement[] achievements; für mehrere. Dann greifst du halt drauf zu: someTextComponent.text = achievement.title;
  10. 1 point
    Hi Christoph, vielen Dank für deinen Feedback. Das hilft mir sehr. Dirk
  11. 1 point
    Hallo Leute! Ich möchte euch ein kleines Projekt vorstellen: BABU Es ist eigentlich als Lückenfüller gedacht gewesen, aber nun schon ziemlich weit vorangeschritten, dass es sich auch lohnt, hier vorzustellen. Das Spiel: Auf jedem Level gibt es ein paar Roboter, die innerhalb von Blöcken (oder Röhren) herumlaufen. Die bauen entweder von oben nach unten neue Blöcke oder verstärken die bestehenden. Da wird dann aus dem normalen Block ein gepanzerter Block oder aus einem solchen eben ein Block mit Geschützturm. Und die feuern dann auch fleissig in Richtung Spieler. Das Spiel kann man gewinnen, indem man entweder alle Roboter in einem Level zerstört oder - wie der Titel schon sagt - alle Blöcke wegschiesst. Dafür sind (stand heute) die Impulskanone, Bomben oder Super-Bomben vorgesehen. Dann geht es weiter ins nächste Level - oder ganz am Ende in den Highscore-Screen. Und wenn man gut genug war, kann man sich dort mit den für damalige Maschinen oft üblichen 3 Zeichen verewigen. Das gesamte Spiel soll den Style der Acrade-Maschinen der 80er / Anfang 90er haben. Dev-Hintergrund: Ein Lückenfüller, um meine Motivation zu erhalten, auch am Hauptprojekt weiterzuarbeiten, was noch Jahre dauern wird. Und zudem wollte ich mir das eine Spiel aus meinen Kindheitserinnerungen nachbauen. Das Spiel hatte ich im Urlaub in einem Restaurant / Bar gefunden, wo meine Eltern mit mir 3-Käse-Hoch im Urlaub ein paar Mal Mittag gegessen hatten. Damals habe ich es nicht gebacken bekommen, die Impulskanone abzufeuern. Nur die 3 Bomben konnte ich legen und kam halt nicht wirklich weit. Wenn einer von euch zufällig erkennt, was das Original sein könnte und auch noch den Namen vom Original kennt, bitte Bescheid geben. Ich hoffe, ich kann es irgendwann finden und mal wirklich spielen. Das Release: Fertig (Beta): Windows (Linux geplant) Kosten: Kein Geld (eventuell Zeit und Nerven) Links: Ankündigungsvideo auf YT Pre-Alpha Demo auf YT: Download (kostenlos): https://hardgames.itch.io/babu Ich hoffe, es wird euch Spaß machen. Feedback wird gerne genommen
  12. 1 point
    Wenn du mit einem Objekt arbeitest, das gar nicht da ist, dann nimmt C# aber nicht irgendwelche Default-Werte. Dann hagelt's die NullReferenceException. Immer in der Konsole nach Fehlermeldungen schauen. AddForce ist auch meistens Quatsch, das wird viel zu viel benutzt. Einmalig in Start rb.velocity auf nen Vektor setzen und fertig. Nein, aber keine Sorge, kannst du direkt im Anschluss machen. Ich habe mal mit Überladungen für Instantiate experimentiert, aber da es keine Möglichkeit gibt, sicherzustellen, dass auch wirklich Parameter übergeben werden und nicht nur das normale Instantiate ohne Parameter aufgerufen wird, hab ich's wieder eingestampft. Was du machen kannst ist eine Methode zum Initialisieren der Komponente, nenne sie daher gerne z.B. "Initialize( ... )". Dann machst du var spawnee = Instantiate(prefab); spawnee.Initialize(parameters); Ich frage mich gerade... sind die Laser langsam oder eher blitzschnell? Wenn die nach Sekundenbruchteilen schon ankommen, ist es eine Überlegung wert, stattdessen Raycasts zu benutzen und die Laser nur visuell darzustellen, anstatt ihn als kollidierendes Objekt zu instanziieren.
  13. 1 point
    Wie geschrieben. Der Dienst muss halt erreichbar sein. Wenn nicht bei dir, dann im Internet z.b. bei einem Provider. Alternativ via VPN, aber das ist komplexer und du hast das selbe Problem mit dem Netzwerkport.
  14. 1 point
    Hat echt nen Moment gedauert, bis ich's gefunden hab. Ist echt gemein. Transform.Translate verschiebt ein Objekt in dessen local space, heißt: Wenn du Vector3.forward reinschmeißt, fliegst du dahin wo die Nase hinzeigt. Wenn du aber Transform.forward reinschmeißt, ist das doppelt gemoppelt. Richtig wäre also tr.Translate(Vector3.forward); oder auch tr.Translate(tr.forward, Space.World); oder, wo wir schon dabei sind, tr.position += tr.forward; (Jeweils mit was-auch-immer-du-da-raufmultiplizieren-willst.)
  15. 1 point
    Wenn du mit Sprites arbeitest solltest du immer Order In Layer vom Spriterenderer mit Zahlen bestücken. Je größer die Zahl, umso weiter vorne ist das Sprite. Egal, ob es näher an der Kamera ist oder nicht. (Oder in deinem Fall genau gleich weit weg) https://docs.unity3d.com/Manual/class-SpriteRenderer.html
  16. 1 point
    Sollte nicht: Serialisiert bedeutet, dass der Wert in der Szenen-/Prefab-Datei gespeichert wird. Was du da im Editor einstellst, landet also im Spiel. [ShowInInspector] zeigt nur an, speichert aber nichts. Damit dürften auch die restlichen Punkte beantwortet sein
  17. 1 point
    Wenn es einfach nur lila ist, hast du einen nicht kompatiblen Shader drauf. Um das zu ändern, klicke auf das entspechende Material, wähle oben bei Shader "Universal Render Pipeline" und dan z.B. den Lit Shader. Bedenke einfach das wenn du keinen 2d Shader verwendest, dein 3d Objekt nicht mit 2d Licht interagiert. Sprich, es sieht immer gleich aus, egal ob du das 2d Licht dimmst oder den Farbton änderst. Ob man sich dafür einen eigenen Shader im Shader-Graph basteln kann weiss ich nicht.
  18. 1 point
    Falls es jemand wissen möchte, habe mittlerweile eine Lösung gefunden. InputAction.WorldMap.Mountmovement.performed += ctx => _mouseDoubleClick = ctx.action.triggered; Man kann das ganze auch direkt an eine Methode binden: Beispiel: InputAction.WorldMap.Focusmount.performed += FocusMount; private void FocusMount(InputAction.CallbackContext ctx) { transform.position = new Vector3(Mount.transform.position.x, Mount.transform.position.y, transform.position.z); }
  19. 1 point
    Also es ist so: Der Code ansich wird Zeile für Zeile abgearbeitet. Eingabesignale und Ausgaben, z.B. auf den Bildschirm, passieren Frameweise. Welcher Code wann abgearbeitet wird, hängt davon ab, welche Funktion du nutzt. In der Update Funktion wird einmal pro Frame alles von oben nach unten abgearbeitet. In der FixedUpdate wird einmal pro FixerdTime Intervall der gesammte Code abgearbeitet. Genauso ist das in OnTrigger oder OnCollision Funktionen. In jedem Script in deiner Szene können unterschiedliche Funktionen drin stehen. Die Funktionen werden alle nach gewissen Intervallen abgearbeitet. Wenn also der Update Zyklus dran ist, werden alle Update Funktionen in allen aktiven Scripts abgearbeitet. Das passiert aber nicht gleichzeitig sondern ein Script nach dem anderen. Welches Script damit anfängt, wird beim Spielstart zufällig festgelegt. Da kann man aber eingreifen und eine Abarbeitungsreihenfolge einstellen. Wärend eines Frames werden die Scripte also von oben nach unten abgearbeitet. EIn Inputsignal, steht wärend des kompletten Frames an, denn es wird auch nur einmal pro Frame ausgewertet. Somit sollten dein 3 Debugzeilen alle geschrieben werden. Aber der Output wird erst am Ende des Frames gemacht. Also quasi gleichzeitig. Solltest du beim Drücken der Taste H z.B. etwas berechnen wollen, und du hättest da auch 3 Zeilen, die untereinander stehen, dann würden alle 3 Zeilen genauso von oben nach unten abgearbeitet werden. Es geht also immer von oben nach unten. Willst du da dynamisch mal so mal so abarbeiten lassen, musst du dir Bedingungen schaffen. Dann würdest du gewisse Sachen nur dann ausführen, wenn eine bestimmte Bedingung erfüllt ist.
  20. 1 point
    Weil viele Leute ein Spiel mit Unity erstellen wollen, aber ein paar wichtige Infos fehlen, werde ich hier einmal erklären was alles wichtig ist und warum es manchmal zu Problemen kommt. Warum mach ich das? Weil ich mich eben gerade geärgert habe! Eines unserer Forenmitglieder (den Namen werde ich nicht nennen) hatte mich eben über Skype gefragt, ob ich jemanden kennen würde, der 3D Objekte erstellt. Das war die Frage, nicht mehr und nicht weniger! Natürlich war mir klar was er wollte. Er wollte, dass ich ihm jemanden vermittle, der kostenlos Modelle erstellt oder aber das ich sie für lau erstelle. Als ich ihm gesagt hatte, dass ich einige Leute kenne, die das aber professionell, also gegen Bezahlung machen, und ich selber keine Zeit dafür habe, hat er mich aus den Kontakten raus gekickt! Das war nicht die feine Art und außerdem unrealistisch. Vorallem ärgert es mich, da ich ihm schon einige Male geholfen habe. Somit sind wir beim Thema: Jeder, der ein Spiel erstellen will sollte beachten, dass ein Spiel nicht nur aus dem Code besteht, der die Engine (in unserem Fall Unity3d) steuert. Nein, das Wichtigste sind die Objekte, die gesteuert werden! Die müssen in einem 3D Programm oder, wenns 2D sein soll, in einem 2D Grafikprogramm erstellt werden. Diese Sachen kosten eine Menge Zeit und Können! Die meisten Leute denken, dass sowas mal eben gemacht ist. Dem ist nicht so. Ein einfaches Haus welches ne nette Textur hat, dauert schon mehrere Stunden. Ein Männchen, welches mit Bones versetzt und animiert wird, dauert mindestens einen Tag, wenn nicht mehrere Tage!!!! Die Objekte für ein ganzes Spiel dauern Wochen bis Monate, bis sie alle gebaut, texturiert, animiert und arangiert sind! Natürlich braucht ein Spiel auch Geräusche und Musik. Einfache Geräusche sind teilweise im Netz für lau zu bekommen. Gute Geräusche muss man kaufen oder aber selber aufnehmen bzw. selber erstellen. Dieses dauert auch. Nicht ganz so lang, aber es summiert sich. Bei der Musik sieht es schon ganz anders aus. Wer kann schon selber Musikstücke erstellen. Also entweder kaufen oder jemanden komponieren lassen. Natürlich gibt es auch GEMA freie Stücke im Netz, meist passen die aber nicht oder andere Spiele haben diese Musik schon drin. Das will man natürlich nicht. Jetzt kommt die GUI, die Menüs, die Anzeigen, und und und... auch dafür braucht es jemanden, der sowas kann, wenn es nach etwas aussehen soll. Auch hier kann man mehrere Tage einplanen, bis alles Nebensächliche erstellt worden ist. Story, Dialoge, Spielziele lasse ich jetzt einfach mal weg. Da gehe ich davon aus, dass wenigstens das vorher schon gemacht wurde. Das Programmieren des Codes rechne ich auch nicht ein, denn ich gehe davon aus, dass die Jungs hier, genau das machen. So, jetzt seht ihr, dass ein Spiel viel mehr ist, als einen Cube von a nach b zu bewegen. Ihr solltet jetzt auch erkennen, dass komplexere Spiele nur schwer von einer Person zu bewältigen sind. Ihr solltet außerdem bedenken, dass die Sachen, die ihr nicht könnt, nicht immer umsonst von anderen Leuten hergestellt werden. Nein, gerade das Gegenteil ist der Fall. Es dauert nämlich unheimlich lange und warum sollte der Mensch seine Freizeit für jemanden anderes opfern, von dem er nichts hat? Was mir auch noch ganz wichtig ist: Nur weil ich Tutorials umsonst ins Netz stelle, heißt das nicht dass ich alles umsonst mache und nix anderes zu tun habe als hilflosen Fans zu helfen. Die Tutorials sind gerade deswegen da, damit andere Leute es lernen und selber machen können! Es geht nicht nur mir so, nein allen Jungs geht's so, die Tut's ins Netz stellen. Ganz so als wäre man Mutter Theresa! Versteht einfach, dass so Leute wie ich 40Stunden in der Woche arbeiten, eine Familie haben, eigene Hobbys betreiben und dann nur noch wenig Zeit für anderes da ist. Diese wenige Zeit ist kostbar und wird nicht leichtfertig an Andere abgetreten. Somit macht euch klar, dass nix umsonst ist! Manchmal hat man Glück und bekommt etwas für lau. Meistens aber nicht. Also bleibt euch nur alles selber zu machen, sich mit Gleichgesinnten zusammen zu schließen um alle Felder abzudecken oder aber Geld für Leistungen zu bezahlen. Selbst die Gleichgesinnten wollen was haben. Meist arbeiten sie in Vorleistung und wollen einen Teil des Gewinns, wenn es denn einen Gewinn gibt. Das Ganze soll euch nicht entmutigen, nur die Augen öffnen!
  21. 1 point
    Also eigentlich ist es so, dass ein Regelwerk auch eine Geistige Errungenschaft ist und dem Copyright unterliegt. Also einfach 1zu1 in ein anderes Spiel einzufügen ist erst mal nicht erlaubt. Manchmal darf man ein Regelwerk aber nutzen. Beispiel: Das (Grund)Regelwerk von Dungeons & Dragens (D&D) wurde frei Verfügbar weil es vom Entwickler im Jahr 2000 unter die Open Game Lizens gestellt wurde. Diese Lizens beinhaltet aber nicht die Objekte mit all ihren Werten, die in den Geschichten verwendet wurden. Lediglich die Berechnungsmechanik und Wertevergabe wurde frei gegeben. Willst du aber ein Spiel mit der Spielemechanik von z.B. Monopoly bauen, musst du eine Lizens vom Hersteller erwerben. Das heißt aber nicht, dass du dich nicht von solchen Mechaniken inspirieren lassen darfst. Du darfst sie nur nicht ohne Erlaubnis oder Lizens einfach 1zu1 einbauen.

Announcements

Hy, wir programmieren für dich Apps(Android & iOS):

Weiterleitung zum Entwickler "daubit"



×
×
  • Create New...