Environment settings become scene entities (UE Skybox/SkyLight semantics)
Skybox/SkyLight are now Actor-carried components instead of resident global settings, matching UE where SkyAtmosphere/SkyLight/fog are Actors added from Place Actors and configured in Details. - New SkyboxComponent (active + envPath asset slot) and SkyLightComponent (active + ambientColor); first-active entity wins per frame - SceneRenderer collects env from components into FrameSceneData (DrawSkybox/envPath/ambient); Renderer performs delta sync - env reloads only when the resolved path changes, neutral fallback when empty or unloadable - App-side env plumbing removed: kEnvPaths table and getEnvIndex/ setEnvIndex callbacks deleted; StatsPanel keeps ClearColor + debug view, env params move to Details - Serializer: scene-level Settings stores ClearColor only; env components serialize per entity; legacy v1 scenes (Environment header + Settings.AmbientColor/DrawSkybox) auto-migrate into an Environment entity on load for visual parity - Inspector: Skybox/Sky Light sections with .hdr asset slot dropdown and Add Component entries; Outliner "+ Create" popup offers Empty/Light/Camera/Environment
This commit is contained in:
@@ -148,11 +148,39 @@ void HierarchyPanel::Draw(const EditorContext& ctx, entt::entity& selected)
|
||||
{
|
||||
ImGui::Begin("Outliner");
|
||||
|
||||
// 工具栏:创建实体(在遍历之前,不修改遍历中的注册表结构)
|
||||
if (ImGui::Button("+ Create Entity"))
|
||||
// 工具栏:创建实体(在遍历之前,不修改遍历中的注册表结构)。
|
||||
// Place Actors 简化语义:常用类型一键带组件,其余 Add Component 补
|
||||
if (ImGui::Button("+ Create"))
|
||||
{
|
||||
const auto e = ctx.scene->CreateEntity("Entity");
|
||||
selected = e;
|
||||
ImGui::OpenPopup("create_entity");
|
||||
}
|
||||
if (ImGui::BeginPopup("create_entity"))
|
||||
{
|
||||
if (ImGui::MenuItem("Empty"))
|
||||
{
|
||||
selected = ctx.scene->CreateEntity("Entity");
|
||||
}
|
||||
if (ImGui::MenuItem("Light"))
|
||||
{
|
||||
auto e = ctx.scene->CreateEntity("Light");
|
||||
e.AddComponent<Engine::ECS::LightComponent>();
|
||||
selected = e;
|
||||
}
|
||||
if (ImGui::MenuItem("Camera"))
|
||||
{
|
||||
auto e = ctx.scene->CreateEntity("Camera");
|
||||
e.AddComponent<Engine::ECS::CameraComponent>();
|
||||
selected = e;
|
||||
}
|
||||
if (ImGui::MenuItem("Environment"))
|
||||
{
|
||||
// UE 新关卡环境集简化:Skybox(背景)+ SkyLight(环境光)一体
|
||||
auto e = ctx.scene->CreateEntity("Environment");
|
||||
e.AddComponent<Engine::ECS::SkyboxComponent>();
|
||||
e.AddComponent<Engine::ECS::SkyLightComponent>();
|
||||
selected = e;
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
ImGui::Separator();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user