Game Development Live

Unity Room Generator

Prozedurale Raum-Generierung

Ein Unity-System zur prozeduralen Generierung von Raum-Prefabs mit Seed-basierter Zufallsgenerierung, intelligenten Connector-Systemen und umfangreichen Editor-Tools.

UnityC#Procedural GenerationEditor ScriptsPrefab System

Unity Room Generator

Übersicht

Ein Unity-System zur prozeduralen Generierung von Raum-Prefabs mit Seed-basierter Zufallsgenerierung. Das System ermöglicht es, Raum-Prefabs dynamisch aneinanderzureihen und dabei intelligente Verbindungen zwischen EingÀngen und AusgÀngen zu gewÀhrleisten.

Technische Architektur

Core-System

  • Room: Raum-Prefabs mit automatischer BoundingBox-Generierung und RoomType-Klassifizierung
  • Connector: Verbindungspunkte mit Entrance/Exit-Logik und automatischer Transform-Berechnung
  • RoomSequencer: Orchestrierung mit Timeout-Schutz und Regenerationslogik
  • Area: Kollisionserkennung mit SAT-Algorithmus fĂŒr prĂ€zise Platzierung

Editor-Tools

  • RoomEditor: Custom Inspector mit automatischer Connector-Verwaltung
  • GenerateBoundsWindow: Visuelles Tool zur BoundingBox-Erstellung
  • ConnectorEditor: Scene View Visualisierung mit Richtungsindikatoren
  • ConditionalDisableDrawer: Intelligente UI-Komponenten

Generierungslogik

  • Seed-basierte Zufallsgenerierung mit automatischer Seed-RĂŒckgabe
  • RoomType-KompatibilitĂ€t fĂŒr spezifische Raumverbindungen
  • Kollisionserkennung mit konfigurierbarem Overlap-Threshold
  • Timeout-Schutz mit Regenerationslogik bei fehlgeschlagenen Versuchen

Technische Details

Room Component

public class Room : MonoBehaviour
{
    public RoomType roomType = RoomType.MainRoom;
    public Connector[] connections;
    public Bounds[] BoundingBounds;
    
    public enum RoomType { MainRoom, SideRoom, EndRoom, Corridor }
    
    // Automatic bounding area calculation
    public Area BoundingArea { get; }
    
    // Collision detection with other rooms
    public bool CanConnectTo(Connector other, out int[] possibleConnectionsIndexes, float collisionThreshhold);
}

Connector System

[ExecuteInEditMode]
public class Connector : MonoBehaviour
{
    public Room Owner;
    public ConnectionType Type = ConnectionType.Entrance | ConnectionType.Exit;
    
    public bool IsConnected => ConnectedTo != null;
    public Connector ConnectedTo { get; private set; }
    
    // Automatic transform calculation
    public void SetRoomTransformTo(Connector guideConnector);
    
    [System.Flags]
    public enum ConnectionType
    {
        Entrance = 1 << 0,
        Exit = 1 << 1
    }
}

RoomSequencer

public class RoomSequencer : MonoBehaviour
{
    public bool UseSeed = false;
    public int Seed;
    public float OverlappingThreshhold = 0.1f;
    public int TimeToGenerate = 30;
    
    public RoomGenerationTracker[] RoomSetups;
    
    // Generation logic with timeout protection
    public bool Generate();
    
    [System.Serializable]
    public class RoomGenerationTracker
    {
        public Room RoomPrefab;
        public int MinRoomsToGenerate = 1;
        public int MaxRoomsToGenerate = 100;
    }
}

Fazit

Das Unity Room Generator System demonstriert moderne prozedurale Generierung mit Fokus auf FlexibilitĂ€t und Benutzerfreundlichkeit. Das intelligente Connector-System und die Seed-basierte Generierung machen es zu einer effektiven Lösung fĂŒr dynamische Level-Erstellung.


Entwickelt mit Unity, C# und Custom Editor Scripts