"""区域定义、Outliner 文件夹结构、Actor 命名规范。 数据来源: - docs/design/prototype/关卡-v01-城郊小街-执行案.md §二 - docs/technical/关卡-v01-搭建指南.md §〇 """ # ---- 场景全局参数 ---- SCENE_PARAMS = { "scene_size": (8000, 6000), # cm "ground_z": 0, "character_height": 120, # cm "camera_height": 100, # cm "time_of_day": "15:00", "origin_corner": "西南角地平面", } # ---- 区域定义 ---- ZONES = { "Z1": { "name": "家", "name_en": "Home", "origin": (0, 0, 0), "bounds": (1000, 800), "color_material": "MI_DevRed", }, "Z2": { "name": "小卖部", "name_en": "CornerShop", "origin": (1000, 200, 0), "bounds": (600, 600), "color_material": "MI_DevOrange", }, "Z3": { "name": "主街道", "name_en": "MainStreet", "origin": (0, 800, 0), "bounds": (5000, 500), "color_material": "MI_DevGray", }, "Z4": { "name": "空地", "name_en": "VacantLot", "origin": (3500, 1300, 0), "bounds": (1500, 1200), "color_material": "MI_DevBrown", }, "Z5": { "name": "巷子", "name_en": "Alley", "origin": (2300, 1300, 0), "bounds": (300, 2000), "color_material": "MI_DevWhite", }, "Z6": { "name": "水塘边", "name_en": "Pond", "origin": (1600, 3300, 0), "bounds": (1500, 1400), "color_material": "MI_DevSkyBlue", }, "Z7": { "name": "老居民楼", "name_en": "OldBuilding", "origin": (5800, 200, 0), "bounds": (1200, 1800), "color_material": "MI_DevGray", }, } # ---- Outliner 文件夹结构 ---- LEVEL_NAME = "LVL_SuburbanV01" ZONE_FOLDERS = { "Z1": f"{LEVEL_NAME}/Z1_家", "Z2": f"{LEVEL_NAME}/Z2_小卖部", "Z3": f"{LEVEL_NAME}/Z3_主街道", "Z4": f"{LEVEL_NAME}/Z4_空地", "Z5": f"{LEVEL_NAME}/Z5_巷子", "Z6": f"{LEVEL_NAME}/Z6_水塘边", "Z7": f"{LEVEL_NAME}/Z7_老居民楼", "GLOBAL": f"{LEVEL_NAME}/Global", } CATEGORY_FOLDERS = { "STR": "Structure", "PROP": "Props", "INTR": "Interactables", "COLL": "Collectibles", "BND": "Boundaries", "LGT": "Lighting", } GLOBAL_SUBFOLDERS = { "BND": f"{LEVEL_NAME}/Global/Boundaries", "LGT": f"{LEVEL_NAME}/Global/Lighting", "PLAY": f"{LEVEL_NAME}/Global/PlayerStart", } def get_folder_path(zone_id: str, category: str) -> str: """根据区域 ID 和类别获取 Outliner 文件夹路径。""" if zone_id == "GLOBAL": return GLOBAL_SUBFOLDERS.get(category, f"{LEVEL_NAME}/Global") base = ZONE_FOLDERS.get(zone_id, f"{LEVEL_NAME}/Global") sub = CATEGORY_FOLDERS.get(category, "") if sub: return f"{base}/{sub}" return base # ---- Actor 命名模板 ---- # LVL___ # 已在搭建指南中给出完整名称,脚本直接使用。 # ---- 搭建顺序 ---- BUILD_ORDER = ["Z1", "Z3", "Z2", "Z4", "Z5", "Z6", "Z7"] # ---- Player Start ---- PLAYER_START = { "location": (500, 720, 0), "rotation": (0, 0, 0), # 面向 +Y(北) } # ---- 光照 ---- LIGHTING = { "directional_light": { "location": (0, 0, 500), "rotation": (-45, 45, 0), # 从西南照射,仰角45° "intensity": 3.0, "color": (1.0, 0.95, 0.85), # 暖白 }, "sky_light": { "intensity": 0.5, }, "street_lights": [ {"location": (1500, 1050, 0), "intensity": 0.3}, {"location": (3000, 1050, 0), "intensity": 0.3}, {"location": (4500, 1050, 0), "intensity": 0.3}, ], }