Jump to content
Unity Insider Forum

Singular

Members
  • Posts

    234
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by Singular

  1. Hey, ich habe mal eine Frage zu einem Klassendiagramm, welches ich für die Arbeit erstellen soll. Ich sollte ein kleines Programm erstellen und soll jetzt dafür ein Klassendiagramm erstellen. Problem ist ich habe eine Methode in meinem Programm welches 7 parameter entgegen nimmt. private boolean saveCustomer(String gender, String title, String lastName, String firstName, String street, String postcode, String city) Innerhalb dieser Methode wird das Kundenobjekt erstellt und an meine SQL Datenbank gegeben zum abspeichern. Wie schreibe ich diese Methode jetzt im Klassendiagramm? - saveCustomer() : boolean - saveCustomer(String, String, String, String, String, String, String) : boolean oder - saveCustomer(gender : String, title: String, lastName : String, firstName : String, street : String, postcode : String, city : String) Ich denke ihr versteht mein Problem, wenn ich lieber die erste Variante nehmen möchte auch wenn sie nicht korrekt auch wenn Variante 3 richtig ist, oder?
  2. Hab eine Gegenfrage: Warum meinst du, hat hier noch keiner darauf geantwortet? 🤔
  3. Da ich noch nicht so weit bin in der Java Programmierung muss ich mir das alles später nochmal anschauen... ausdem Grund behertze ich mal deine Ausgespielte Fallen karte und schweige dann mal betreten... Oder betrete ich das Schweigen? 🤔 Danke dir
  4. Das steht mir Frei ob ich das mit Vererbung mache. Ich weiß nicht, was ich da genau vererben lassen könnte... das müsste ich dann nochmal genau ausklamüsern. Was meinst du mit Komposition? Was ist das? Bzw. was ist daran besser?
  5. Hallo zusammen, Ich habe eine Aufgabe bekommen ein kleines Programm zu schreiben (in Java) in dem unterm Strich mehrere Menüs vorhanden sein sollen. Das ganze soll nur in der Konsole ausgeführt werden also keine Grafische Oberfläche. Das Programm hat ein Haupt- und drei oder vier Untermenüs. Macht es Sinn diese ganzen Menüs als eigene Klassen zu schreiben so, dass beim Programmstart diese ganzen Objekte erstellt werden und angesprochen werden, wenn der Benutzer in das Entsprechende Menü wechselt? Es geht darum, dass mein Code möglichst sauber, wartbar und erweiterbar ist. Würde also beispielsweise ein neues Menü hinzu kommen, könnte man eine neue Klasse erstellen und diese ins Hauptmenü einpflegen. Wenn ein Fehler auftritt, wäre die Frage auch geklärt, wo dieser zu finden ist. Das wären meine Gedanken dazu. Wenn ihr sagt, dass das ein guter Ansatz ist, wo sollte ich dann die Objekte erstellen für die Untermenüs? Direkt zu Programmstart oder erst in dem Moment, wo das entsprechende Menü aufgerufen wird? Danke euch.
  6. Okay, habe den Fehler gefunden. Ein NavMeshAgent, kann nur mit einem RB arbeiten, wenn dieser Kinematisch ist... Jetzt funktioniert die Auswahl auch wie ich sie mir gewünscht hatte über das Mesh, das der Spieler zieht. Hoffe nur, dass das nachher auch mit ungeraden flächen funktioniert^^ Wir werden sehen... ansonsten heule ich hier nochmal ein bischen rum danke dir
  7. Ne nicht kinematisch. Das hier ist der Komplette Inspector von der Unit. Der NavMeshAgent ist fast Komplett mit Standardwerten gefüllt außer, dass ich die Speed von 3.5 runter auf 1.5 gesetzt habe. Ich denke mal du meinst einen Overlap. Ich hatte das mit einem MeshCollider, weswegen das mit dem Physics Overlap das nicht funktioniert. Aber ich habe jetzt mal die ganze Formel auf einen BoxCollider umgestellt. Sollte eigentlich auch gehen. Allerdings weiß ich nicht, wie ich an das "HalfExtends" dran komme. Ich würde eigentlich erwarten, dass das 3 Vectoren sind, die die größe in x, y und z. (Also von Mittelpunkt zu einer seite) Aber scheinbar ist es etwas anderes, da ich nur einen Vector brauche. Ist es dann nur zu einem der Eckpunkte? Ist die Drehung dann schon mit einberechnet?
  8. Okay, jetzt wird das ganze leider doch etwas zum Problem. Ich habe jetzt eine Methode geschrieben um mehrere Objekte auszuwählen. Also Kasten um mehrere Objekte ziehen und über einen Trigger Collider werden Objekte, die auch bewegt werden können in die Liste gepackt. Das Funktioniert auch. Aber nur, wenn sie einen Rigidbody haben, da sie für den Trigger einen brauchen. Der witz ist jetzt, wenn ich den RB drauf habe kann ich die Units auswählen und sie werden auch in meiner Liste angezeigt aber ich kann sie zum einen nicht mehr einzeln anklicken und zum anderen nicht mehr bewegen. (Rechtsklick hat normalerweise die Destination gesetzt) Nehme ich den RB wieder runter, geht wieder alles inkl. bewegen aber dann kann ich die Units nicht mehr über den Kasten auswählen. Also entweder, Mit RB: Keine Bewegung, Keine einzelauswahl, Kasten ziehen möglich Ohne RB: Bewegung möglich, einzelauswahl möglich, Kasten ziehen is nicht... Das ist gerade etwas frustirerend. 😢
  9. Naja, das Objekt selbst steht ja noch auf der Plane, deswegen bin ich davon ausgegangen, dass der Colider noch an der Stelle zu finden ist. Das schau ich mir mal an. edit: Nö. Ich habs gerade mal ausprobiert. Der Collider bleibt an Ort und Stelle und folgt dem Objekt korrekt. Ich kann es nur nicht anklicken...
  10. Okay, habe den Fehler gefunden... ich muss tatsächlich die Rigidbody Componente von den Objekten nehmen... Kann mir jemand sagen warum???
  11. Hallo zusammen, Hallo Sascha ;), Ich sitze gerade an einem kleinen Problem und weiß noch nicht wirklich woran es liegt. Vielleicht könnt ihr mir sagen was ich falsch mache: Ich habe ein Interface erstellt was nicht besonders aufregend aussieht: public interface IClickable { public GameObject GetObject(); } Dazu habe ich ein Testscript, welches ich erst einmal Player genannt habe. Wichtig ist, dass es IClickable implementiert. Auch nicht besonders aufregend... public class Player : MonoBehaviour, IClickable { public GameObject GetObject() { return gameObject; } } Soweit so simpel. Jetzt habe ich einen "ClickManager" geschrieben, der bei einem Linksklick prüfen soll ob das Objekt anklickbar ist und wenn ja, dann soll er dieses bitte abspeichern und sich seinen NavMeshAgent holen. Wenn nicht, sollen Objekte die angeklickt wurde nicht mehr markiert sein. (Kennt man ja denke ich aus jedem RTS) Wenn ich einen Rechtsclick mache, soll das angeklickte Objekt sich bewegen. Das Problem ist interesanterweise, dass ein Objekt nur mit dem aller ersten Klick ausgewählt wird. Wenn ich das Spiel starte und einen Spieler anklicke, wird dieser abgespeichert und ich kann ihn bewegen. Klicke ich daneben und dann auf den Player, wird er vom Raycast nicht getroffen und ich erhalte in der Konsole lediglich die Plane darunter. public class ClickManager : MonoBehaviour { Camera cam; public GameObject clickedObject; private NavMeshAgent agent; private void Start() { cam = Camera.main; } private void Update() { //Linksklick für die Auswahl eines Objektes if (Input.GetMouseButtonDown(0)) { clickedObject = null; agent = null; Ray ray = cam.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit)) { Debug.Log("0"); Debug.Log(hit.transform.gameObject.name); // Hier bekomme ich aus aussage immer "Plane" if (hit.transform.GetComponent<IClickable>() != null) { Debug.Log("1"); //Diesen Debug bekomme ich ensprechend nicht, da die Plane auch kein IClickable hat clickedObject = hit.transform.GetComponent<IClickable>().GetObject(); agent = clickedObject.GetComponent<NavMeshAgent>(); } } } //Rechtsklick für die Bewegung eines angeklickten Objekts if (clickedObject != null && Input.GetMouseButtonDown(1)) { Ray ray = cam.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out RaycastHit hit)) { if(hit.transform.GetComponent<Ground>() != null) { agent.destination = hit.point; } } } } }
  12. Perfekt danke dir. Ich wusste nicht (auch wenn es logisch war) dass es meherere möglichkeiten gibt. In das Unity Framework NUnit werde ich dann in naher zukunft auch mal einlesen. Gerade, da unser Projekt immer größer und Fehleranfälliger wird...
  13. Hallo zusammen, ich habe vor kurzem ein Vorstellungsgespräch gehabt für eine Werksstudententätigkeit als Programmierer. Leider zwar nicht in der Spiele Entwicklung aber immernoch besser als Telefonist sich von Kunden Anschreien zu lassen, dass sie kein Internet mehr haben und der Techniker JETZT SOFORT da sein muss... aber... das ist ein anderes Thema... Bei dem Vorstellungsgespräch ist klar geworden, wo ich arbeiten werde (vorausgesetzt ich bekomme die Stelle) und zwar im "Testing Bereich". Dabei gehts um Unit Tests. Jetzt habe ich mir schon das ein oder andere Video dazu angeschaut aber das Problem ist immer, dass die die Installation durchgehend überspringen. Ich habe Visual Studio und möchte in einem eigenem neuen dafür angeleten Projekt die Unit Test ausführen. Was muss ich dafür Installieren bzw. was brauche ich als using directive bzw. als namespace? Ist das alles schon so in einem neuen Projekt drin oder muss ich noch irgendwas dafür installieren? Kann mir da jemand helfen? P.S.: Kann ich Unit Tests auch in Unity laufen lassen?
  14. Hallo zusammen, ich habe eine eher etwas allgemeinere Frage keine konkretes Script oder so: Wie werden entwickelt man ein Kartenspiel??? Also als beispiel, Magic oder Slay th Spire. Wo jede Karte etwas anderes tut. Wie wäre der beste Weg so etwas anzufangen? Unterm strich ist zwar jede Karte gleich weil ich kann sie auf die Hand nehmen, auf den Ablagestapel legen, anklicken, sortieren usw. aber wenn sie ausgeführt wird, passiert jedes mal von der Karte abhängig etwas anderes. Muss ich echt hingehen und für jede einzelne Karte hingehen und ein eigenes Script schreiben oder gibt es einfachere Wege? Danke euch.
  15. Ahhh..... sche auf mein Haupt 😆 ich versgesse die ständig. Ja, damit sollte es klappen.^^ Danke euch beiden.
  16. Okay, nice das hat geklappt mit. Und es ist tatsächlich so, Hohe Zahl = Ganz oben, niedrige Zahl = ganz unten. Ich habe es jetzt so gemacht, dass alle Objecte, sich in ihrer Awake Methode bei einem Static Object anmelden und dort in eine Liste eingetragen werden. Beim Anklicken des Objects, bekommt dieses die Zahl "List.Count" zugewisen und alle anderen werden dann absteigend durch die Liste zugewisen. Also bekommen sozusagen die Zahl an der Sie stehen in der Liste (invertiert). Ob das jetzt so sauber ist, weiß ich nicht... Ich weiß halt nicht, wann so etwas in die Knie geht, da mit jedem Klick jedes Object in der Spielwelt einmal angesprochen wird, bzw deren SpriteRenderer. Mein "Spiel" ist sogesehen kein richtiges Spiel... (kennt Ihr TabelTopSimulator auf Steam?) du darfst es dir als Schreibtisch vorstellen auf dem alles Mögliche liegen kann. Spielkarten, Würfel, ... Dementsprechend kann alles immer überall liegen und auch über und untereinander. Es soll zwar einzelne Objekte geben, die immer oben liegen (Würfel) bzw immer unten liegen (Spielbrett) aber das mal am Rande und darum kümmere ich mich später^^. Was ich ja sogesehen damit getan habe... Die Liste könnte bis ins unendliche gehen. Deswegen weiß ich nicht ob das so sauber ist. Ich habe gerade mal versucht, dass das oberste Object einfach auf 5 gesetzt wird und alle anderen auf 3, dann geht es nicht mehr. Im zuge dess stellt sich mir nochmal die Frage: Warum geht das hier mit einer Linked List nicht: layerList[0].sortingOder = 5; bzw, wie komme ich am besten an das erste oder xte Objekt dran??? Derzeit mache ich das über das Unity Event (ist das ein Event? 🤔) OnMouseDown bzw. OnMouseDrag usw. wie prüfe ich das denn am besten? Es werden immer noch Objekte, die eigentlich hinter einem anderen sind, zuerst bewegt. Nicht immer, aber leider sehr oft. Alle Objekte haben in diesem Fall einen BoxCollider2D. Wenn der Spieler Klickt, wird das Objekt nach oben im sortingOrder gesetzt, "Draged" der Spieler, wird das Objekt an den Mauszeiger geheftet und bewegt sich mit. Theoretisch müsste beim Klick geprüft werden ob sich zwischen dem angeklickten Objekt und dem Mauszeiger Objekte sind, die in der Liste weiter oben liegen. Ich glaube, würden ALLE Objekte dem Mauszeiger folgen wäre der Fall klar, da mehrere Objekte gefunden wirden die unter dem Mauszeiger sind aber da nur eins folgt (Was ja auch sein soll) bin ich mir nicht sicher, wie ich da vor gehen soll.
  17. 😱 Ich wußte, dass dieses Thema mich füher oder später einholen wird... Ich muss euch beiden gestehen, ich habe keine Ahnung von Layern und was sie tun. Ich gehe mal vorsichtig davon aus, dass sie "Schichten" sind wie die Objekte angezeigt werden. Im Inspector gibt es ja auch das schöne Dropdownfeld "Layer - Default", hat das etwas damit zu tun? Alle Objekte in eine Liste stecken, Check! Das bekomme ich hin und ist überschaubar und machbar. Bei klick das Objekt finden und auf Platz 1 setzen, Check! Das ist auch kein Problem. --> LinkedList.Remove(Renderer), LinkedList.AddFirst(Renderer) Häh? Wie ändere ich den Layer? Wahrscheinlich darüber, richtig? Läuft das dann darüber, dass ich GetComponent<SpriteRenderer>().sortingLayerID = 0. Muss ich dann nicht nochmal durch die ganze Liste durch und jedem Object die nächst höhere Zahl zuweisen also sozusagen an welcher Position sie sich in der Liste sie sich gerade befinden? Danke schpn mal für eure Hilfe
  18. Hallo zusammen, Ich bräuchte mal wieder eure Hilfe. Ich habe eine 2D Umgebung in der ich Objekte per Drag&Drop verschieben kann. Das Funktioniert auch soweit alles ganz wunderbärchen. Problem ist jetzt, dass, wenn die Objekte übereinander liegen, teilweise unterschiedlich gegriffen werden können. Habe ich zum Beispiel 3 Objekte übereinander gestapelt, kann es passieren, dass ich das unterste beim klickken bewegen kann, es kann aber auch das oberste oder das mittlere sein. Es sieht ein wenig zufällig aus welches Objekt ich erwische. Die Reihenfolge in der Herachie scheint keine Auswirkungen darauf zu haben und auch nicht in welcher Reihenfolge sie gerendert werden. Ich würde gerne dass das Objekt, dass ich gerade Bewege als letztes gerendert wird. Also ganz oben angezeigt wird. Wie kann ich diese Reihenfolge ändern? Außerdem möchte ich, dass immer das Objekt, das oben liegt zuerst bewegt werden kann.
  19. Kleiner Tip am Rande: "Hilf uns, damit wir dir helfen können." Wir haben keine Ahnung was du hast und was du brauchst. Wenn du sagst, dass du dich nicht C# auskennst, kann man dir nicht wirklich helfen, da wir nicht wissen auf welchem Stand du bist. Beispielscripts sind immer ein guter erster schritt. Was hast du? Was tut es (nicht)? Was sollte es tun? (etc.)
  20. Hallo und Herzlich willkommen, Ein Singleton wird normalerweise so, oder so ähnlich eingeleitet: public class Singleton : MonoBehaviour { public static Singleton instance; private void Awake() { if(instance != null && instance != this) { Destroy(this); } else { instance = this; } } } Damit hast du das Grundgerüst. Das kannst du auf ein GameObject in deiner Scene ziehen auf das andere Objecte zugreifen können. Hat dein Singleton also beispielsweise eine Methode wie: public void DoSomething() { //Ich tue Dinge } können deine Objecte so darauf zugreifen: Singleton.instance.DoSomething(); Damit kannst du eine Schnittstelle erstellen ohne dass du großartig dieses eine Object suchen musst oder erst über den Inspector zugreifen musst. Hat dein Singleton beispielsweise einen int points, könnten in einem Tower Defence Game die Gegner die getötet werden einfach das Singleton aufrufen und eine Methode auf dem Singleton ausführen um die Punkt (,Gold etc.) zu erhöhen. Alternativ könntest du eine Static Class erstellen die letzlich das gleiche ist, aber das kann nicht von MonoBehaviour erben wordurch einzelne Methoden nicht ausgeführt werden können. Was du damit auch machen kannst, Also mit einem Singleton, du kannst diesem Objekt andere Objekte zuweisen. Zum Beispiel den Spielern, um immer zugriff auf ihn zu haben. Also, um im Beispiel eines Tower Defence zu bleiben, ein Gegner läuft ins Ziel und der Spieler soll einen Lebenspunkt verlieren (der Sich auch auf der Karte herum bewegen kann) Dann muss du nur die Zuweisung machen, dass das Singleton den Spieler kennt aber der Gegner muss nicht erst den Spieler suchen um ihm dann einen Schaden zuzufügen. (Ja das letzte beispiel wäre warscheinlich sowieso besser über das EventSystem aber, you got the point)
  21. VERGISS ES!!! Habe den Fehler gefunden. Er saß, wie so oft zwischen Tastatur und Bürostuhl... Habe ihn beseitigt... 🤔 Ich habe mich in den Objekten verschrieben, und tatsächlich Blend, Fixed geschrieben und schon war der Fehler perfekt. Achso und da ich beseitigt wurde wollte ich mich noch schnell bedanken für deine Hi 🔴[NullReferenceExeption: Object reference not set to an instance of an object Programmer.instance() (at Assets/Office/Programmer.cs 76)]
  22. Okay, Color32 war des rätsels lösung. 😃 Allerdings, bleibt das Problem mit dem Fixed. Ich habe auch herausgefunden, dass das Problem nur dann auftritt, wenn es ein Objekt gibt, das diesen Gradienten anfragt. Gibt es kein Objekt, das einer Farbe zugeordnet wird, kann ich zwischen Fixed und Blend ohne Probleme im Game Mode hin und her wechseln. Die Objekte selbst ändern aber nichts an dieser Farbe. Die holen sich ihre Farbe über eine Get Funktion und speichern diesen selber ab. Dabei wird aber auch nicht der mode auf Fixed umgestellt. also nie... es gibt auch keinen Grund dazu...
  23. Ah, okay das versuche ich mal. Color war bisher das einzige, was ich verwendet habe. Richtig. Wärend das Spiel läuft. Da die Farbe vorher ja noch nicht da war, weil sie ja durch den Code generiert wird. Die Farben nutze ich für Objekte als "ColorOverLifetime" und da sieht man es dann auch deutlich, dass die Farbe springt und nicht wie bei blend von der einen in die andere über geht. Nein in die Update Methode verwende ich nicht um es auf Fixed um zu stellen^^. Die ist sowieso leer
  24. Sorry ich sehe gerade ich habe mich verklickt... das sollte eigentlich in Scripting rein. könnt ihr den Beitrag verschieben? edit: Dankeschön!
  25. Hallo zusammen, ich schon wieder. ich habe hier eine Reihe von Gradienten, die ich mir Code zufällig generieren lasse. sieht in etwa so aus: void Start() { for(int i = 0; i < gradients.Length; i++) { GradientColorKey[] gck = new GradientColorKey[4]; gck[0] = NewKey(0); gck[1] = NewKey(0.4f); gck[2] = NewKey(0.9f); gck[3] = NewKey(1f); gradients[i].colorKeys = gck; gradients[i].mode = GradientMode.Blend; } } private GradientColorKey NewKey(float time) { int r = 0; int g = 0; if (Random.Range(0, 2) == 0) { r = Random.Range(0, 256); g = Random.Range(120, 256); } else { r = Random.Range(80, 256); g = Random.Range(0, 256); } int b = Random.Range(0, 141); Color c = new Color(r, g, b); return new GradientColorKey(c, time); } Jetzt habe ich folgende Probleme: Zum einen wird die Farbe immer auf "HDR" eingestellt, was dazu führt, dass die Objekte immer weiß angezeigt werden. Zum anderen wird die Farbe immer auf Fixed umgestellt. Selbst dann, wenn ich hin gehe und das Blend selbst eintrage, (im Game Mode) wird es, so als würde es in irgendeiner Update Methode wieder auf Fixed umgestellt. Vielen Dank.
×
×
  • Create New...