Jump to content
Unity Insider Forum

Singular

Members
  • Posts

    185
  • Joined

  • Last visited

  • Days Won

    1

Everything posted by Singular

  1. Dankeschön Sascha, werde ich gleich alles mal ausprobieren was du vorgeschlagen hast. @MichaelHOnMouse habe ich vorher zum testen verwendet aber wie Sascha schon sagte Duzende Objekte damit zu versehen wollte ich mir ersparen. Danke dir.
  2. Ja so halb... ich habe vergessen, dass ich mich zwar in einer 3D Umgebung befinde aber einen 2D Collider anvisieren möchte... if (Input.GetMouseButtonDown(0)) { Ray ray = cam.ScreenPointToRay(Input.mousePosition); RaycastHit2D hit = Physics2D.Raycast(transform.position, ray.direction); if (hit.collider != null) { Debug.Log(hit.collider); } } Das Problem ist, dass meine Mausposition scheinbar auf der selben stelle bleibt auch wenn ich die Kamera bewege. Dadurch muss ich die Kamera an die Richtige position bewegen, damit ich das gewünschte objekt anklicken kann...
  3. Von der Schnelligkeit her denke ich auch, dass ein Scriptable Object am langsamsten und Static Object und Singleton recht schnell sind. Die Größe war der ausschlaggebende Punkt. Ich denke was du sagst ob ich nun ein Static Object oder ein Scriptable Object nehme wird beides de, Speicher nicht sonderlich weh tun. Zumal es sich hier nicht um Gigantische Datenmengen handelt. Ich denke ich werde dennoch den langsamsten und Arbeitsspeicher unanfälligsten Weg gehen und ein Scriptable Object nehmen. Danke dir.
  4. Ich weiß nicht ob Scriptable Objects, Static Objects und Singletons Damen sind (und die Fragt man ja im allgemeinen nicht nach dem Gewicht) deswegen Frage ich nicht die, sondern euch Meine Frage ist womit fahre ich Arbeitsspeicher Technisch am besten? Ich habe letztlich die Möglichkeit ein Problem über eine dieser drei Arten zu lösen. Unterm Strich sind das keine gigantischen Daten aber es geht auch eher um's prinziep. Sagen wir daher ich will in jedem von Ihnen 10 int Werte speichern, (Also nahezu nichts) aber so, dass damit der Arbeitsspeicher nach möglichkeit am geringsten abgegriffen wird und so, dass man aus jeder Szene immer auf diese Daten zurück greifen kann. Was wäre also die beste Möglichkeit und welches die schlechteste? Es muss nicht über lange Zeit gespeichert werden. Es geht um einen Szenenwechsel hin- und her. *Ps: Ich weiß nicht ob das Thema zu Scripting passt ansonsten gerne verschieben*
  5. Perfekt. Das wirds gewesen sein. Vielen Dank.
  6. Hallo zusammen, ich möchte mit der Maus auf ein Objekt klicken können und das ganze über Raycasts lösen. Heißt ich erstelle einen Raycast von der Cameraposition aus in Richtung des Mauszeigers. Soweit und einfach der Gedankengang. Problem ist allerdings, wenn ich das ganze über Input.mousePosition laufen lasse, kommt es nur auf die Position des Mauszeigers im Fenster an und nicht auf welches Objekt ich tatsächlich geklickt habe. Wie kann ich die Richtung in der Spielwelt nehmen und nicht die auf dem Canvas? RaycastHit hit; if (Physics.Raycast(transform.position, Input.mousePosition, out hit)) { Debug.Log("getroffen"); } Mehr Code gibt es noch nicht . Das ich auf den Canvas ziele weiß ich dadurch, dass ich ein Objekt mal einfach der Mausposition habe folgen lassen. Danke im Voraus.
  7. Okay, wer sucht, der findet. ein (Townhall) davor lässt das Building in eine Townhall konvertieren. Danke euch
  8. Hallo zusammen, Ich habe folgende Klassen selbst geschrieben. Bulding VillageBuilding : Building Townhall : Building Mine : VillageBuilding So weit so gut. Jetzt erwartet eine Methode eine Klasse Build(Townhall townhall). Da die stelle an der die referenz gespeichert wird alle Gebäude speichern darf also "public Building clickedBuilding" könnte sich hier genausogut eine Mine befinden. Da ich das ganz in ein try-catch reinpacke sollte das aber dann abgefangen werden. Nun kann ich die Methode aber an dieser stelle nicht aufrufen, weil ich ihm ja ein Building übergebe. Kann ich meine Eigenen Klassen Konvertieren? Also ich sage ihm "Versuch das Gebäude dass du hast als Townhall zu speichern und übergebe es dann" oder muss ich die Methode umschreiben, dass sie ein Building und keineTownhall erwartet? Vielen Dank.
  9. Der PlayerInputManager ist eine Componente in Unity, die benötigt wird um die Spieler zu spawnen und ihnen den Controler zuzuweisen. Wie gesagt weiß ich allerdings nicht, wie ich ihm sagen kann, dass er mir den nächsten Controler suchen soll und diesen dann dem SpielerObject zuzuweisen. Ich habe allerdings noch ein paar andere Probleme. Ich glaube, dass das System noch ein wenig mehr im Hintergrund macht und deswegen sind die eingaben leider etwas anders als gewünscht. Beispielsweise habe ich einen Button zugewiesen und ihm gesagt, dass er einen bool auf true setzt und wenn dieser Button wieder losgelassen wird, soll dieser bool wieder auf false gesetzt werden. (Also quasi das, was "Hold" ungefähr machen sollte) Das funktioniert auch ganz fein. Allerdings ist für die selbe Methode 2 Buttons zugewisen. Sollte ich Knopf 1 drücken und halten und drücke dann Knopf 2 und lasse dann Knopf 2 wieder los und lasse dann Knopf 1 wieder los funktioniert alles wie erwartet und der bool steht auf false. Also: K1 --> K2 --> K2 --> K1 Dann false (Weil kein Knopf mehr gedrückt ist. Also korrekt) Bei: K1 --> K2 --> K1 --> K2 Dann true (Obwohl beide Knöpfe nicht mehr gedrückt werden) Sollte ich so vorgegangen sein, dann kann ich auch nichts mehr machen um den bool zurück auf false zu setzen (zumindest nicht mit dem Controler) Wenn Ihr Code dazu sehen wollt... Bitte: OnShootON() { shootIsOn = true; } OnShootOFF() { shootIsOn = false; } Wobei die beiden Mehtoden bei "pressed" bzw "realease" ausgeführt werden. Nächstes Problem: Jetzt möchte ich den nächsten Knopf einstellen und weise ihm den Default status bei Interactions zu, heißt er wird nur bei Press Only ausgeführt. Zumindest sollte er das. die Methode wird aber 2x ausgeführt. einmal beim Drücken und einmal beim Loslassen. Weise ich ihm dann doch bei Interactions "Press Only" zu, dann wird die Methode (hier steckt KEIN bool hinter) nur einmal durchgeführt. Aber danach auch nie wieder. Auch wenn ich den Knopf nochmal drücke. Auch hier kann ich euch den Code schicken aber auch der macht gerade noch nicht wirklich was... OnDash() { Debug.Log("Dash used"); } Kann es sein, dass das System, auch wenn es schon Version 1.0.2 (oder so ähnlich) ist, immernoch ziemlich buggy ist?
  10. Ich lese heraus, dass du das neue Input System auch noch nicht wirklich kennst?^^
  11. Kennt sich jemand damit aus?
  12. Hat sich schon erledigt... Habe das Space.World im Laser vergessen: transform.Translate(transform.forward * speed * Time.deltaTime, Space.World);
  13. Mein Problem ist, ich weiß, dass ich diese Frage schon mal gestellt habe. Ich finde den Forumseintrag dazu aber nicht mehr. Ich weiß nur, dass die Lösung recht banal war. Ich komme aber nicht mehr darauf. Ich habe ein Raumschiff, das ein Projetil abfeuern soll. Um hier nichts großartig mit Code um mich zu werfen: Instatiate(projectilePrefab, weaponSpawnLeft.position, transform.rotation); funktioniert auch soweit. Allerdings fliegt das Projetil nicht gerade vom Raumschiff weg sondern immer so, als würde mein Raumschiff sich mit doppelter Geschwindigkeit drehen. Hier ist noch alle normal. Nach einer fast 90° drehung: Ich komme gerade nicht mehr drauf wo der Feher ist.
  14. Beide deine Charaktere nutzen das Script du möchtest aber dass nur einer von beiden sich bewegt... Ich muss sagen deine Frage alleine ist die Antwort. Wenn beide das Script haben, werden auch beide Objekte es nutzen. Wenn du einen zweiten Spieler haben möchtest musst du anders vorgehen...
  15. Hey ich bin auch gerade beim Input-System und habe es jetzt auch soweit geschafft, dass ich meine Controler anschließen und über den "InputManager" per Join When Button is Pressed die Spieler erstellen lassen kann. Schön und gut, allerdings möchte ich nicht, dass die Spieler erst Joinen, wenn ein Knopf gedrückt wird sondern ist das in meinem Spiel eine voreinstellung wieviele Spieler teil nehmen. Heißt ich stelle das natürlich um auf "Join Players Manualy". Wie weise ich denn nun Splieler 1 den ersten Controle und Spieler 2 den 2. Controler zu? Ich habe das Mapping ja nur einmal gemacht. Da ich ja auch nicht weiß welchen Controler ein Spieler anschließt würde es ja auch keinen Sinn machen zu sagen, dass Sp1 immer einen X-Box und Sp2 einen PS4 Controler verwendet... (Wobei,... 🤔🙃)
  16. Ich verstehe nicht ganz warum du die Collider aus der nähe abfragen musst um festzustellen ob dein Char Grounded ist. In dem Moment wo er Bodenkontakt hat setzt du is Grounded aus True und wenn er springt oder den Bodenkontakt verliert (onCollissionExit) auf false. Derzeit ist die Abfrage nur: ist ein anderer Collider in der nähe ist der Char grounded. Egal ob das ein Gegner oder was auch immer ist. Das einzige was du raus nimmst ist der Spieler selbst. Das ist ja okay. Was für ein Wert kommt denn bei dem ColliderRadius heraus? Vielleicht ist das viel zu groß wodurch jeder Boden direkt im Bereich liegt und dadurch der Spieler immer springen kann.
  17. Die funktion 'Input.GetKeyDown(Key.Code.J)' gibt übrigens dann true zurück, wenn du die Taste 'J' drückst. das heißt dass du das nicht zwischen speichern musst. Deine beiden boolean bSetKeyJ und bSetKeyN brauchst du also eigentlich nicht. Heißt du könntest das ganze auch so aussehen lassen: void Update() { if(gameIsOver) { //Hier könntest du zudem jetzt noch den Highscore anzeigen lassen NeuesSpiel(); } } private void NeuesSpiel() { if(Input.GetKeyDown(Key.Code.J)) { //hier kommt der Code, der dazu führt, dass das Spiel neu gestartet wird. } } Du musst den bool gameIsOver true setzen sobald das spiel vorbei ist. Und du kannst natürlich noch eine abfrage rein ballern, ob der Spieler verloren hat oder gewonnen hat. was daran, dass das Spiel zuende ist erst mal nichts ändert
  18. okay das ist vielleicht auch eine sache^^ Ich weiß es aus meinen Udemy Kursen aber die kann ich ihm schlecht nennen, weil die Geld kosten Allerdings würde ich mal schauen. Da gibt es für günstig Geld eine Menge Kurse für C# und Unity womit man einen ordentlichen start bekommt.
  19. Was hast du denn bisher? Dann schaue ich gerne mal drüber. Ich weiß nicht auf welchem Stand du bist.
  20. Jetzt sehe ich was... Du versuchst in einer foreach Schleife ein Objekt aus der selben Liste zu löschen, die du gerade durch gehst. Bekommst du da keine Fehlermeldung? Wenn nicht, ist der scheinbar immer im if-Fall und führt das else nie durch. Aber ich verstehe auch nicht, warum du durch die Liste durch gehen musst. Warum rufst du nicht einfach eine Methode "SellItem" auf, die dann selber prüft: Habe ich das Objekt in der Liste? --> Wenn Ja : Entferne es aus der Liste und der Spieler bekommt Geld. --> Wenn Nein: Wirf den Spieler zurück, dass er nichts hat was er verkaufen kann.
  21. Ich steige durch den Code noch nicht ganz durch glaube ich. Aber ich sehe nichts, was darauf hindeutet, dass deine Liste überhaupt aktualisiert wird nachdem das Objekt aus der Liste geflogen ist. Was macht die Methode Anzeige? Wenn die dafür verantwortlich ist, dass deine UI aktualisiert werden soll, wäre die Frage was da passiert.
  22. Ich weiß auch nicht wer das war Gut, dass nicht allzuviele an dem Projekt arbeiten und ich den schuldigen bestimmt bald finde Danke dir nochmal. Vor allem einfach mal OnEnable/OnDiable zu verwenden. Wie gesagt war mir nicht bewusst, dass es die Methoden gibt. Aber wahrscheinlich gibt es so ziemlich für alles irgendwelche Methoden um so etwas abzufragen. Ich habe mich eben auf dem Heimweg von der Arbeit gefragt ob es möglich ist, diese Methoden dazu zu verwenden eine Animation abzuspielen. Also, dass das Menü dann zugeklappt wird statt dass es einfach verschwinden o.Ä. Problem ist dann aber, wenn die Methode ausgeführt wird das Objekt schon weg ist oder gibt es da möglichkeiten?
  23. Dann hab ich ja alles richtig gemacht. Danke dir.
  24. Okay "Added / Remove an non-persistent Listener to / from the UnityEvent" Das wird es wohl sein. Wenn ich "Debug.Log(TESTBUTTON.onClick.GetPersistentEventCount());" hinzufüge bekomme ich auch 1 zurück. Was ist denn eine persistente Funktion? Edit: Okay das Hinzufügen klappt, doch. Es wird nur im Inspector nicht angezeigt. Ich denke dann weiß ich was ich zu tun habe... ich darf das nicht Insprector zuweisen sondern muss das über den Code machen, weil ich dann die Methoden, die ich hinterlegt habe auch wieder raus bekomme. Richtig?
  25. Ich habe zu diesem Thema leider doch nochmal eine Frage: Was mache ich hier Falsch, Ich würde behaupten, dass hier eigentlich alle hinterlegten Events gelöscht werden und das Fenster im Button leer ist: private void Start() { TESTBUTTON.onClick.RemoveAllListeners(); } Es passiert aber gar nichts. Die Hinterlegten Events sind immernoch da. Ich bekomme aber auch keine Fehlermeldung. Genauso geht es anders Herum aber auch nicht: public void Start() { TESTBUTTON.onClick.AddListener(() => OpenKontinent(0)); } //oder public void Start() { TESTBUTTON.onClick.AddListener(() => GetComponent<MenuManger>().OpenKontinent(0)); } Auch hier passiert nichts. Es wird nichts hinzugefügt oder weggenommen.
×
×
  • Create New...