Jump to content
Unity Insider Forum

Leaderboard

Popular Content

Showing content with the highest reputation since 08/22/2021 in all areas

  1. Hey Sascha, wie du das immer machst ist unglaublich :D. Tatsächlich arbeite ich mit DOTween und beim Start springt er sofort in die Animation, pausiert diese aber unmittelbar aufgrund von Time.timeScale = 0. Dennoch konnte das Image ein paar x Koordinaten gut machen und ich erhielte immer den selben Wert 1769. Danke
    1 point
  2. Ich würde jetzt einfach mal auf deinen Animationscode tippen. Den müsstest du allerdings mal posten.
    1 point
  3. Du kannst bei Instantiate Position und Rotation als zweiten und dritten Parameter mitgeben. Instantiate(coin, somePosition, someRotation);
    1 point
  4. Das... klingt überaus krumm. Sowas hab ich noch nie gehört, und da fällt mir auch irgendwie nix zu ein 🤔
    1 point
  5. Gerade bei Blender ist das bekannt. Da ist die Z-Achse ja oben, während bei Unity Y die vertikale Achse ist. Und aus irgendeinem Grund schafft Unity das nicht, dem FBX Exporter beim automatischen Export zu sagen, dass er das fixen soll. Als Resultat haben wir um -90° gedrehte importierte Objekte, damit sie richtig herum sind. Tatsächlich habe ich mal einen AssetPostProcessor geschrieben, der das reparieren soll, aber der ist nie brauchbar geworden, weil es brutal viele Sonderfälle zu beachten gibt... Wenn du dann ein solches Objekt auf eine normale Rotation setzt, die diesen Umstand nicht beachtet, dann gehen diese -90° flöten und das Objekt ist falsch ausgerichtet. Der beste Weg ist, das Objekt selber zu exportieren: https://unity3d.college/2017/07/08/fix-bad-90-x-rotation-unity3d-blender/ Wenn das aber nicht drin ist, ist es nicht unüblich, ein leeres Objekt zu nehmen, das Modell als Child mit der -90°-Drehung hinzuzufügen, und dann den Parent normal zu drehen. Ja, das kannst du, aber du kannst auch einfach einen Vector3 statt drei floats deklarieren Beides sind Repräsentationen derselben Sache. Euler-Winkel sind nur doof, weil sie "Gimbal-locken" können. Quaternions sind schwerer zu verstehen, aber ansonsten einfach nur besser. Um eine Ausrichtung im Editor einzugeben, sind Euler-Winkel in Ordnung. Aber sobald du im Code angekommen bist, wirfst du die recht schnell weg. Mit Quaterion.Euler kannst du einen Euler-Vector3 in ein Quaternion umwandeln. Aber willst du wirklich Ausrichtungen im Editor definieren? Oder vielleicht doch lieber Punkte zum Hinlaufen, und dann die Ausrichtung mit z.B. Quaternion.LookRotation errechnen lassen?
    1 point
  6. Fast richtig - es gibt hier nur eine Coroutine, die pausiert wird. "yield return null;" darf man übersetzen mit "Warte einen Frame". Du steckst einen Vektor rein und kriegst eine Rotation zurück, die ein Objekt so ausrichtet, dass es in die Richtung dieses Vektors schaut. Das hier: transform.rotation = Quaternion.LookRotation(direction); macht dasselbe wie transform.forward = direction; Da wir ja aber schrittweise da hindrehen wollen, erzeuge ich erstmal die Drehung (das Quaternion) und benutze RotateTowards, um das Objekt immer weiter dieser Rotation anzunähern.
    1 point
  7. Hallo Community, ich habe für mein Projekt eine kleine Demo vorbereitet. Die könnt ihr euch hier downloaden: Orfaya Demo Die Demo verfügt noch nicht über ein Setting-Menü. Daher startet sie dann mit der jeweiligen Auslösung des Endgeräts. Ich habe auch noch kein Menü über die Tastenbelegung. Allerdings sollte die Steuerung in der Demo keine Probleme bereiten. Ich habe die Demo auf meinem schwächten Rechner (Laptop mit GeForce MX230) getestet und ich hatte noch 40FPS. Die Dorfregion ist komplett erkundbar und es stehen ein paar Quests und einfache Kämpfe zur Verfügung. Viel Spaß beim Erkunden von Orfaya.
    1 point
  8. Danke für deine Erklärung! Ich habe deinen Rat befolgt und siehe da, es klappt wie gewünscht. Wieder was dazugelernt! Besten Dank und noch einen schönen Tag! uvs[i] = new Vector2(verts[i].x / 250, verts[i].z / 250);
    1 point
  9. Die Bewohner der Dorfregion müssen ja eine feste Bleibe haben. Hier der Blick auf die Häuser des kleinen Dorfs.
    1 point
  10. Es gibt jetzt ein neues Video und noch viel mehr neues; schaut einfach mal in den ersten Post
    1 point
  11. Gestatten: Der Bomber! Nun gehts aber ab! Der Bomber wirft 2 Bomben gleichzeitig, ist aber recht behäbig beim Fliegen. Na ja, er soll ja auch nur Bomben abwerfen und keine Kunststücke machen.
    1 point
  12. Wenn Riffolk Ringe, Statuen oder anderen Schmuck oder Geglitzer benötigt, dann kann er Andarius einen Besuch abstatten. Andarius ist der dritte Händler im Dorf.
    1 point
  13. Moin. Klick mal auf das folgende Icon im Editor:
    1 point
  14. Hallo Also bei mir hat alles wunderbat geklappt. Dazu kam gleich noch der Erkenntnisgewinn, dass es ja Dinge gibt, die man über alle alle Szenen hinweg braucht. Hatte ich noch gar nicht verinnerlicht. Ein Logsystem ist genau so etwas. Das hatte ich bisher immer an einem GameManager hängen und da ich deine Abneigung kenne, habe ich mich immer schlecht dabei gefühlt. Des Weiteren hätte ich diesen in jeder neuen Szene neu erstellen müssen. So fällt das nun weg. Christoph
    1 point
  15. Hallo Sascha Hans Rosenthal würde sagen: "Das war Spitze!" Ich habe deine beiden Korrekturen übernommen und siehe da, es funktioniert tadellos. Besten Dank für die rasche und wie immer kompetente Hilfe!
    1 point
  16. Achso, hab mich schon gewundert Das neuste Update (inzwischen 1.4.1) enthält das ModuleSettings-System. Die Erklärung dazu ist viel komplexer als das System selbst... Ich mache ja kein Geheimnis daraus, dass ich kein Freund von "...Manager"-Komponenten bin. Wenn du mich fragst, soll man eher versuchen, dass Objekte sich selbst (ansonsten untereinander) managen, anstatt dafür eine zusätzliche Instanz zu haben. Im Zweifelsfall auch mit statischen Feldern und Methoden in der eigenen Klasse. Geht aber auch nicht immer, manchmal muss einfach ein Service Provider her. Aber auch der sollte nicht Leute dazu zwingen, ihn in eine Szene einzufügen oder sowas. Grundregel bei mir ist: Wenn du eine neue Szene erstellst, sollte es keine Checkliste von Dingen geben, die du erfüllen musst, damit dein Code funktioniert. Du willst eine Spielfigur haben? Zieh dein Prefab in die Szene. Du willst, dass Input funktioniert? Dann solltest du dafür nichts extra tun müssen. Da gibt's halt zwei Probleme: MonoBehaviour-Events. Du willst in vielen Services auf z.B. Start, Update oder OnApplicationFocus reagieren können. Dafür empfehle ich einen kurzen Code mit [RuntimeInitializeOnLoadMethod]-Attribut, der ein GameObject erstellt, HideFlags drauf, DontDestroyOnLoad drauf, Worker-Komponente drauf, fertig. Die Komponente ruft dann Methoden in der statischen Service-Klasse auf. Serialisierte Felder. Viele Services wollen Referenzen auf AudioClips, Sprites usw., vor allem aber auf ScriptableObjects oder Prefabs haben. Jetzt kann man halt sowas machen wie eine Initialisierungs-Szene, in der alle wichtigen Systeme drin sind, DontDestroyOnLoad drauf, vielleicht noch ein bisschen Editor-Code, damit man den Play Mode in einer beliebigen Szene starten kann und die Init-Szene dann additiv geladen wird... geht schon. Da hat man dann einen Haufen Komponenten drin, die einen auf Pseudo-Singleton machen. Aber eine andere Regel von mir ist: Wenn du einen Klebezettel an etwas im Editor pappen musst, auf dem steht, dass man da bitte die Finger von lassen soll, sonst könnte was kaputt gehen... dann ist der Code nicht besonders gut. Ich will halt einfach den Editor für Game/Level/UI-Designer haben. Und ich will möglichst wenig Restriktionen für sie haben. Wenn ich in einem Team einen neuen Designer habe, dann soll so wenig wie möglich im Editor rumfliegen, worüber der Mensch Bescheid wissen muss. Also bleibt der technische Kram schön im Code und der Design-Kram schön im Editor. Und damit kommt das neue ModuleSettings-System ins Spiel. Du baust eine statische Service-Klasse und dazu eine Settings-Klasse: using UnityEngine; using ThirteenPixels.Soda.ModuleSettings; internal class InputSystemSettings : ModuleSettings { protected override string title => "My Input System"; // This is optional. public Sprite gamepadIcon; } Mehr musst du nicht machen, dann kümmert sich das System um eine Instanz, die in den ProjectSettings liegt statt in den Assets. Sie taucht dann im Project Settings-Fenster auf: Dort kannst du alles mögliche zuweisen. In deiner statischen Service-Klasse musst du die Settings dann nur noch so laden: ModuleSettings.Get<InputSystemSettings>(); und schon hast du die Daten zur Laufzeit! Bei mir im Projekt kann ich halt einfach eine Szene anfangen und abgesehen von so Unity-Dingen (wie das EventSystem-GameObject...) gibt's da exakt nichts einzurichten. Ich tu das rein, was ich in der Szene vom Design-Standpunkt aus haben will und lasse alles weg, was ich nicht brauche. Verpflichtendes Setup, damit die Systeme funktionieren? Gibt's nicht. Entsprechend einfach ist halt auch Testing. Kurz mal nen Spieler und zwei Boxen in die Szene, schauen ob das mit dem Springen klappt, fertig.
    1 point
  17. Hallo, ich arbeite an folgendem Projekt als 3D Artist mit. Kurz zusammengefasst: Open mod is a free-to-play, tactical first person shooter. Die Präsentation befindet sich noch etwas in Aufbau, aber ein bischen Gameplay gibt es schon in einem Video zusammengefasst: Discord: https://discord.com/invite/mPMYwkpKPj Web: https://hypergamey.studio/
    1 point
  18. Hallo, nach einem anstrengenden Kampf benötigt Riffolk Heilung und oder Mana. Diese Tränke kann er sich beim Dorfdruiden besorgen. In dem kleinen moderierten Video geht es um die Vorstellung der Händlerpanels und dem Vorgang des Kaufens. Das Inventar des Spielers in diesem Zusammenhang werde ich später vorstellen.
    1 point
  19. Sag ich ja Exakt. Du hast zwei Variablen, in denen dieselbe Adresse steht, unter der dein eines List-Objekt zu finden ist. Ja - wenn du bereit bist, deinen anderen Code zu ändern. Du machst ja nicht list.Remove nicht direkt in der Schleife, sondern wie gesagt vermutlich in OnDisable oder OnDestroy oder so. Das kann schon gut und richtig sein, und wenn du das beibehalten willst, kannst du einfach zur runterzählenden for-Schleife wechseln. for (var i = list.Count - 1; i >= 0; i--) { Destroy(list[i]); // <- löst indirekt list.Remove(list[i]) aus }
    1 point
  20. Du hast im Editor beide Szenen gleichzeitig geladen. Unity kann das, nennt sich additives Laden von Szenen. Wenn du im Editor auf Play drückst, dann startet das Spiel nicht von vorne, sondern in der Szene (oder eben: in den Szenen), die du gerade offen hast. Damit kannst du dieses Level oder jenes Menü testen, ohne im Spiel erstmal mühsam da hin zu navigieren. Schließe einfach eine der beiden Szenen, indem du links in der Hierarchie mit rechts draufklickst. Das heißt, dass in der Szene etwas geändert wurde, was (noch) nicht gespeichert ist. Während der Play Mode läuft, kannst du aber nicht speichern (ist ja auch gut so).
    1 point
  21. Ich bin verwirrt... was hat der Button mit dem MainGame-Script zu tun? Start wird auf einer Komponente ausgeführt, sobald das Objekt das erste Mal "das Licht der Welt erblickt". Also entweder, wenn die Szene, in der sie sich befindet, geladen wurde... oder wenn du das Objekt mit Instantiate spawnst. Oder nach AddComponent. Wenn dein MainGame.Start zu einem ungewollten Zeitpunkt ausgeführt wird, dann existiert das Objekt zu einem falschen Zeitpunkt, zu früh oder zu spät. Wenn das Spiel startet, lädt Unity die erste Szene ganz oben in der Build List. Ob das jetzt ein Ladebildschirm, ein Hauptmenü, schon das Spiel oder irgendeine technische Szene ist, die andere Szenen lädt, ist egal.
    1 point
  22. Beim 2D-Raycast schießt du halt einen Strahl entlang des Bildschirms. Du testest also mehr Pixel als nur den, wo die Maus drüber ist. Du kannst also je nach Richtung neben einen Collider klicken, und er wird trotzdem erkannt. OverlapPoint ist halt genau dafür da, nur das eine Pixel zu testen und sonst nichts. Deine NullReferenceException kommt daher, dass du den Code ändern musst, da OverlapPoint etwas anderes zurück gibt als Raycast. Raycast gibt dir einen RaycastHit2D zurück, der mehr Infos enthält als die, welcher Collider getroffen wurde. So etwas wie "wie weit der Strahl dafür wandern musste", wo auf dem Collider der Strahl getroffen hat oder sogar, welchen Winkel zur Oberfläche der Strahl beim auftreffen hat. Das brauchst du hier alles nicht, und OverlapPoint gibt das auch alles nicht zurück... ergibt ja auch gar keinen Sinn, da es keinen Strahl gibt. Entsprechend gibt OverlapPoint einfach nur den getroffenen Collider zurück, oder null, wenn nichts getroffen wurde. Du musst also deinen Check von if (hit.transform != null) zu if (hit != null) bzw, in Unity wäre das dasselbe, if (hit) ändern. Wobei ich natürlich "hit" umbenennen wollen würde, weil's ja kein hit mehr ist, sondern ggf. ein Collider. Bei hit.transform versucht Unity, dir die Transform-Komponente des getroffenen Colliders zu geben. Wenn es aber gar keinen getroffenen Collider gibt, fängt Unity aber an zu weinen.
    1 point
  23. Deswegen hatte ich gefragt: Dein Raycast geht nach oben, die Maus müsste also unterhalb einer Box sein. Sonst trifft der Ray nicht. Aber naja.. mir ist jetzt erst der Fehler aufgefallen; ist doch im Code. Voll übersehen... Deine Objekte sind ja so 1x1m groß. Input.mousePosition ist in Pixeln. Wenn du in der Mitte eines, sagen wir, 1080x1920-Games deinen Mauszeiger hast, dann ist Input.mousePosition entsprechend (540, 960). Deine Boxen sind aber alle so bei (1, 1), (2, 1) und so weiter. Davon abgesehen ist der Wert von Input.mousePosition unabhängig davon, was die Kamera gerade so treibt. Was du tun willst ist, Input.mousePosition in Camera.ScreenToWorldPoint zu schmeißen. Das rechnet dir deine Maus-Position auf dem Bildschirm in eine passende Position in der Welt um, je nachdem, was für einen Bildausschnitt die Kamera gerade so von der Welt rendert. var worldPoint = Camera.ScreenToWorldPoint(Input.mousePosition); Physics2D.Raycast(worldPoint, ...); Ich vermute zudem, dass du gar nicht wirklich nach oben weg raycasten willst, sondern wissen willst, über welchem Objekt die Maus ist, richtig? Dann nimm mal lieber Physics2D.OverlapPoint.
    1 point

Announcements

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

Weiterleitung zum Entwickler "daubit"



×
×
  • Create New...