Jump to content
Unity Insider Forum

landvogt

Members
  • Content count

    2
  • Joined

  • Last visited

Community Reputation

0 Neutral

About landvogt

  • Rank
    Newbie
  1. Hi, Danke, dieses "Grid" gibts bei mir irgendwie nur als "Tilemap" ohne "Hexagonal" und wie man das auf hexagonal trimmt ... ka. LG
  2. Hallo zusammen, bin relativ unbedarft in Unity und OOP (noch angefangen Mitte 90 mit Pascal und Assembler :) ), habs nach einigen Tutorials in Blender und Unity aber doch geschafft, ein "HexMap"-Objekt zu erstellen, was auch soweit funktioniert und eine Map mit unterschiedl. hohen Hexagonen (eigtl. Hexagonzylindern) ausgibt. Die Datenklasse "Hex" ist ganz simpel: { 3 Koordinaten : int q, r, s // kubische Koordinaten weil math. alles einfacher int Height //Höhe von 0-4 , "Ebene","Hügel#1"Hügel#2","Berg","Hochgebirge" Vector3 Position(); // gibt die RealWelt- Koordinaten zurück in Abhängigkeit von q,r,s } Meine "HexMap" - Klasse erzeugt in zwei for Schleifen also jeweils ein "Hex"-Objekt und durch "instantiate" ein "HexGO" , das dazugehörige GameObject aus einem (von der "Height" des Terraintyps des jew. Hexfledes abh.) Prefab. Der Verwaltung wegen dachte ich mir, store ich beide Typen in 2d arrays innerhalb der "HexMap" Klasse : Hex[,] AllHexes = new Hex[MaxQ,MaxR]; //alle reine DatenKlassen Obj) GameObject[,] AllHexesGO = new GameObject[MaxQ,MaxR]; // alle HexGOs Soweit passt alles, die prefabs werden korrekt mit Textur dargestellt. Hier meine erste Frage : Ist das halbwegs elegant (vor allem die zwei 2d arrays ) ? Ich hab auch versucht meiner reinen HEx-Datenklasse bereits ein eigenes GameObject zu spendieren, das also zusammenzufassen. Leider kann ich dann im "Hex"-Konstruktor aber nicht "instantiate" machen,weil es ja kein Monobehaviour ist... Und wenn ich meine "Hex" Klasse von "Monobehaviour" oder "GameObject" erben lass will, gehts auch nicht. Aber zumindest läufts soweit. Dann wollte ich eine "Hero" -Klasse erstellen, welche eine "Figur" auf der Map darstellen sollte : public class Hero { public Hero(HexMap MyHexMap, int q, int r) { this.Q = q; this.R = r; this.H = MyHexMap; Debug.Log("Hero erzeugt"); } public int Q; public int R; // GameObject HeroGO; public HexMap H; public Vector3 PositionOnHex(){ //schaut ins HexFeld, um den Realwelt-Vector3 für den Hero zu generieren Vector3 pos = new Vector3(); pos = H.AllHexes[this.Q,this.R].Position (); pos.y =(float)H.AllHexes[this.Q,this.R].GetHeight() * 0.5052f; // y-Koord. hier eigtl "z" , also "Height" return pos; } In der "HexMap" erzeuge ich den Hero so : " [Felder werden zuerst durch "GenerateMap" erzeugt] Hero Held = new Hero (this, 10, 10); // erzeugt reines DatenObj GameObject HeroGO = (GameObject)Instantiate ( // erzeugt zugeh. GO) HexPrefab [5], Held.PositionOnHex(), Quaternion.identity, this.transform); MeshRenderer mrr = HeroGO.GetComponentInChildren<MeshRenderer>(); // Textur setzen mrr.material = HexMaterials [2]; " Held.PositionOnHex() liefert die RealweltKoord. von HexFeld (10,10) inkl "Heigth", um das Held-GO dort richtig zu setzen, diese verwendet aber die Methoden "Position()" u. "GetHeight()" aus der "Hex"-Klasse. Aufgerufen über den Array " pos = H.AllHexes[this.Q,this.R].Position (); pos.y =(float)H.AllHexes[this.Q,this.R].GetHeight() * 0.5052f; " Code compiliert, aber folgende Warnung : " NullReferenceException: Object reference not set to an instance of an object Hero.PositionOnHex () (at Assets/Hero.cs:23) HexMap.Start () (at Assets/HexMap.cs:17) " bei Zeile : pos = H.AllHexes[this.Q,this.R].Position (); Leider erscheint kein "Held", was mache ich falsch ? Kann ich "MyHexMap" überhaupt so dem "Hero"-Konstruktor mitgeben ? Ich dachte mir halt der Hero muss ja irgendwie wissen, zu welchem "HexMap" - Objekt er gehört ... Wie gehts anders ? Würde mich über etwas Hilfe sehr freuen ! LG Landvogt
×