Jump to content
Unity Insider Forum

MustafGames

Members
  • Content Count

    368
  • Joined

  • Last visited

  • Days Won

    4

Everything posted by MustafGames

  1. 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
  2. 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.
  3. 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.
  4. Na ich habs jetzt ganz einfach gemacht und alle Sprites (Tiles) einfach mit einer Outline per Paint Programm versehen.
  5. Grüße, kennt jemand von euch einen Weg den Outline Effect auf eine Tilemap zu wirken? Mfg Mustaf
  6. 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.
  7. 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.
  8. Sascha du bist genial, darauf wäre ich jetzt nicht gekommen :D
  9. 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
  10. 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.
  11. Hallo, Gibt es in Unity die Möglichkeit Meshes zu Sprites zu rendern, das ist mir wichtig wegen den Animationen oder kennt ihr dafür etwas? MfG Mustaf
  12. Hallo, weiß jemand wo ich im Editor den Standort Zugriff aktivieren kann, das ist sonst nervig ständig einen Build zu starten? Mfg Mustaf
  13. Ok Danke, na ich probiere mal herum.
  14. Na ich meine das eher so, meine Sprites (Tilemaps) werden die den richtig davon beeinflusst, bei Bloom sehe ich keinen Unterschied?
  15. Welche Effekte kannst du mir für 2D Spiele empfehlen, die man auch richtig sieht?
  16. Hallo, würde gerne mal wissen ob Ihr Camera Effekte oder andere Grafikpacks für 2D Spiele zum Optik hübscher machen kennt? Mfg Mustaf
  17. Hab hier das gefunden, klappt jedenfalls teilweise, vielleicht kannst du als sehr erfahrener Entwickler da was rauspicken? https://forum.unity.com/threads/2d-navmesh-pathfinding.503596/page-2
  18. Die erweiterten NavMeshComponents habe ich schon leider akzeptieren die den TilemapCollider2D nicht.
  19. Grüße, kann mir jemand helfen dabei einen Script zu schreiben wo man im Spiel (Runtime) einen NavMesh erstellt indem man die Daten eines Colliders nutzt (Tilemap Collider)? ich brauche ein paar Ansätze dafür. Im Moment sieht es so aus, leider bringt das nichts: List<NavMeshBuildSource> sources = new List<NavMeshBuildSource>(); NavMeshBuilder.CollectSources(col2.bounds,NullMask,NavMeshCollectGeometry.PhysicsColliders,0,new List<NavMeshBuildMarkup>(),sources); NavMeshData n = NavMeshBuilder.BuildNavMeshData(NavMesh.GetSettingsByID(0), sources, col2.bounds,Vector3.zero,Quaternion.identity); if (n != null) { if (NavMeshDataInstance.valid) { NavMesh.RemoveNavMeshData(NavMeshDataInstance); } NavMeshDataInstance = NavMesh.AddNavMeshData(n); } } Mfg Mustaf
  20. Grüße, hat jemand eine Idee wo man Isometrische 2d Charakter animieren kann, habe einzelne Sprites (Kopf, Körper, etc..)? Mfg Mustaf
  21. Hallo, ich probiere gerade am neuen Isometric Tilemap Feature herum. Ich habe ein Tileset erstellt und einige Sprites hinzugefügt nun sind paar raus gelöscht, da sie nicht mehr gepasst haben oder ersetzt wurden, doch die bereits in der Scene platzierten Tiles bleiben und lassen sich nicht mehr entfernen, was kann man da machen? Mfg Mustaf
  22. Edit: Lösung war das der Windows Defender mit seiner Ordner-Überwachung sämtlichen Zugriff auf den Dokumente Ordner verbietet.
  23. #Push Hat keiner eine Idee? Ich müsste irgendwie die Festplatte Rechte geben auf den Dokumente Ordner oder so aber wie?
  24. Hallo, ich benötige mal Fachwissen, es geht um folgendes: Meine Spiele sind auf einer externen Festplatte die einen eigenen Stromanschluss hat gespeichert, da meine SSDs nicht so viel Speicherplatz haben. Hauptproblem was andere Probleme verursacht ist: Die Spielstände werden bei einigen Spielen in Dokuments/My Games oder einfach nur im Dokumenten Ordner gespeichert und irgendwie sagt Windows 10 der externen Festplatte: "Nein, nein du darfst dort nichts ändern" nun ändere ich im Spiel etwas und es bleibt aber nicht gespeichert.. Mods welche auch unter Documents gespeichert werden, werden natürlich trotz Häckchen nicht geladen. Betroffene Spiele sind: Terraria und Stellaris Kann ich irgendwo den Speicherort direkt auf die externe Festplatte verschieben und alle zukünftigen Spiele nehmen das an? Mfg Mustaf
×
×
  • Create New...