Jump to content
Unity Insider Forum

MustafGames

Members
  • Content Count

    372
  • Joined

  • Last visited

  • Days Won

    4

MustafGames last won the day on February 20

MustafGames had the most liked content!

Community Reputation

10 Gut

About MustafGames

  • Rank
    Advanced Member

Recent Profile Visitors

1,196 profile views
  1. Na so einfach wie du dir das bei mir vorstellst ist es nicht. Mein Projekt ist ein 2D Projekt, da Unity den NavMesh aber nicht für 2D Projekte aktuell vergeben hat, habe ich einen NavMeshSurface2D Script aus dem Netz implementiert, meine Figur ist komplex und doch gut strukturiert, da es ein Isometrisches Spiel ist muss noch einiges beachtet werden. Mein Hauptobjekt (mit NavMeshAgent und Movement Script) und Scale auf 1, 1, -0.1 damit es 2D wirkt. hat als Child ein Objekt welches nur die Rotation auf 22.5, -45, -22.5 setzt das hat wiederum dann als Child mein eigentliches Model, die Rotation muss hier gesetzt werden sonst sieht alles schlecht aus. Problem ist jetzt das wenn ich meinen Agent updateRotation auf false setzte, geht alles er läuft und so, nur die Figur schaut immer in die selbe Richtung. Lass ich update Rotation auf true, dreht er sich aber die Figur ist dann wie eine Scheibe und das sieht blöd aus. Jetzt muss ich die Rotation die der Agent auf sein Objekt setzt auf mein Model übertragen.
  2. Transform t = transform.GetChild(0).GetChild(0); Vector3 v = agent.velocity + transform.position; v.y = 0; t.LookAt(v); Rotiert trotzdem über alle Achsen, und wenn ich die Achsen nachträglich auf 0 setze, sieht es schrecklich aus.
  3. Grüße, mir geht gerade ein Problem auf die Nerven welches ich nicht gelöst bekomme, daher frag ich hier nach. Ich habe einen NavMeshAgent und dieser hat ja die Möglichkeit agent.updateRotation auf false zu setzen. jetzt geht alles nur die Figur dreht sich nicht, den das Model ist als Child Objekt des NavMeshAgent Objekts gegeben. Jetzt möchte ich das Child Objekt nur um die Y-Achse immer in die Richtung drehen wo mein Agent zuletzt hingesehen hat, nur wie? mit agent.velocity und LookAt rotiert es über alle 3 Achsen trotz das ich velocity.y auf 0 setze? Komme einfach nicht weiter! Mfg Mustaf
  4. Grüße, Zum selber nachtesten, braucht ihr nur eine Object als Spieler, welches in der Scene dann verschoben wird, ein Grid mit CellSize auf 1,1,0 und eine Tilemap mit Standartwerten. bin auf ein Problem gestoßen, wenn ich meine Welt generiere sieht es schon erstmal ganz gut aus, es werden immer die Chunks um dem Spieler herum generiert auch richtig angeordnet, etwas mittiger zum Spieler könnte es sein, es lädt immer dann die Chunks wenn der Spieler unten links in der Ecke ist. Problem 2: Die Noise sieht irgendwie komisch aus, als würde es die Positionen der Chunks nicht richtig berechnen, kann sein das ich irgendwo einen Tippfehler habe nur ich finde diesen nicht. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Tilemaps; [System.Serializable] public class Terrain { public string name; public float height; public TileBase tile; } public class WorldGeneration : MonoBehaviour { public Tilemap tilemap; public Terrain[] terrains; private int size = 10; private float scale = 50; private int octaves = 6; private float persistance = 0.55f; private float lacunarity = 1.92f; void Start () { tilemap.ClearAllTiles(); } void Update () { LoadChunks(); } public void LoadChunks () { Vector2Int pos = new Vector2Int((Mathf.RoundToInt(transform.position.x -5) / (size / 2)), Mathf.RoundToInt(transform.position.y -5) / (size / 2)); for (int x = -1 + pos.x; x <= 1 + pos.x; x++) { for (int y = -1 + pos.y; y <= 1 + pos.y; y++) { Vector2Int a = new Vector2Int(x, y); Vector2Int b = new Vector2Int(a.x * (size / 6), a.y * (size / 6)); //Debug.Log(b + ""); Vector2Int c = new Vector2Int(b.x - (size / 8), b.y - (size / 8)); float dist = Vector2.Distance(pos, c); //if (dist < 15) { Generate(b, false); //} else if (dist > 15) { // Generate(new Vector2Int(chunk_x, chunk_y), true); //} } } } public void Generate (Vector2Int pos, bool unload) { for (int x = (pos.x * size); x < (pos.x * size + size); x++) { for (int y = (pos.y * size); y < (pos.y * size + size); y++) { float noiseHeight = Noise(x, y); for (int t = 0; t < terrains.Length; t++) { Vector3Int tpos = new Vector3Int(x, y, t); if (!unload) { if (noiseHeight > terrains[t].height) { tilemap.SetTile(tpos, terrains[t].tile); } } else { tilemap.SetTile(tpos, null); } } } } } public float Noise (int x, int y) { float amplitude = 1; float frequency = 1; float noiseHeight = 0; for (int i = 0; i < octaves; i++) { float noise = Mathf.PerlinNoise((x - (size / 2)) / scale * frequency, (y - (size / 2)) / scale * frequency) * 2 - 1; noiseHeight += noise * amplitude; amplitude *= persistance; frequency *= lacunarity; } if (noiseHeight > 1) { noiseHeight = 1; } else if (noiseHeight < 0) { noiseHeight = 0; } return noiseHeight; } } Würde mich sehr freuen wenn Ihr es mal testen könntet und vielleicht sogar mir sagen könntet wo ich mich verschrieben habe. MfG Mustaf
  5. Edit: public void LoadChunks () { int new_size = size - 1; int playerx = Mathf.RoundToInt(player.position.x); int playery = Mathf.RoundToInt(player.position.y); Vector3Int cellpos = tilemap.WorldToCell(new Vector3(player.position.x, player.position.y, 0)); Vector2Int pos = new Vector2Int(playerx / new_size, playery / new_size); Debug.Log(cellpos); for (int x = -loadDistance; x <= loadDistance; x++) { for (int y = -loadDistance; y <= loadDistance; y++) { //Chunk Positionen um die Spielerposition -1, 0 1 etc.. Vector2Int a = new Vector2Int(x + pos.x, y + pos.y); //Chunk Positionen verwendtbar zum generieren in 16er Schritten Vector2Int b = new Vector2Int(a.x * new_size, a.y * new_size); //Das selbe nur auf die Mitte ausgerichtet Vector2Int c = new Vector2Int(b.x - (new_size / 2), b.y - (new_size / 2)); //Hier muss mal irgendwie die Position so stark ansteigen das es Mittig beim Spieler ist //Interessant ist das durch mein Grid sind 4.26F des Spielers = 16 Felder im Grid, irgendwie muss das mit einberechnet werden? Vector2Int d = new Vector2Int(c.x, c.y); Vector2Int lastpos = new Vector2Int(d.x, d.y); Komme gerade überhaupt nicht weiter, einziges Erkenntnis ist mein Kommentar über Vector2Int d. Vielleicht hat von euch jemand eine Idee? Edit 2: Lösung gefunden, ist abhängig von den Einstellungen im Grid, bedeutet bei einer Grid Größe von 0,26f muss das hinzugefügt werden: int AlphaX = Mathf.RoundToInt(player.position.x / 4.26f) * new_size; int AlphaY = Mathf.RoundToInt(player.position.y / 4.26f) * new_size; Vector2Int d = new Vector2Int(c.x + AlphaX, c.y + AlphaY); Nächstes Problem ist folgendes: float dist = Vector2.Distance(lastpos, pos); if (dist < loadAndUnload.x) { Generate(lastpos, false); } else if (dist > loadAndUnload.y) { Generate(lastpos, true); } Ich versuche nun Abhängig von der Position des Spielers und des äußersten Chunks, Chunks zu laden oder zu deaktivieren. Hab das nur noch nie gemacht und bräuchte da vielleicht nen Anstups.
  6. Hallo, ich komme gerade nicht drauf, ich lade 1 Reihe im Moment um den Chunk der beim Spieler ist herum, jedoch sind die Chunks nicht im Raster angeordnet, bewegt sich der Spieler nur leicht, werden auch die Chunks nur verschoben und nicht im Raster angeordnet. Das ganze funktioniert über einer Tilemap. Frage ist nun wo hab ich falsch gerechnet und müsste es anders machen? Variable size bedeutet die Chunkgröße in diesem Fall 16 bzw. 17. LoadDistance ist bei 1 also eine Chunk-Reihe um den Spieler herum. public void LoadChunks () { Vector3Int cellpos = tilemap.WorldToCell(new Vector3(player.position.x, player.position.y, 0)); Vector2Int pos = new Vector2Int(cellpos.x - (size / 2), cellpos.y - (size / 2)); for (int x = -loadDistance; x <= loadDistance; x++) { for (int y = -loadDistance; y <= loadDistance; y++) { Vector2Int lastpos = new Vector2Int(pos.x + (x * size), pos.y + (y * size)); float dist = Vector2.Distance(lastpos, pos); if (dist < loadAndUnload.x) { Generate(lastpos, false); } else if (dist > loadAndUnload.y) { //Generate(lastpos, true); } } } } MfG Mustaf Hoffe bei meinen schwer verständlichen Erklärungen kann trotzdem jemand es verstehen.
  7. Na ich habs jetzt ganz einfach gemacht und alle Sprites (Tiles) einfach mit einer Outline per Paint Programm versehen.
  8. Grüße, kennt jemand von euch einen Weg den Outline Effect auf eine Tilemap zu wirken? Mfg Mustaf
  9. Ja hab ich aber hatte auch im übergeordneten Objekt die Rotation geändert aber das muss man im untergeordneten machen, jetzt sieht es super aus. Danke Leute.
  10. Wie müsste ich für ein Isometrisches Unity Project die Rotationen setzen, wenn die Z 0 ist? Wenn ich -22.5, -45, 22.5 nehme und z auf 0 setze sieht das irgendwie nicht schön aus.
  11. Sascha du bist genial, darauf wäre ich jetzt nicht gekommen :D
  12. Hallo, genau ich möchte meine 3D Objekte mit verschiedenen Animationen zu 2D Sprites konvertieren (in einer Isometrischen Ansicht). Problem dabei es sollte während des Spiels passieren (Realtime) weil man ja bei Charaktern die Rüstung ändern kann und da durch würden sich alle Animationen auch ändern. Deswegen suche ich einen Sprite-Mesh-Renderer der wie der Sprite Renderer funktioniert nur das man einen Mesh als Input nutzt. Edit: Am besten wäre im Realtime einen Mesh zu Sprite zu konvertieren. Hab das hier zufällig zum Thema gefunden, vielleicht nützt das jemanden was: https://www.pixelsquid.com
  13. Na ich brauche einen Renderer wo ich einen Mesh hineingeben kann + Rotation und das soll dann aber so gerendert werden als wäre es ein Sprite. Mesh zu Sprite.
×
×
  • Create New...