Jump to content
Unity Insider Forum

Garzec

Members
  • Content Count

    308
  • Joined

  • Last visited

  • Days Won

    2

Garzec last won the day on January 12

Garzec had the most liked content!

Community Reputation

7 Neutral

About Garzec

  • Rank
    Advanced Member

Recent Profile Visitors

1,789 profile views
  1. Hier nur mal zur Info, so sieht momentan der Workaround Code aus. Auch damit ihr mal sehen könnt, wie klein dieses "Feature" eigentlich ist, ich möchte es eben nur mit dem neuen Input System noch kleiner machen public sealed class SelectedPositionStateController : MonoBehaviour { private void Update() { #if UNITY_ANDROID || UNITY_IOS if (UnityEngine.Input.touchCount > 0) { Touch touch = UnityEngine.Input.GetTouch(0); // hier touch.position an meine ECS Simulation übergeben } #elif UNITY_STANDALONE if (UnityEngine.Input.GetMouseButtonDown(0)) { // hier UnityEngine.Input.mousePosition an meine ECS Simulation übergeben } #endif } } Weil den Code hier public sealed class SelectedPositionStateController : MonoBehaviour { public void Select(InputAction.CallbackContext context) { Vector2 selectedPosition = context.ReadValue<Vector2>(); // hier selectedPosition an meine ECS Simulation übergeben } } Kann ich viel einfacher testen
  2. Stimmt, ganz vergessen. Geht auch Wobei mein oberstes TODO ist diesen Code natürlich komplett rauszuwerfen, da man es mit dem neuen Input System einfacher und performanter haben kann 👍
  3. @Brighthell96 nein, noch nicht. Da ich das Input System nur dafür brauche, sieht mein momentaner Schlachtplan wie folgt aus... Das Ganze wird mit dem alten System umgesetzt, das heißt, ich prüfe 1x pro Update, auf welcher Plattform ich mich befinde, je nachdem ziehe ich mir dann den Vector2 und überschreibe die Variable. Schlechte Lösung, ist aber klein und hat keine Abhängigkeiten. Besser (sobald Lösung da ist): - Neues Input System installieren - Klick/Tap für Desktop/Mobile konfigurieren - Update Code komplett wegwerfen - Select Methode als Event Handler definieren Damit ist mir dann die Plattform egal und der Code läuft nur, wenn er tatsächlich gebraucht wird
  4. Leider passt das nicht ganz.... 1. Das wäre jetzt nur für die Maus, auf Mobile müsste es ja anders sein 2. Jetzt wird das Event durchgehend getriggert. Ich möchte das Event ja nur auslösen, wenn tatsächlich geklickt / getappt wurde Aber danke
  5. Ich habe als Grundlage erstmal dieses Video hier genommen und dann eben versucht die "Jump" Funktion zu erweitern. Jump muss ja keine Daten durchreichen, bei mir muss halt noch der V2 durchgereicht werden.
  6. @Sascha Ich sehe den Fehler erst einmal bei meiner Konfiguration. Ich werde das Ganze nochmal konfigurieren, muss aber gestehen, dass ich das System als Neuling gar nicht so einfach zu konfigurieren finde. @Brighthell96 Das stimmt zwar alles, aber im Code möchte ich nicht mehr wissen, von wo der Input kommt Wenn Unity das alles schon kann, dann muss ich selbst weniger Code warten / Tests schreiben
  7. @Brighthell96 vielen Dank für den Ansatz! Leider habe ich dort Probleme, die mir Unity schon lösen würde 1. Ich muss selbst noch Code schreiben, auf welcher Plattform ich mich gerade befinde 2. Das Ganze ist nicht eventbasiert, das heißt, ich würde im Update 1x pro Frame den Wert abfragen, was nicht notwendig ist, wenn mir Unity ein Event triggern kann
  8. @Sascha Hier der Stacktrace von der zweiten Meldung, lässt mich aber leider nicht schlauer werden
  9. Ich habe ein neues Projekt angelegt und das neue Input System installiert. Ich möchte einfach nur die Klick (Desktop)/Tap (Mobile) Position abspeichern. Ich weiß, dass das alte System schon etwas liefert - https://docs.unity3d.com/ScriptReference/Input-mousePosition.html - https://docs.unity3d.com/ScriptReference/Touch-position.html Ich möchte es aber mit dem neuen System umsetzen. Hier meine Input Map Konfiguration Hier ein Script für Tests public class FooBar : MonoBehaviour { public void Select(InputAction.CallbackContext context) { Vector2 selectPosition = context.ReadValue<Vector2>(); Debug.Log($"Select position is: {selectPosition.x}|{selectPosition.y}"); } } In der Szene habe ich dann ein leeres GameObject dahingehend konfiguriert Leider bekomme ich im PlayMode jedes mal, wenn ich die Maus bewege, folgende Fehler: Ich schätze mal, dass meine Input Konfiguration falsch ist. Weiß jemand, wie man die Input Map dahingehend konfiguriert, dass man entweder bei einem Klick oder einem Tap die Position durchgereicht bekommt?
  10. Ja, ihr habt ja Recht. Aber nehmen wir mal ein Standard C# Projekt als Beispiel, dort ist ja der "default" Namespace erstmal von der Ordnerstruktur abgeleitet. Natürlich kann man den manuell anpassen, aber wenn man eine neue Datei anlegt, ist es ja erstmal so.
  11. @Sascha danke. Also wenn ich ein Standard C# Projekt erstelle, richtet sich der Namespace ja auch erstmal nach dem Folder, wo die Datei drin ist. Kann man händisch natürlich abändern, aber wird wahrscheinlich niemand tun. In Unity wurde mit der 20.2 Version damit geworben, dass es jetzt Namespace Support gibt. Wenn das in Unity so nicht geht, frage ich mich, was dieses Feature (also die Einstellung) dann soll.
  12. Hallo zusammen, ich habe mir die neue 20.2 Version gezogen und möchte jetzt für alle Scripte die Namespaces dabei haben. Also habe ich in den Settings erst einmal einen Ordner im Assets Ordner angegeben, wo jeglicher Code liegt Die Ordner Struktur sieht aktuell so aus Das Problem ist, dass neue Scripte nicht den richtigen Namespace haben. Das Script Test hat den Namespace Sources, obwohl ich dort Sources.Scripts erwarten würde. Weiß jemand, wie man das richtig einstellt?
  13. Mein Ziel ist es ein Spiel ähnlich zu dieser Vorlage zu erstellen Das Spiel ist zwar ein Voxel Game, aber für den Code kann man es ja als 2D Grid betrachten. Wie im Video zu sehen ist das Spiel rundenbasiert. Ich gebe also Input rein, der Spieler bewegt sich und bis zum Ende der Runde ist weiterer Input deaktiviert. Zunächst gibt es Obstacles und Trigger, die auf bestimmte Dinge reagieren. Obstacles wären also Wände, Bäume, Tische, ... Diese kann ich mir in einer Liste merken oder einzeln betrachten, zumindest reicht es aus, wenn alle 4 Außenseiten ein Obstacle haben, um die Zelle vollständig zu blockieren. public class Obstacle : MonoBehaviour { [SerializeField] Vector2Int relativePosition; public Vector2Int RelativePosition { get { return relativePosition; } } } NPCs müssten aber auch Obstacles haben, damit der Spieler nicht in diese reinlaufen kann. Die Trigger sind etwas komplexer. Bei einem Loch oder Feuer, das die Bewegung der Figur stoppt und diese tötet reicht es aus, dieses optisch im Zentrum zu platzieren und wieder an alle 4 Seiten einen "Death-Trigger" anzubringen. Ein Lichtschalter kann an einer Seite angebracht sein und nur ausgelöst werden, wenn sich der Spieler auf das Feld bewegt und diesen "anschaut". Wenn also der Lichtschalter relativ zur Zellenposition "nördlich" steht, also (0|1) dann muss der Spieler diese Bewegungsrichtung haben, um ihn auszulösen. Wenn rot ein Lichtschalter ist und grün der Spieler mit einer Bewegung nach links , dann würde der Spieler den Lichtschalter nicht auslösen, da er sich ja nicht zum Schalter bewegt. Blau würde diesen auslösen Eine Druckplatte würde den Spieler nicht stoppen, dennoch eine Aktion auslösen. Steht der Spieler vor einem NPC, wird er diesen töten. Steht der Spieler neben einem NPC, wird dieser NPC von ihm weglaufen. Das gilt natürlich nur, wenn sich zwischen den beiden keine Wand befindet. Der NPC könnte natürlich auch eine Waffe haben und den Spieler töten, falls der Spieler vor dem NPC stehen bleibt. Wenn man die Obstacles nun auch einfach als Trigger betrachtet, die andere Objekte stoppen, könnte erstmal alles ein Trigger sein. Ich würde erstmal so vorgehen, dass jede Position an jeder Seite 0 - n Trigger haben kann. Je nachdem, wie eine Figur am Ende ihrer Bewegung steht, reagieren dann die umliegenden Trigger. Die Position selbst würde also erstmal so etwas speichern `Dictionary<RelativePosition, List<Trigger>>` Das einzige Problem, dass ich noch nicht gelöst habe ist: Wenn sich ein NPC bewegt, dann müsste man wissen, welche Trigger er zur neuen Zelle mitnimmt (töten, weglaufen, ...) und welche Trigger bei der Position bleiben (Wand als Obstacle, Lichtschalter an einer Seite, ...). Vielleicht hat ja jemand eine Idee oder hat vielleicht einen viel besseren Ansatz
  14. Das Problem wurde schon teilweise gelöst. Der Code ist korrekt, ebenso sind die Felder im Inspector zugewiesen. Dennoch haben die Collectables als Objektreferenz der Highscore zuerst die richtige Instanz und danach eine .. warum auch immer .. nicht existierende Instanz. Das kam wohl dadurch zustande, dass Objekte in der Szene erstellt wurden, diese dann den Collectables zugewiesen wurden. Dann wurden diese Objekte zu Prefabs gemacht und gelöscht, dann wurde alles nochmal im Asset Ordner zugewiesen und wahrscheinlich ging es dann ein wenig durcheinander bei Unity, sodass bei seiner Version keine richtige Referenz mehr durch den Inspector besteht. Nimmt man die Inspectorzuweisung weg und lässt kurz per Tag suchen, funktioniert es.
×
×
  • Create New...