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