Jump to content
Unity Insider Forum

All Activity

This stream auto-updates

  1. Yesterday
  2. Moin moin! ich bin auf ein kleines Problem gestoßen: und zwar möchte ich für jede Sekunde die abläuft 1% In einem Textfeld immer steigend ausgeben lassen. Hier ist mein bisheriges Script: public class PlayerOtherFunctions : MonoBehaviour { public float roundTimer ; public Text levelCounterText; private float levelCounterFloat; // Start is called before the first frame update void Start() { roundTimer = 100f; } private void Update() { roundTimer = roundTimer - Time.deltaTime; levelCounterFloat = 100 - roundTimer; levelCounterText.text = levelCounterFloat.ToString() + "%"; } mein Textfeld bleibt unverändert und ich bekomme diese Fehlermeldungen(Anhang) Vieleicht hat ja jmd eine idee was ich falsch gemacht habe, oder wie ich es besser machen könnte. LG
  3. Kann es sein, dass du in deinem Projekt irgendwelche Sonderzeichen oder Umlaute nutzt, die nicht UTF8-konform sind? Also bei Variablennamen, Klassen/Scriptnamen oder Objektnamen. Ist halt Apple-Scheiße! Glaub mal nicht, dass die mit erweiterten Zeichensätzen richtig umgehen können.
  4. Hallo zusammen, mein aktuelles Unity Projekt ist fast fertig und zum testen bereit. Nachdem ich Version 1.5.7 gebaut habe und auf mein iPhone gezogen habe sind mir ein paar grafische Fehler aufgefallen (Button waren nicht geanchort). Diese Fehler habe ich verbessert und wollte es dann erneut auf dem iPhone testen aber Xcode kann das Projekt nicht mehr bauen. Build Failed!! Es handelt sich um 2 unterschiedliche Fehler die insgesamt 100 mal auftreten: error build: Undefined symbol: __stringLiteral08122D617AD0FC9EF4B4722AD4EFB6AA18449953 error build: Undefined symbol: _g_FieldOffsetTable1687 Ich suche jetzt schon seit ein paar Tagen nach einer Lösung aber ich schaffe es nicht dieses Problem zu beheben. Ich habe viele unterschiedliche Versuche gestartet sodass ich diese nicht alle auflisten kann. Leider hat nichts funktioniert. Die gleiche Version kann ich problemlos auf Android bauen und auf dem Android Phone testen. Hat jemand eine Idee?
  5. Hi everyone, I've never really worked with shaders in Unity before, so I'd need a little help with implementing the following shader: Reference from Sketchfab Do I have to write this in hlsl or can I recreate this with the shader graph? Thanks for any help. Best regards Peter
  6. Last week
  7. Gibt nen Haufen Assets im Asset Store. Neben "Cloud" ist "Weather" auch ein guter Suchbegriff.
  8. Hallo, eine weitere Produktionskette habe ich fertig. Diesmal kann der Spieler Bier brauen. Dazu werden eine Gerstenfarm und eine Hopfenfarm angelegt. Die Ernte wandert dann in die Brauerei und wird zu Bier verarbeitet.
  9. Hallo ◠‿◠ wüsste jemand wie man solche Wolken erstellen könnte, oder gibt es da Assets dafür? °°
  10. Also erstmal vielen Dank für die schnelle und ausführliche Antwort! Ich habe das Problem jetzt mit einer statischen Variablen gelöst. Vielen vielen Dank das du mich darauf gebracht hast und das jetzt alles reibungslos funktioniert. Ich bin am überlegen ob ich mir dein Paket hole, muss aber nochmal schauen... Vielen Dank!😃 Schönen Abend!!
  11. Moin! Coole Frage Orte, an die du deine Daten schreiben kannst, sodass sie auch bei einem Szenenwechsel erhalten bleiben, gibt es. Dafür musst du dir nur eine statische Variable bauen. Ich nehme hier mal ein int, da es um eine Punktzahl geht. public class IrgendeineKlasse { public static int highscore; } Darauf kannst du dann von überall im Code aus zugreifen: IrgendeineKlasse.highscore = 10; IrgendeineKlasse.highscore += 2; irgendeinText.text = IrgendeineKlasse.highscore.ToString(); Damit wäre eine mögliche Antwort fertig. Du warst aber interessanterweise etwas spezifischer. Ein Nachteil von static ist nämlich, dass du da eine Variable hast, und jeder Code, der wie in den Beispielen diese eine Variable benutzt, benutzt eben auch nur genau diese Variable. Stell dir vor, du willst statt einer HP-Leiste jetzt zwei anzeigen - weil es zwei Spieler gibt, oder eine für den Bosskampf. Man kann da ein bisschen was intelligentes drumrum bauen, aber letzten Endes muss man immer den Code wieder umbauen, wenn sich da etwas ändern soll. Deshalb ist es eine super Idee, durch Drag and Drop zu entscheiden, welcher Text in welches Feld kommt! So kann man eine Schicke Komponente schreiben, die einfach eine Zahl anzeigt, egal, wo sie herkommt. Du bist auch nicht der erste mit dieser Idee - die ist sogar mittelmäßig bekannt unter Unity-Entwicklern. Leider ist das nicht mehr ganz Anfängerkram. Daher hier drei Möglichkeiten für dich: Ich hab diese Idee und einige zusammenhängende Konzepte mal implementiert und in ein Paket gepackt, das ich liebevoll pflege:Ich sag's dir aber direkt: Gibt's im Asset Store für 65€. Du schaust dir eine der günstigeren (sprich: kostenlosen) Alternativen an, z.B. Unity Atoms. Es gibt so seine Gründe, warum ich trotz dessen Existenz für Soda 65€ verlange - und auch kriege. Aber Atoms ist meines letzten Stands nach echt nicht schlecht. Vielleicht etwas schwieriger in der Einarbeitung, aber sonst gut. Du schaust dir das Thema selber an und versuchst, selber etwas zu implementieren. Im Soda-Thread habe ich ja dieses Video verlinkt, das funktioniert gut als Einführung in das Thema. Ist nur wie gesagt kein Anfängerkram mehr. Musst du selber wissen. Variante 4 wäre sozusagen: Pfeif auf reinziehen, nimm eine statische Variable und fertig. Hat den einen oder anderen Nachteil, muss auch erstmal Klick machen, funktioniert aber 1a. Bei Fragen gerne fragen
  12. Hallo Zusammen! Ich habe eine Frage: Und zwar wie kann man Den Highscore den man in der GameScene erzielt hat, über ein Textfeld in eine andere Scene, in meinem Fall mein MainMenu, übergeben? In diese leere Feld möchte ich quasi den Text aus einer anderen Scene einfügen.(Siehe Anhang) Für Hilfe wäre ich sehr Dankbar!! LG
  13. Somit liegt das Problem ganz woanders... wo allerding kann ich euch nicht sagen, denn: Ich habe, wie schon angedroht das Script neu geschrieben und getestet... läuft... ohne Probleme gleich beim ersten versuch. Vielleicht habe ich schon vorher irgendo was mit dem Script gemacht, was ihm nicht geschmeckt hat und dann wollte er einfach nicht mehr. Keine Ahnung. Das habe ich jetzt noch mit hinzugefügt aber das ändert nichts an der funktionalität^^ Danke euch.
  14. Ah, ich sehe es. Du versuchst die Animation vom Entry aus zu starten, was aber nicht geht. Vom Entry, also sobald der Animator erwacht, geht es über die default Transition (orange) in deinen NewState. Von da aus gibt es aber keinen Weg heraus. Du kannst jetzt entweder eine Transition , von NewState zu deiner FadeOut Anim erstellen, oder aber du nutzt AnyState als Anker für deine Animation. AnyState bedeutet, dass dem Animator egal ist welcher State gerade am laufen ist, er wird immer in einen verbundenen anderen State gehen können. Auf jeden Fall ist die Transition von Entry zu FadeOut nutzlos und kann weg.
  15. Sonst würde er StartCoroutine und StopCoroutine auch nicht finden Das einzige, was mir bisher ebenfalls auffällt, ist, dass am Ende von RegenerationShield regenerationRoutine nicht auf null gesetzt wird. Heißt nur, dass da eine abgelaufene Coroutine in StopCoroutine gefüttert werden kann, was vermutlich leise failed und gut is. So oder so sollte das aber kein Problem mit StopCoroutine bedeuten. Ich hab das halt mal kopiert und das meiste rausgenommen. Sieht bei mir so aus und funktioniert einwandfrei. Wenn ich regenerationRate auf 5 hab und 4 Sekunden nach dem letzten Tick auf shieldCurrent wieder TakeDamage aufrufe, dann muss ich neue 5 Sekunden warten, bis ich wieder ein Stück Schild zurück kriege.
  16. Genau. Der Sinn ist, dass du nicht mehr Schild aufladen sollst, wenn du schon auf oder über Maximum bist. Dann ruft sie sich aber auch selbst nicht auf. die kommt dann gar nicht ins "if" rein und beendet sich sofort. Das soll sie auch. Genau. Das würde ich auch erwarten. Also starten tut er, stoppen nicht. Das Stop sehe ich auch, wie erwartet, auch nur ab dem zweiten Mal. Ja, hab ich mal versucht... ändert leider nichts am Verhalten. Also sie startet wie erwartet und stopp nicht. Wenn euch nichts mehr einfällt, werde ich das Script mal einfach neu schreiben und schauen ob es dann funktioniert.
  17. Hallo Unity-Experten In meinem aktuellen 2D-Projekt möchte ich ein ganz einfaches Diashow-Programm umsetzen. Um noch zusätzliche Möglichkeiten zu haben, würde ich gern jedes Bild (inkl Objekte) in eine separate Scene packen. Mittels Knopfdruck wechselt Unity dann zur nächsten/vorherigen Scene. Grundsätzlich funktioniert alles, aber leider klappt es einfach nicht mit den Animationen! Die Scene wird gewechselt, aber von der Animation ist keine Spur und im Log erscheint kein Fehler. Hier mal ein Screenshot meines Animator Controllers (namens Canvas) und ein weiterer, der die Einstellungen im Inspector der _Main Camera und des Buttons enthält: Und dies ist der Code, der an der _Main Camera hängt: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class SwitchToGame : MonoBehaviour { public Animator animatorController; // Zugriff auf Animator-Klasse public void SwitchScene(string scene) // Funktion mit Parameterfeld im Inspector anzeigen lassen { StartCoroutine(Wechsel(scene, 1f)); // Ziel-Funktion erst nach 1 Sekunde ausführen } IEnumerator Wechsel(string scene, float delayTime) // Scene wechseln und Animation abspielen { yield return new WaitForSeconds(delayTime); // x Sekunden warten und anschließend den unten stehenden Code ausführen animatorController = GetComponent<Animator>(); // Animator-Klasse instanziieren animatorController.SetInteger("Anim", 2); // Canvas-Fadeout-Animation abspielen SceneManager.LoadScene(scene); // Scene, die im Inspector definiert wurde, laden } } P.S Die Animation an sich funktioniert in der Vorschau. Danke für jede Hilfe und viele Grüße, Stefan
  18. Hmmm... Wenn du das Debug.Log siehst, sollte auch die Coroutine gestoppt werden. (Wenn sie denn überhaupt läuft und nicht schon durchgelaufen ist). Sie wird danach aber sofort wieder gestartet. Die Coroutine wartet aber nur, wenn dein Schild < dem MaxSchild ist. Ist das nicht so, dann passiert garnichts und sie ist sofort fertig. Ist es aber so und die Zeit ist abgelaufen, startet sie sich direkt selber wieder, wenn denn der Schild immer noch kleiner als der MaxSchild ist. Beim Schild und MaxSchild könnte also ein Problem sein. Vielleicht liegt es auch am eigenen Starten in der CR selbst... Von der Logik her sollte die CR starten und auch stoppen. Und nach dem ersten Durchlauf ist deine regenerationRoutine auch nie mehr null. Ich persönlich würde die Abfrage shield < maxShield nicht in der CR machen sondern da, wo du die CR startest. Dann weisst du auch, dass sie ihre Wartezeit abläuft, wenn sie denn gestartet wurde. Vielleicht sieht @Saschaetwas Entscheidendes, was mir entgangen sein könnte.
  19. Hallo zusammen, Das ist jetzt die ganze Schild Klasse. wie gesagt, die Coroutine wird gestartet und das Stop wird immer übersprungen: Damage ist ein Struct der neben ein paar Methoden die drei int werte normalDamage, projectileDamage und energyDamage hat Und falls ihr fragt Shield : ShipComponent und ShipComponent : MonoBehaviour -> IEnumerator wird also unterstützt (Das möchte ich aber noch ändern. Gefällt mir nämlich nicht^^) aber Details... Das Debug.Log("Stop") wird mir übrigens auch angezeigt, aber die Coroutine nicht beendet. using System.Collections; using System.Collections.Generic; using UnityEngine; public class Shield : ShipComponent { private Equipment health; public int shieldCurrent;//gibt an, wieviele Schildpunkte der Schild derzeit hat. public int shieldMax; //gibt an, wieviele Schildpunkte der Schild maximal haben kann. public float energyUsage; //gibt an, wieviel Energie gebraucht wird um einen Schildpunkt zu regenerieren public int regenerationValue; //gibt an, wieviele Schildpunkte regeneriert werden pro Coroutine public float regenerationRate; //gibt an, wie lange es dauert einen Schildpunkt zu regenerieren private Coroutine regenerationRoutine; void Start() { health = GetComponent<Equipment>(); health.Equip(this); shieldCurrent = shieldMax; } public Damage TakeDamage(Damage damage) { // Wird aufgerufen, wenn das Objekt Schaden erleidet. Damage damageTest = damage; if (damage.EnergyDamage() > 0) { //EnergieSchaden Abfangen: if (shieldCurrent > 0) { if (damage.energyDamage >= shieldCurrent) { damage.energyDamage -= shieldCurrent; shieldCurrent = 0; } else { shieldCurrent -= damage.energyDamage; damage.energyDamage = 0; } //NormalenSchaden abfangen. if (damage.normalDamage >= shieldCurrent) { damage.normalDamage -= shieldCurrent; shieldCurrent = 0; } else { shieldCurrent -= damage.energyDamage; damage.normalDamage = 0; } } if(regenerationRoutine != null) { Debug.Log("Stop"); StopCoroutine(regenerationRoutine); } regenerationRoutine = StartCoroutine(RegenerationShield()); } return damage; } IEnumerator RegenerationShield() { if (shieldCurrent < shieldMax) { yield return new WaitForSeconds(regenerationRate); if (health.PayEnergy(energyUsage)) { shieldCurrent += regenerationValue; if(shieldCurrent >= shieldMax) { int diff = shieldCurrent - shieldMax; shieldCurrent = shieldMax; health.ReturnEnergy(diff * (energyUsage / regenerationValue)); } } if(shieldCurrent < shieldMax) { regenerationRoutine = StartCoroutine(RegenerationShield()); } } } }
  20. Okay ich habe es jetzt hinbekommen! 😃 Meine 2 Gehirnzellen sind nun wieder erwacht, jetzt kann ich mich langsam wieder erinnern wie es ungefähr funktioniert. Danke für die Hilfe!! ◠‿◠
  21. Gehste Window -> Packagemanager Wenn der auf ist, dann oben wo wahrscheinlich Packages:In Project steht, mal drauf klicken und dann Unity Registry auswählen. Jetzt sollten alle möglichen Packages zu sehen sein. Inputsystem suchen, anklicken und dann unten rechts auf Install klicken.
  22. Alles über den Package Manager Sollte im Standard-Unity-Repo sein.
  23. Ich suche aber finde es irgendwie nicht, muss das nicht in Unity sein oder muss ich das über denn Store hinzufügen?
  24. Ja das habe ich mir gedacht! und suche es jetzt gerade. Aber dennoch verstehe ich nicht warum das beim anderen Projekt auf anhieb dabei war?
  25. Falls du es doch nicht weisst: Das neue Inputsystem ist ein Package, was du dir über den Packagemanager erst einmal hinzufügen musst. Danach sollte der using Unityengine.InputSystem Befehl schon einmal funktionieren. Du musst dann aber auch die ganzen Inputs im GameControlls Objekt wieder anlegen, falls du die nicht auch von dem anderen System rüberziehen kannst. Also: Wenn du Fehlermeldungen bekommst, kannst du diese Scripte nicht ausführen, solange du die Fehler behoben hast. Ein Fehler kann auch ein Verweis auf etwas sein, was in einem anderen Projekt da ist, aber in deinem eben nicht. Objekte, die z.B. gesucht und eingebunden werden. Ganze Module, wie das Inputsystem oder eine Renderpipeline. und und und. Also nur weil es woanders läuft, bedeutet nicht, dass da alles in Ordnung ist. Deswegen immer die Fehlermeldungen anschauen. Die sagen dir, was nicht in Ordnung ist.
  26. Ich glaub ich weiß jetzt was mir fehlt, ich probiere mal 😅
  1. Load more activity

Announcements

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

Weiterleitung zum Entwickler "daubit"



×
×
  • Create New...