Jump to content
Unity Insider Forum

All Activity

This stream auto-updates     

  1. Past hour
  2. Moin, moin, habe wieder einmal eine Frage und hoffe auf eine freundliche Unterstützung. Habe ein kleines Puzzle als Spiel im Spiel gemacht. Zur Kontrolle, ob ein Puzzleteil richtig abgelegt wurde, wollte ich eine if-Abfrage machen: if (puzzle0.transform.position == cell0.transform.position) correctPuzzle = correctPuzzle+1; wenn dann correctPuzzle =25 ist, ist das Puzzle richtig gelöst worden. Leider funktioniert das alleine schon deswegen nicht, weil die Position der Cell0 andere x- und y-Werte hat als x und y des Puzzle0, obwohl beide übereinander liegen. Cell0-24 sind Gameobjects mit einem Slotsprite, von der gleichen Größe wie ein Puzzleteil. Wo liegt hier mein Gedankenfehler ? Wie kann ich das Problem angehen. Klar ist mir auch, dass der Abgleich beider Positionen problematisch ist, da ja so haargenau die Ablage selten gelingen dürfte. die Position der Cell müsste also einen kleine Toleranz erlauben. Besten Dank schon einmal für Eure Hilfe nordseekrabbe (Peter)
  3. Today
  4. Tja, ich gehe stark davon aus, dass dropdown1 keine Referenz zu irgendeiner Dropdown Komponente hat. Und wenn die dropdown1 Variable leer ist, bekommst du eine NullReferenceException, sobald du versuchst irgend etwas damit zu machen. Ist ja auch klar. Ein Dropdown ist wie ein Buch mit mehreren nummerierten Seiten. Du weisst wie man umblättert und du weisst wie man auf der gewünschten Seite etwas liest. Aber wenn du kein Buch in der Hand hast, kannst du nicht umblättern und auch nicht lesen. Und genau das sagt dir das Programm, mit der NullReferenceException. Es könnte dir jetzt etwas aus einer Seite vorlesen, kann es aber nicht, weil das vermutete Buch nicht da ist. Du wunderst dich vielleicht, dass es nicht schon eine Fehlermeldung gab, also du den Index1 mit einem Wert gefüllt hast. int index1 = dropdown1.value; Ja, da wirst du wahrscheinlich einen Defaultwert bekommen haben und das wird die 0 gewesen sein. Denn dropdown1 ist ja eine Variable vom Typ Dropdown und da ist schon klar, wie ich so einen Typ abfragen und bearbeiten kann. Du kennst also das Grundgerüst bzw. die Blaupause eine Dropdownelementes. Diese Variable hat aber leider keinen Verweis auf ein echtes Dropdownelement, was dann ja irgendeinen Valuewert haben kann, abhängig von der Anzahl der Elemente da drin. Hast du z.B. 3 Dropdownelemente da drin, dann könnte value 0, 1 oder 2 sein. Weiter unten willst du jetzt Informationen über den Text am entsprechenden Index abfragen. Ja und das geht nun nicht, denn die leere Dropdown Variable hat keine Infos. Dein Index ist also ausserhalb des Bereichs, denn es gibt keinen Bereich. Du musst unbedingt lernen, was die einzelnen Fehlermeldungen bedeuten, damit du selbstständig erkennst, wieso das jetzt ein Fehler ist und wie bzw. wo du ihn beheben kannst. Sobald du eine Fehlermeldung siehst (rot), bereinige sie! Auch wenn der Fehler evtl. in einem ganz anderen Script zu finden ist oder das Programm augenscheinlich weiter arbeitet. Erst wenn du keine Fehlermeldung mehr hast und dann immer noch ein Wert falsch ist, wie bei dir die 0, kann man von einem Logikproblem ausgehen.
  5. Yesterday
  6. Danke für den Hinweis! In folgender Zeile bekomme ich die Fehlermeldung: if (dropdown1.options[index1].text == Jahr_auswahl) und zwar einen Index-Out of Range Fehler. Leider weiss ich nicht wie ich das korrigieren kann.
  7. Wenn du mich (und viele andere fragst), ist Komponenten-Design, gerade für Spiele, wesentlich besser als klassisches OOP. Wenn man seinen Code in verschiedene logische Einheiten (Klassen) aufteilt, dann kann man das noch gar nicht richtig OOP nennen. OOP bedeutet, Klassen voneinander erben zu lassen und damit eine hierarchische Ordnung herzustellen. Das ist für Spiele oft mehr schlecht als recht. Stattdessen voneinander abhängige Komponenten zu bauen, ist nicht ohne gutem (!) Grund der Weg, wie man das in Unity macht. Ja gut, das sollte man so oder so vermeiden
  8. Wie du auf deinen Screenshot sehen kannst, steht unten in der Konsolenleiste eine Fehlermeldung. (NullReferenceException) Solange solch ein Fehler ansteht, ob nun für deine Berechnung bzw. Anzeige wichtig oder nicht, brauchen wir gar nicht im Code nach dieser einen Null zu suchen. Behebe erst einmal den Fehler.
  9. Last week
  10. Dankeschön Sascha für diese sehr hilfreiche Antwort. Vielen Dank auch für die Erklärung am Beispiel. Ich bin mir sicher ich kann dadurch das Problem lösen. mit freundlichen Grüßen Immanuel Kalis
  11. Hallo Leute Weiss jemand wieso ich beim folgenden Code einen Null-Wert bei der Spalte Erlös erhalte? Die anderen Spalten beim Output haben alle keine Null-Werte. Gruss, peachplayer void ListeAnzeigen() { string NummerAusgabe = ""; string ParzellennameAusgabe = ""; string KostenAusgabe = ""; float Kostentotal = 0.0f; float Kostentotal_pf = 0.0f; float Kostensumme = 0.0f; float ErlösAusgabe_total = 0.0f; float parzellenSumme1 = 0.0f; int i = 0; int index1 = dropdown1.value; var parzellen2 = liste1.GroupBy(item => item.Datum.Year); foreach (var parzelle1 in parzellen2) { string Jahr_auswahl = parzelle1.Key.ToString(); if (dropdown1.options[index1].text == Jahr_auswahl) { var parzellen1 = liste1.GroupBy(item => item.GetParzellenname()); foreach (var parzelle in parzellen1) { // Code der pro Parzellenname ausgeführt wird // parzelle enthält alle Einträge der jeweiligen Parzelle //string Jahr_auswahl = liste[i].Datum.Year.ToString(); string parzellenName = parzelle.Key; int Nummer = parzelle.Sum(item => item.Nummer); NummerAusgabe += parzelle.Sum(item => item.Nummer) + "\n"; ParzellennameAusgabe += parzellenName + "\n"; ParzellennameAnzeige.text = ParzellennameAusgabe; float parzellenSumme = parzelle.Sum(item => Mathf.Round(item.Kostensumme() * 1.00f)); IEnumerable<Kosten> result = parzelle.Where(c => c.Fläche > 0 && c.Erlös >0); IEnumerable<Kosten> result2 = parzelle.Where(c => c.Erlös > 0 && c.Fläche >0 && c.Kost_d >0); //float Fläche2 = parzelle.Sum(item => Mathf.Round(item.Fläche * 1 / Nummer)); float Summe1 = parzelle.Sum(item => Mathf.Round(item.Erlös)); KostenAusgabe += parzellenSumme + "\n"; KostenAnzeige.text = KostenAusgabe; Kostentotal += parzellenSumme; //Erlös = parzelle.Sum(item => Mathf.Round(item.Erlös * 0.50f)); var result_erlös = result2.GroupBy(item1 => item1.Erlös); foreach (var item in result_erlös) { if (item.Key > 0) { Erlös = item.Key; ErlösAusgabe += Erlös + "\n"; ErlösAnzeige.text = ErlösAusgabe; ErlösAusgabe_total += Erlös; DBAusgabe += Erlös - parzellenSumme + "\n"; } } var result_fläche = result.GroupBy(item1 => item1.Fläche); foreach (var item in result_fläche) { DBAusgabe_ha += Mathf.Round((Erlös - parzellenSumme) * 100.0f / (item.Key)) + "\n"; DBAnzeige_einzeln_proha.text = DBAusgabe_ha; DBAnzeige_einzeln.text = DBAusgabe; } } //StartCoroutine(SaveData(parzellenName, Erlös, parzellenSumme, (Erlös - parzellenSumme))); } } //totaleKostenAnzeige.text = Kostensumme.ToString(); if (ParzellennameAusgabe != "" && Erlös >0) { NummerAnzeige.text = NummerAusgabe; totaleKostenAnzeige.text = "Totale Kosten = " + (Kostentotal); PlayerPrefs.SetFloat("Kosten_total", Kostentotal); //totaleKostenAnzeige.text = "Totale Kosten = " + Kostentotal; DBAnzeige.text = "DB total = " + (ErlösAusgabe_total - Kostentotal).ToString(); totalerErlösAnzeige.text = "Totaler Erlös = " + ErlösAusgabe_total; Kassenbestand = (ErlösAusgabe_total - Kostentotal) + PlayerPrefs.GetFloat("Kassenbestand"); PlayerPrefs.SetFloat("Kassenbestand", Kassenbestand); } }
  12. Ja vielen Dank für eure Hilfe und mit diesem Code beispiel von dir Sascha hat es dann auch geklappt. Danke dir noch Mals. Ja ich lerne OOP , um Ordnung in meine Scripts zu bringen. So, dass ich einzelne Funktionen auf einzelne Scripts verteile.Vorher habe ich alles in ein Script geschrieben und habe somit den überblick verloren. Weis ja nicht ob das der richtige Weg ist, weil dies in Unity so komisch gelöst ist?
  13. Naja, auch OOP kann man in Unity benutzen - und auch lernen. Aber in Unity gibt's halt noch komponentenbasiertes Design obendrauf, und beides gleichzeitig zu lernen (und auseinanderhalten zu müssen) macht den Lernprozess wesentlich schwerer als nötig. Wenn dir ein brauchbarer Lehrer OOP mit Unity beibringen will, ist das vermutlich okay, aber auf eigene Faust wirst du immer wieder in (unnötige) Verständnisprobleme wie dieses laufen.
  14. Danke, daran liegts! Vielen Dank!
  15. Hallo, Beim letzten Bild sieht es so aus als wehre der Convex Parameter beim MeshCollider aktiviert. Dieser Parameter besagt das auch Kollisionen entgegen der Richtung wohin die Normalen zeigen registriert werden.(Meines Wissens nach, wird dazu das Mesh mit einem zusätzlichem angenäherten Collider umhüllt) Bei deaktivierten Convex Parameter müsste es funktionieren. Gruß Jog
  16. Moin Freunde, ich bin recht neu in Unity und bastle jetzt an einem kleinen Spielchen. Dafür habe ich mir per Code ein Mesh gemacht, was auch dann so aussieht wie es soll. Ich glaube, für diese Frage ist es irrelevant, wie ich das gemacht habe, daher hier kein Code. Falls es doch relevant sein sollte, poste ich es gerne hierein. Nun will ich in diesem Mesh eine Kugel rumrollen lassen. Dafür habe ich das Mesh mit einem MeshCollider ausgestattet und diesen im Inspektor unverändert / auf Standardeinstellungen belassen. Ein wenig Code war dann nötig, um das Mesh wieder dem Collider zu geben. MeshCollider mc = GetComponent<MeshCollider>(); mc.sharedMesh = mesh; mesh ist dabei natürlich das vorher erstellte Mesh des oben zu sehenden Objekts. Doch wenn ich nun eine Sphere einfüge, diese mit einem Rigidbody ausstatte und ins Mesh fallen lasse, fällt sie nicht ins Mesh, sondern bleibt auf der "Oberkante" liegen. Ist die Szene pausiert, entdecke ich den Übeltäter - der MeshCollider hat eine Ebene über das Objekt gezogen! Wie kann ich das verhindern? Wenn ihr noch weitere Infos braucht, einfach fragen. Bin schließlich neu und weiß nicht, was ihr bei solchen Problemen braucht, um zu helfen. Danke im Voraus❤️
  17. Wenn du lernen willst bitte nicht in Unity . OOP wird sehr oft benutzt und daher zu empfehlen reine C# mit Console Projekte zu benutzen. Aber C# selbst kann man in Unity lernen.
  18. Also, erstmal kannst du Dinge aus Lehrmaterial zu objektorientiertem Programmieren nicht unbedingt auf Unity-Klassen übertragen. Beide deine Klassen erben von MonoBehaviour, was sie zu Komponenten macht. Und Komponenten darfst du niemals über new erzeugen. Ein üblicher (aber nicht der einzige) Weg, dass ein Objekt ein anderes kennenlernt, ist über GetComponent. Dafür ziehst du beide Scripts auf dasselbe GameObject. Dann kannst du, am besten in Awake, die eine Komponente die andere aussuchen lassen: Script_B script_b; private void Awake() { script_b = GetComponent<Script_B>(); }
  19. Hallo Ihr Lieben Ich bin im Moment mir Objekt orientiertes programmieren beizubringen. Leider ist das nicht mal so einfach^^ ich stehe an einen Punkt wo ich das Problem nicht mehr sehe.... Ich habe 2 Scripts die mit einander Kommunizieren sollten. Das Script A gibt nur eine vorgelegte Variable an Script B weiter. Im Script B folgt dann die Berechnung der Variable: Script A using System.Collections; using System.Collections.Generic; using UnityEngine; public class Script_A : MonoBehaviour { Script_B script_b = new Script_B(); public void Update() { Debug.Log(script_b.resultat1(10)); Debug.Log(script_b.resultat2(50)); } } Script B using System.Collections; using System.Collections.Generic; using UnityEngine; public class Script_B : MonoBehaviour { public GameObject objekt; public float resultat1(float a) { float zwischenresultat = a + objekt.transform.eulerAngles.y; return zwischenresultat; } public float resultat2(float b) { float resultat = b + (2 + 3); return resultat; } } Warum bekomme ich da die Fehlermeldung: "NullReferenceException: Object reference not set to an instance of an object" bei der ersten Methode. Obwohl ich das Objekt extra noch über den Editor referenziere. Und die zweiten Methode Funktioniert Fehler frei, wenn die erste ausgeklammert ist. Ich habe da glaub was grundlegendes nicht verstanden... Beste Grüsse und schon mal vielen dank im voraus
  20. Moin, wenn du eine aktuelle Unity-Version nutzt kannst du auch kostenlos, wenn du ProBuilder aus dem Package-Manager lädst, grob modellieren (Lohnt sich anzuschauen, aber mit externen Programmen hast du mehr Möglichkeiten). Bestehende Objekte lassen sich auch in Unity mit PolyBrush bearbeiten, müsste ebenfalls in der aktuellen Unity-Version im Package-Manager verfügbar sein (Ist aber wahrscheinlich nicht genau das, wonach du suchst).
  21. Hallo, Als Unternehmen beschäftigen wir uns seit langem mit dem Thema AR, vor allem im Automobilbereich.Aus diesem Grund haben wir uns entschlossen, eine eigene AR-App auf den Markt zu bringen. AR-Stage ist eine serverbasierte AR-Plattform. Die Nutzer können die bereitgestellten Modelle lokal auf ihr Gerät herunterladen und AR genießen und ihre AR-Erfahrungen als Foto oder Video über das soziale Netzwerk mit Freunden teilen. Die einzelnen, teilweise interaktiven Modelle können an die reale Umgebung angepasst werden. AR-Stage verfügt über Einstellmöglichkeiten für Position, Drehung und Skalierung. Der Nutzer hat auch die Kontrolle über Beleuchtung, Schatten und Reflexionen, um die virtuelle Realität perfekt mit der realen Welt in Einklang zu bringen. Die Funktionen von AR-Stage könnt Ihr im folgenden Video sehen: Weitere Modelle für die AR-Stage werden folgen. Wir denken auch über mehr Interaktionsmöglichkeiten nach, um kleine AR-Spiele zu integrieren. In Zukunft wird AR-Stage auch ein professionellen Bereich haben. Auf diese Weise können Unternehmen ihre Produkte den Kunden schnell zur Verfügung stellen, ohne eigene Apps entwickeln zu müssen. Die Infrastruktur besteht dafür bereits. Weitere Informationen findet Ihr unter www.ar-stage.com. AR-Stage könnt Ihr kostenlos auf folgenden Stores runterladen: Google Play Store App Store Wir sind dankbar für Feedback und wünschen viel Spaß mit AR-Stage.
  22. Hallo Communtiy, ich möchte gerne ein Spiel erstellen welches einen mit u.a. Bäumen und Felsen interagieren (abbauen) lässt. Als Erstellungstool für die Welt würde ich Gaia bevorzugen. Leider scheint es wohl so zu sein, dass man die dort integrierten Bäumen und Felsen leider nicht mit den passenden Scripts ausstatten kann, da diese nicht als Gameobjects integriert werden sondern nur als "Terrain" zählen. Gibt es aktuell Tools die es einem ermöglichen, Objekte gernerieren zu lassen, die als tatsächliche Gameobjects integiert werden oder kann man die mit Gaia platzierten Objekte zu Gameobjects umwandeln lassen. Alternativ könnte man für die Generierung auch Vegetation Studio oder GENA verwenden. Mir geht es in erster Linie nur darum, ein Tool mit der Möglichkeit zu finden, mit dem man Gebiete generieren lassen kann die dennoch voll anpassbar sind und nicht nur statische "Aufsteller". Das non plus ultra wäre natürlich wenn man bereits voll gescriptete Modelle mit einem dieser Tools setzen lassen könnte, um dann nicht jeden Baum oder Felsen einzeln zu bearbeiten. Es ist alles Neuland für mich und deswegen frage ich auch so Blöd. Vielen Dank schon mal für eure Zeit. 😄
  23. Muss er nicht. Du kannst bei jedem Raycast eine LayerMask mitgeben, die bestimmt, welche Layer getroffen werden können. Darüber hinaus kannst du nach dem Raycast das getroffene Objekt filtern. Eine LayerMask kannst du z.B. so benutzen: [SerializeField] private LayerMask layers; private void Update() { RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity, layers)) { // ... } } Dann kannst du im Inspektor ein Häckchen bei jedem gewünschten Layer setzen. Da musst du aber bedenken, dass der Ray blind durch alles durchgeht, was nicht der LayerMask entspricht. Du kannst also durch ein platziertes Gebäude hindurch den Boden treffen. Üblicherweise würde man ja aber wollen, dass man einfach nicht bauen kann, wenn die Maus über einem Gebäude ist. Du würdest also eher einfach Raycasten und dann schauen, was getroffen wurde: private void Update() { RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (CanBuildOn(hit.collider)) { // ... } } } private bool CanBuildOn(Collider c) { // Check if c is ground } CanBuildOn kann jetzt beliebig aussehen. Wieder ein bestimmter Layer wäre möglich, aber auch eine Komponente auf dem Boden-GameObject. Von Tags würde ich wie üblich abraten.
  24. Hallo liebe Community, Ich arbeite zurzeit an einem RST-Game und habe ein Script geschrieben welches mich Objekte durch Buttons auf einem Boden Platzieren lässt. Dieses Script basiert darauf, dass wenn der Button gedrückt wird, wird die durch den Raycast generierte Mausposition auch zur Position des Objektes wird, bis es platziert wurde. Nun habe ich folgendes Problem: Der Layer der Objekte muss auf dem Layer IgnoreRaycast liegen, weil er sonst die Objekte immer weiter in die Höhe baut, da die Mausposition wenn das Objekt gespawnt ist auf dem Objekt liegt und das Objekt sich immer auf die neue Mausposition aufbaut. Ich möchte, wenn das Objekt platziert ist, wieder darauf zurückgreifen und es zum Beispiel nochmals verschieben können. Das funktioniert aber nicht weil das Objekt vom Raycast Ignoriert wird. kann ich irgendwie den Layer im Code ändern während der Laufzeit des Spiels ? ich würde mich sehr über eine Antwort freuen und hoffe ich habe es verständlich erklärt. mit freundlichen Grüßen Immanuel kalis
  25. Das Problem hat sich erledigt. Ich habe die Art wie ich die Punkte auf der Plane von ARCore generiere so geändert das ich sie direkt im Uhrzeigersinn in eine Liste speichere damit hab ich direkt die richtige Reihenfolge. Jetzt muss ich aus den Punkten eigentlich nur noch einen Spline machen und die Straße sollte fertig sein. Mfg Dex
  26. Hi malzbie, vielen lieben Dank für den Tipp, wir haben da eben mal angerufen, doch leider ist der Einsendeschluss schon erreicht und für dieses Jahr gibt es leider keine Gelder mehr. Uns wurde aber der Tipp gegeben, dass die Länder wohl noch vereinzelt Förderungen laufen haben, da müssen wir uns aber erst mal schlau machen. Freut mich außerdem, dass Dir unsere Spielbeschreibung gefällt. Wir können es kaum erwarten richtig loszulegen! Uns fehlt leider aktuell die Reichweite, die wir für eine Promotion bräuchten, da wir Schwierigkeiten mit unserer Kickstarter Marketing Firma hatten (lange und traurige Geschichte...), daher müssen wir nun selbst sehen, wie wir unsere Projektidee unter die Leute bringen. Ebenfalls vielen Dank für Dein konstruktive Kritik am Trailer, für so etwas bin ich immer sehr offen und kann Deine Punkte gut nachvollziehen
  27. Hi Daniel. Ich bin der Meinung, dass deine Spielbeschreibung auf jeden Fall sehr gut ist. Solche Spiele sind wichtig. Ich könnte mir sogar vorstellen, dass der Bund dieses Spiel fördern würde. Die Förderung von Games wurde vom Bund endlich mal auf den Weg gebracht und ich habe auch schon auf Twiter ein Spiel gesehen, welches gefördert wird. Und dass war ein Plattformer. Da solltest du es unbedingt mal probieren. Ich denke, dass dieses Spielthema auf offene Ohren stößt. Hier etwas info dazu: https://www.bmvi.de/DE/Themen/Digitales/Computerspielefoerderung/computerspielefoerderung.html Dei Trailer gefällt mir, bis auf 2 Kleinigkeiten. Das Wassergeräusch, wenn die Kamera über dem Fluss ist, klingt eher nach einem Bächlein. Es plätschert so süß. Ganz am Schluß, wenn die Kamera den Jungen erreicht, stockt es ein wenig in der Kamerafahrt. Das sind Kleinigkeiten, ich weiß. Trotzdem wollte ich es mal erwähnen. Ich bin sehr gespannt, was ihr aus der Idee machen werdet.
  28. Hallo Unity Insider! Ich heiße Daniel und bin leidenschaftlicher Indie-Spiele Entwickler und Gamer! Aktuell arbeite ich zusammen mit meinem Kollegen an einem Spiel mit dem Namen Azura – The Two Views of a World, bei der die Spieler die Möglichkeit hat zwischen der Steuerung der beiden Protagonisten hin und her zu schalten. Der Fokus des Spiels basiert auf der Tatsache, dass unterschiedliche Charaktere mit unterschiedlichen persönlichen Hintergründen oftmals eine ganz eigene Sichtweise auf die Welt haben, in der sie sich befinden. Ich entwickele eine Mechanik, die dies als Ausgangspunkt nimmt und visuell in das Spiel integriert. Die beiden Protagonisten nehmen ihre Welt unterschiedlich wahr und müssen voneinander lernen, um voran zu kommen. Ein Thema, das in der Gaming-Branche leider untergeht, ist Empathie und das Verständnis für andere, die nicht das gelernt haben, was wir für selbstverständlich halten. Ich will mich dieser Thematik annehmen und ein Spiel kreieren, das die Leute zum Nachdenken bringen soll. Das Projekt befindet sich gerade im Aufbau und es gibt auch bereits eine Kickstarter Seite – anders kann man ja heutzutage kaum noch finanziert werden ^^ Ich bin kein AAA Entwickler, daher liegt mir das Feedback von Euch als Gamer und Entwickler sehr am Herzen! Damit ihr einen besseren Eindruck vom Projekt bekommt, folgt hier der Trailer zum Spiel: https://www.youtube.com/watch?v=sARyki_zLGU Ich freue mich auf eine angeregte Diskussion :) Liebe Grüße, Daniel
  1. Load more activity

Announcements

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

Weiterleitung zum Entwickler "daubit"



×
×
  • Create New...