-
Posts
229 -
Joined
-
Last visited
-
Days Won
1
Singular last won the day on August 2 2021
Singular had the most liked content!
About Singular
- Birthday 12/08/1987
Profile Information
-
Gender
Male
-
Location
Königswinter
Recent Profile Visitors
1,297 profile views
Singular's Achievements

Advanced Member (3/3)
2
Reputation
-
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
-
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?
-
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. 😢
-
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...
-
Okay, habe den Fehler gefunden... ich muss tatsächlich die Rigidbody Componente von den Objekten nehmen... Kann mir jemand sagen warum???
-
Singular started following Was ist ein Singleton , Object kann nur einmal angeklickt werden , Unit Tests (in Unity) and 1 other
-
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; } } } } }
-
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...
-
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?
-
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.
-
Ahhh..... sche auf mein Haupt 😆 ich versgesse die ständig. Ja, damit sollte es klappen.^^ Danke euch beiden.
-
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.
-
😱 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
-
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.
-
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.)
-
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)