소스 검색

Add more settings to the settings screen (#405)

* Add tabbed settings for General, Graphics, Audio

Signed-off-by: Mike Balfour <[email protected]>

* Add MSAA and TAA support.

Signed-off-by: Mike Balfour <[email protected]>

* Enable more toggles.

Signed-off-by: Mike Balfour <[email protected]>

* Change MSAA to only get applied at boot time.

Signed-off-by: Mike Balfour <[email protected]>

* Address PR feedback

Signed-off-by: Mike Balfour <[email protected]>

---------

Signed-off-by: Mike Balfour <[email protected]>
Mike Balfour 2 년 전
부모
커밋
53f7ec6f26

+ 154 - 18
Gem/Code/Source/Components/UI/UiSettingsComponent.cpp

@@ -6,6 +6,7 @@
  */
 
 #include <Atom/RHI/Factory.h>
+#include <Atom/RHI/FactoryManagerBus.h>
 #include <AzCore/Interface/Interface.h>
 #include <AzCore/Serialization/EditContext.h>
 #include <LyShine/Bus/UiButtonBus.h>
@@ -49,9 +50,14 @@ namespace MultiplayerSample
                 ->Version(0)
                 ->Field("GraphicsApi", &UiSettingsComponent::m_graphicsApiToggle)
                 ->Field("TextureQuality", &UiSettingsComponent::m_textureQualityToggle)
-                ->Field("MasterVolume", &UiSettingsComponent::m_masterVolumeToggle)
                 ->Field("Fullscreen", &UiSettingsComponent::m_fullscreenToggle)
                 ->Field("Resolution", &UiSettingsComponent::m_resolutionToggle)
+                ->Field("Reflection", &UiSettingsComponent::m_reflectionToggle)
+                ->Field("MSAA", &UiSettingsComponent::m_msaaToggle)
+                ->Field("TAA", &UiSettingsComponent::m_taaToggle)
+                ->Field("MasterVolume", &UiSettingsComponent::m_masterVolumeToggle)
+                ->Field("MusicVolume", &UiSettingsComponent::m_musicVolumeToggle)
+                ->Field("SfxVolume", &UiSettingsComponent::m_sfxVolumeToggle)
                 ;
 
             if (AZ::EditContext* editContext = serializeContext->GetEditContext())
@@ -61,9 +67,14 @@ namespace MultiplayerSample
                     ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC_CE("CanvasUI"))
                     ->DataElement(AZ::Edit::UIHandlers::Default, &UiSettingsComponent::m_graphicsApiToggle, "Graphics Api", "The Graphics Api toggle elements.")
                     ->DataElement(AZ::Edit::UIHandlers::Default, &UiSettingsComponent::m_textureQualityToggle, "Texture Quality", "The Texture Quality toggle elements.")
-                    ->DataElement(AZ::Edit::UIHandlers::Default, &UiSettingsComponent::m_masterVolumeToggle, "Master Volume", "The Master Volume toggle elements.")
                     ->DataElement(AZ::Edit::UIHandlers::Default, &UiSettingsComponent::m_fullscreenToggle, "Fullscreen", "The Fullscreen toggle elements.")
                     ->DataElement(AZ::Edit::UIHandlers::Default, &UiSettingsComponent::m_resolutionToggle, "Resolution", "The Resolution toggle elements.")
+                    ->DataElement(AZ::Edit::UIHandlers::Default, &UiSettingsComponent::m_reflectionToggle, "Reflection", "The Reflection toggle elements.")
+                    ->DataElement(AZ::Edit::UIHandlers::Default, &UiSettingsComponent::m_msaaToggle, "MSAA", "The MSAA toggle elements.")
+                    ->DataElement(AZ::Edit::UIHandlers::Default, &UiSettingsComponent::m_taaToggle, "TAA", "The TAA toggle elements.")
+                    ->DataElement(AZ::Edit::UIHandlers::Default, &UiSettingsComponent::m_masterVolumeToggle, "Master Volume", "The Master Volume toggle elements.")
+                    ->DataElement(AZ::Edit::UIHandlers::Default, &UiSettingsComponent::m_musicVolumeToggle, "Music Volume", "The Music Volume toggle elements.")
+                    ->DataElement(AZ::Edit::UIHandlers::Default, &UiSettingsComponent::m_sfxVolumeToggle, "SFX Volume", "The SFX Volume toggle elements.")
                     ;
             }
         }
@@ -93,9 +104,16 @@ namespace MultiplayerSample
         // Initialize the toggles to the current values
         InitializeToggle(m_graphicsApiToggle, OnGraphicsApiToggle);
         InitializeToggle(m_textureQualityToggle, OnTextureQualityToggle);
-        InitializeToggle(m_masterVolumeToggle, OnMasterVolumeToggle);
         InitializeToggle(m_fullscreenToggle, OnFullscreenToggle);
         InitializeToggle(m_resolutionToggle, OnResolutionToggle);
+
+        InitializeToggle(m_reflectionToggle, OnReflectionToggle);
+        InitializeToggle(m_msaaToggle, OnMsaaToggle);
+        InitializeToggle(m_taaToggle, OnTaaToggle);
+
+        InitializeToggle(m_masterVolumeToggle, OnMasterVolumeToggle);
+        InitializeToggle(m_musicVolumeToggle, OnMusicVolumeToggle);
+        InitializeToggle(m_sfxVolumeToggle, OnSfxVolumeToggle);
     }
 
     void UiSettingsComponent::Deactivate()
@@ -151,14 +169,41 @@ namespace MultiplayerSample
 
     void UiSettingsComponent::OnGraphicsApiToggle(UiToggle& toggle, ToggleDirection toggleDirection)
     {
-        // This list is expected to match the values in AZ::RHI::ApiIndex.
-        constexpr auto valuesToLabels = AZStd::to_array<AZStd::pair<AZStd::string_view, AZStd::string_view>>(
+        // Build up a list of supported graphics APIs dynamically the first time we're called.
+        static AZStd::vector<AZStd::pair<AZStd::string_view, AZStd::string_view>> valuesToLabels;
+        if (valuesToLabels.empty())
         {
-            { "null", "Null" },
-            { "dx12", "DirectX 12" },
-            { "vulkan", "Vulkan" },
-            { "metal", "Metal" }
-        });
+            // Create a list of Graphics APIs supported on this platform.
+            AZ::RHI::FactoryManagerBus::Broadcast(&AZ::RHI::FactoryManagerRequest::EnumerateFactories,
+                [](AZ::RHI::Factory* factory) -> bool
+                {
+                    auto name = factory->GetName().GetStringView();
+                    if (name == "null")
+                    {
+                        // Remove the Null API choice from the list. It's not something end users should want to choose.
+                    }
+                    else if (name == "dx12")
+                    {
+                        valuesToLabels.emplace_back(name, "DirectX 12");
+                    }
+                    else if (name == "vulkan")
+                    {
+                        valuesToLabels.emplace_back(name, "Vulkan");
+                    }
+                    else if (name == "metal")
+                    {
+                        valuesToLabels.emplace_back(name, "Metal");
+                    }
+                    else
+                    {
+                        // This is an unexpected API, use whatever name is provided as the display name.
+                        valuesToLabels.emplace_back(name, name);
+                    }
+
+                    // Keep enumerating through the full set.
+                    return true;
+                });
+        }
 
         // Get the current api selection.
         AZStd::string graphicsApi;
@@ -211,7 +256,98 @@ namespace MultiplayerSample
         MultiplayerSampleUserSettingsRequestBus::Broadcast(&MultiplayerSampleUserSettingsRequestBus::Events::Save);
     }
 
+    void UiSettingsComponent::OnReflectionToggle(UiToggle& toggle, ToggleDirection toggleDirection)
+    {
+        constexpr auto valuesToLabels = AZStd::to_array<AZStd::pair<SpecularReflections, AZStd::string_view>>(
+            {
+                { SpecularReflections::None, "None" },
+                { SpecularReflections::ScreenSpace, "Screen Space" },
+
+                // This choice can be enabled once raytraced reflections are considered stable.
+                //{ SpecularReflections::ScreenSpaceAndRaytracing, "Hybrid Raytraced" },
+            });
+
+        // Get the current reflection value.
+        SpecularReflections reflectionType = SpecularReflections::None;
+        MultiplayerSampleUserSettingsRequestBus::BroadcastResult(
+            reflectionType, &MultiplayerSampleUserSettingsRequestBus::Events::GetReflectionSetting);
+
+        // Rotate the index based on toggle direction.
+        uint32_t index = GetRotatedIndex<SpecularReflections>(valuesToLabels, reflectionType, toggleDirection);
+
+        UiTextBus::Event(toggle.m_labelEntity, &UiTextInterface::SetText, valuesToLabels[index].second);
+
+        MultiplayerSampleUserSettingsRequestBus::Broadcast(
+            &MultiplayerSampleUserSettingsRequestBus::Events::SetReflectionSetting, valuesToLabels[index].first);
+
+        MultiplayerSampleUserSettingsRequestBus::Broadcast(&MultiplayerSampleUserSettingsRequestBus::Events::Save);
+    }
+
+    void UiSettingsComponent::OnMsaaToggle(UiToggle& toggle, ToggleDirection toggleDirection)
+    {
+        constexpr auto valuesToLabels = AZStd::to_array<AZStd::pair<Msaa, AZStd::string_view>>(
+            {
+                { Msaa::X1, "1x" },
+                { Msaa::X2, "2x" },
+                { Msaa::X4, "4x" },
+            });
+
+        // Get the current msaa value.
+        Msaa msaa = Msaa::X1;
+        MultiplayerSampleUserSettingsRequestBus::BroadcastResult(
+            msaa, &MultiplayerSampleUserSettingsRequestBus::Events::GetMsaa);
+
+        // Rotate the index based on toggle direction.
+        uint32_t index = GetRotatedIndex<Msaa>(valuesToLabels, msaa, toggleDirection);
+
+        UiTextBus::Event(toggle.m_labelEntity, &UiTextInterface::SetText, valuesToLabels[index].second);
+
+        MultiplayerSampleUserSettingsRequestBus::Broadcast(
+            &MultiplayerSampleUserSettingsRequestBus::Events::SetMsaa, valuesToLabels[index].first);
+
+        MultiplayerSampleUserSettingsRequestBus::Broadcast(&MultiplayerSampleUserSettingsRequestBus::Events::Save);
+    }
+
+    void UiSettingsComponent::OnTaaToggle(UiToggle& toggle, ToggleDirection toggleDirection)
+    {
+        constexpr auto valuesToLabels = AZStd::to_array<AZStd::pair<bool, AZStd::string_view>>(
+            {
+                { false, "Off" },
+                { true, "On" },
+            });
+
+        // Get the current TAA value.
+        bool enabled = false;
+        MultiplayerSampleUserSettingsRequestBus::BroadcastResult(
+            enabled, &MultiplayerSampleUserSettingsRequestBus::Events::GetTaa);
+
+        // Rotate the index based on toggle direction.
+        uint32_t index = GetRotatedIndex<bool>(valuesToLabels, enabled, toggleDirection);
+
+        UiTextBus::Event(toggle.m_labelEntity, &UiTextInterface::SetText, valuesToLabels[index].second);
+
+        MultiplayerSampleUserSettingsRequestBus::Broadcast(
+            &MultiplayerSampleUserSettingsRequestBus::Events::SetTaa, valuesToLabels[index].first);
+
+        MultiplayerSampleUserSettingsRequestBus::Broadcast(&MultiplayerSampleUserSettingsRequestBus::Events::Save);
+    }
+
     void UiSettingsComponent::OnMasterVolumeToggle(UiToggle& toggle, ToggleDirection toggleDirection)
+    {
+        OnVolumeToggle(VolumeChannel::MasterVolume, toggle, toggleDirection);
+    }
+
+    void UiSettingsComponent::OnMusicVolumeToggle(UiToggle& toggle, ToggleDirection toggleDirection)
+    {
+        OnVolumeToggle(VolumeChannel::MusicVolume, toggle, toggleDirection);
+    }
+
+    void UiSettingsComponent::OnSfxVolumeToggle(UiToggle& toggle, ToggleDirection toggleDirection)
+    {
+        OnVolumeToggle(VolumeChannel::SfxVolume, toggle, toggleDirection);
+    }
+
+    void UiSettingsComponent::OnVolumeToggle(VolumeChannel volumeChannel, UiToggle& toggle, ToggleDirection toggleDirection)
     {
         constexpr auto valuesToLabels = AZStd::to_array<AZStd::pair<uint8_t, AZStd::string_view>>(
         {
@@ -228,21 +364,21 @@ namespace MultiplayerSample
             { aznumeric_cast<uint8_t>(100), "100 (max)" },
         });
 
-        // Get the current master volume value.
-        uint8_t masterVolume = 0;
+        // Get the current volume value.
+        uint8_t volume = 0;
         MultiplayerSampleUserSettingsRequestBus::BroadcastResult(
-            masterVolume, &MultiplayerSampleUserSettingsRequestBus::Events::GetMasterVolume);
+            volume, &MultiplayerSampleUserSettingsRequestBus::Events::GetVolume, volumeChannel);
 
-        // Make sure our master volume is a multiple of 10.
-        masterVolume = (masterVolume / 10) * 10;
+        // Make sure our volume is a multiple of 10.
+        volume = (volume / 10) * 10;
 
         // Rotate the index based on toggle direction.
-        uint32_t masterVolumeIndex = GetRotatedIndex<uint8_t>(valuesToLabels, masterVolume, toggleDirection);
+        uint32_t volumeIndex = GetRotatedIndex<uint8_t>(valuesToLabels, volume, toggleDirection);
 
-        UiTextBus::Event(toggle.m_labelEntity, &UiTextInterface::SetText, valuesToLabels[masterVolumeIndex].second);
+        UiTextBus::Event(toggle.m_labelEntity, &UiTextInterface::SetText, valuesToLabels[volumeIndex].second);
 
         MultiplayerSampleUserSettingsRequestBus::Broadcast(
-            &MultiplayerSampleUserSettingsRequestBus::Events::SetMasterVolume, valuesToLabels[masterVolumeIndex].first);
+            &MultiplayerSampleUserSettingsRequestBus::Events::SetVolume, volumeChannel, valuesToLabels[volumeIndex].first);
 
         MultiplayerSampleUserSettingsRequestBus::Broadcast(&MultiplayerSampleUserSettingsRequestBus::Events::Save);
     }

+ 16 - 1
Gem/Code/Source/Components/UI/UiSettingsComponent.h

@@ -10,6 +10,8 @@
 
 #include <AzCore/Component/Component.h>
 #include <AzFramework/Windowing/WindowBus.h>
+#include <Source/UserSettings/MultiplayerSampleUserSettings.h>
+
 
 namespace MultiplayerSample
 {
@@ -56,8 +58,14 @@ namespace MultiplayerSample
         static void OnGraphicsApiToggle(UiToggle& toggle, ToggleDirection toggleDirection);
         static void OnTextureQualityToggle(UiToggle& toggle, ToggleDirection toggleDirection);
         static void OnMasterVolumeToggle(UiToggle& toggle, ToggleDirection toggleDirection);
+        static void OnMusicVolumeToggle(UiToggle& toggle, ToggleDirection toggleDirection);
+        static void OnSfxVolumeToggle(UiToggle& toggle, ToggleDirection toggleDirection);
+        static void OnVolumeToggle(VolumeChannel volumeChannel, UiToggle& toggle, ToggleDirection toggleDirection);
         static void OnFullscreenToggle(UiToggle& toggle, ToggleDirection toggleDirection);
         static void OnResolutionToggle(UiToggle& toggle, ToggleDirection toggleDirection);
+        static void OnReflectionToggle(UiToggle& toggle, ToggleDirection toggleDirection);
+        static void OnMsaaToggle(UiToggle& toggle, ToggleDirection toggleDirection);
+        static void OnTaaToggle(UiToggle& toggle, ToggleDirection toggleDirection);
 
         template<typename ValueType>
         static uint32_t GetRotatedIndex(
@@ -66,8 +74,15 @@ namespace MultiplayerSample
 
         UiToggle m_graphicsApiToggle;
         UiToggle m_textureQualityToggle;
-        UiToggle m_masterVolumeToggle;
         UiToggle m_fullscreenToggle;
         UiToggle m_resolutionToggle;
+
+        UiToggle m_reflectionToggle;
+        UiToggle m_msaaToggle;
+        UiToggle m_taaToggle;
+
+        UiToggle m_masterVolumeToggle;
+        UiToggle m_musicVolumeToggle;
+        UiToggle m_sfxVolumeToggle;
     };
 }

+ 8 - 1
Gem/Code/Source/MultiplayerSampleSystemComponent.cpp

@@ -17,6 +17,7 @@
 #include <Source/Components/NetworkStressTestComponent.h>
 #include <Source/Components/NetworkAiComponent.h>
 #include <Source/Effects/GameEffect.h>
+#include <Source/UserSettings/MultiplayerSampleUserSettings.h>
 #include <Multiplayer/Components/NetBindComponent.h>
 
 #include <AzFramework/Scene/Scene.h>
@@ -89,7 +90,9 @@ namespace MultiplayerSample
 
     void MultiplayerSampleSystemComponent::GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent)
     {
-        AZ_UNUSED(dependent);
+        // We're dependent on this to start first so that we can apply the MSAA setting at the correct point in the boot process.
+        // If we're ever able to apply the MSAA setting at runtime, this can get removed, along with the call to ApplyMsaaSetting().
+        dependent.push_back(AZ_CRC_CE("AzFrameworkConfigurationSystemComponentService"));
     }
 
     void MultiplayerSampleSystemComponent::Init()
@@ -101,6 +104,10 @@ namespace MultiplayerSample
     {
         //! Register our gems multiplayer components to assign NetComponentIds
         RegisterMultiplayerComponents();
+
+        // Tell the user settings that this is the correct point in the boot process to apply the MSAA setting.
+        MultiplayerSampleUserSettingsRequestBus::Broadcast(
+            &MultiplayerSampleUserSettingsRequestBus::Events::ApplyMsaaSetting);
     }
 
     void MultiplayerSampleSystemComponent::Deactivate()

+ 340 - 209
Gem/Code/Source/UserSettings/MultiplayerSampleUserSettings.cpp

@@ -9,15 +9,19 @@
 #include <Atom/RPI.Public/Image/ImageSystem.h>
 #include <Atom/RPI.Public/Image/StreamingImage.h>
 #include <Atom/RPI.Public/Image/StreamingImagePool.h>
+#include <Atom/RPI.Public/Pass/PassFilter.h>
 #include <Atom/RPI.Public/RenderPipeline.h>
 #include <Atom/RPI.Public/RPISystemInterface.h>
+#include <Atom/RPI.Public/Scene.h>
 #include <Atom/Bootstrap/DefaultWindowBus.h>
+#include <Atom/Feature/SpecularReflections/SpecularReflectionsFeatureProcessorInterface.h>
 
 #include <AzCore/Console/IConsole.h>
 #include <AzCore/IO/GenericStreams.h>
 #include <AzCore/Settings/SettingsRegistry.h>
 #include <AzCore/Settings/SettingsRegistryMergeUtils.h>
 #include <AzCore/Utils/Utils.h>
+#include <AzFramework/Entity/GameEntityContextBus.h>
 #include <AzFramework/FileFunc/FileFunc.h>
 #include <AzFramework/Windowing/WindowBus.h>
 #include <IAudioSystem.h>
@@ -26,22 +30,49 @@
 namespace MultiplayerSample
 {
     static constexpr const char* DefaultGraphicsApi = "";       // default to the platform-specific default graphics API
-    static constexpr AZ::u64 DefaultMasterVolume = 100;         // default to full volume (100)
+    static constexpr AZ::u64 DefaultVolume[VolumeChannel::Max] =
+    {
+        100,         // MasterVolume: default to full volume (100)
+        100,         // MusicVolume: default to full volume (100)
+        100,         // SfxVolume: default to full volume (100)
+    };
     static constexpr AZ::s64 DefaultTextureQuality = 1;         // default to one mip level below highest.
     static constexpr bool DefaultFullscreenMode = false;        // default to windowed
     static constexpr AZ::u64 DefaultResolutionWidth = 1920;     // default to 1080p
     static constexpr AZ::u64 DefaultResolutionHeight = 1080;    // default to 1080p
+    static constexpr SpecularReflections DefaultReflectionType = SpecularReflections::None;   // default to no reflections
+    static constexpr Msaa DefaultMsaa = Msaa::X2;               // default to 2x MSAA
+    static constexpr bool DefaultTaa = true;                    // default to TAA enabled
+
+    using FixedString = AZStd::fixed_string<256>;
 
+    // The base registry key that all our user settings will live underneath.
+    // We keep them separate from the rest of the registry hierarchy to ensure that users can't
+    // edit their settings file by hand to overwrite any other registry keys that weren't intentionally exposed.
+    static constexpr FixedString BaseRegistryKey = "/O3DE/MultiplayerSample/User/Settings";
 
+    // These keep track of the specific registry keys used for each setting.
+    static constexpr FixedString GraphicsApiKey(BaseRegistryKey + FixedString("/ApiName"));
+    static constexpr FixedString TextureQualityKey(BaseRegistryKey + FixedString("/TextureQuality"));
+    static constexpr FixedString VolumeKey[VolumeChannel::Max]
+    {
+            BaseRegistryKey + FixedString("/MasterVolume"),
+            BaseRegistryKey + FixedString("/MusicVolume"),
+            BaseRegistryKey + FixedString("/SfxVolume"),
+    };
+    static constexpr FixedString FullscreenKey(BaseRegistryKey + FixedString("/Fullscreen"));
+    static constexpr FixedString ResolutionWidthKey(BaseRegistryKey + FixedString("/Resolution/Width"));
+    static constexpr FixedString ResolutionHeightKey(BaseRegistryKey + FixedString("/Resolution/Height"));
+    static constexpr FixedString ReflectionSettingKey(BaseRegistryKey + FixedString("/Reflections"));
+    static constexpr FixedString MsaaKey(BaseRegistryKey + FixedString("/MSAA"));
+    static constexpr FixedString TaaKey(BaseRegistryKey + FixedString("/TAA"));
 
     MultiplayerSampleUserSettings::MultiplayerSampleUserSettings()
-        : m_graphicsApiKey(BaseRegistryKey + FixedString("/ApiName"))
-        , m_masterVolumeKey(BaseRegistryKey + FixedString("/MasterVolume"))
-        , m_textureQualityKey(BaseRegistryKey + FixedString("/TextureQuality"))
-        , m_fullscreenKey(BaseRegistryKey + FixedString("/Fullscreen"))
-        , m_resolutionWidthKey(BaseRegistryKey + FixedString("/Resolution/Width"))
-        , m_resolutionHeightKey(BaseRegistryKey + FixedString("/Resolution/Height"))
     {
+        m_registry = AZ::SettingsRegistry::Get();
+        AZ_Assert(m_registry, "Initialization order incorrect, MultiplayerSampleUserSettings has somehow started before "
+            "the Settings Registry. Initial settings won't get applied correctly.");
+
         MultiplayerSampleUserSettingsRequestBus::Handler::BusConnect();
 
         // Create a full path including filename for the user settings file.
@@ -55,159 +86,268 @@ namespace MultiplayerSample
 
     MultiplayerSampleUserSettings::~MultiplayerSampleUserSettings()
     {
+        AZ::Render::Bootstrap::NotificationBus::Handler::BusDisconnect();
         MultiplayerSampleUserSettingsRequestBus::Handler::BusDisconnect();
 
         // Always auto-save the user settings on destruction.
         Save();
     }
 
-    void MultiplayerSampleUserSettings::Load()
+    void MultiplayerSampleUserSettings::ApplyMsaaSetting()
     {
-        if (auto* registry = AZ::SettingsRegistry::Get(); registry != nullptr)
-        {
-            // Read the setreg file from a loose file into a string in memory. This isn't technically a "cfg" file,
-            // but the method does the exact set of steps needed here to read a loose file into memory, so even though
-            // it has a slightly misleading name, it keeps us from duplicating the code.
-            AZ::Outcome<AZStd::string, AZStd::string> userSettings = 
-                AzFramework::FileFunc::GetCfgFileContents(AZStd::string(m_userSettingsPath.FixedMaxPathString()));
+        // To apply the MSAA setting at the correct point in the boot process, we need to wait until the bootstrap scene is ready.
+        // To listen for that, we need to connect to the Bootstrap::NotificationBus. However, we can't connect to that bus until
+        // the scene system and main scene are created, which happens in the activation of the AzFrameworkConfigurationSystemComponent.
 
-            if (userSettings.IsSuccess())
-            {
-                // Merge the user settings file under the base "/O3DE/MultiplayerSample/User/Settings" key.
-                // This will ensure that it cannot overwrite any other engine settings.
-                // MergeSettings() is used here instead of MergeSettingsFile() because MergeSettingsFile() uses
-                // FileIOBase to read in the file, which will attempt to read it from a PAK file in PAK file builds.
-                // Our settings file will always be a loose file, so we instead read it into a buffer beforehand and then
-                // apply it here from the in-memory buffer.
-                [[maybe_unused]] auto mergeSuccess = registry->MergeSettings(userSettings.GetValue(),
-                    AZ::SettingsRegistryInterface::Format::JsonMergePatch, BaseRegistryKey);
-
-                AZ_Error("UserSettings", mergeSuccess, "Failed to merge user settings into the O3DE registry.");
-            }
+        // So, we'll have the MultiplayerSampleSystemComponent depend on the AzFrameworkConfigurationSystemComponent, then on 
+        // activation, call ApplyMsaaSetting(), which tells us to connect to the Bootstrap::NotificationBus, which then will tell
+        // us when the bootstrap scene is ready so that we can apply the MSAA setting.
 
-            // Get the current settings values or the defaults if the keys don't exist.
-            AZStd::string apiName = GetGraphicsApi();
-            uint8_t masterVolume = GetMasterVolume();
-            int16_t textureQuality = GetTextureQuality();
-            bool fullscreen = GetFullscreen();
-            AZStd::pair<uint32_t, uint32_t> resolution = GetResolution();
-
-            // Set the settings values, which will notify the engine as well as write the keys back into the registry.
-            SetGraphicsApi(apiName);
-            SetMasterVolume(masterVolume);
-            SetTextureQuality(textureQuality);
-            SetFullscreen(fullscreen);
-            SetResolution(resolution);
+        // If we're ever able to change the MSAA setting at runtime, we can remove this entire flow and just call 
+        // SetMsaaInRenderer() from the SetMsaa() call.
+
+        AZ::Render::Bootstrap::NotificationBus::Handler::BusConnect();
+    }
+
+    void MultiplayerSampleUserSettings::OnBootstrapSceneReady([[maybe_unused]] AZ::RPI::Scene* bootstrapScene)
+    {
+        // Only set the MSAA setting at boot time. Changing it at runtime can lead to crashes.
+        SetMsaaInRenderer(GetMsaa());
+    }
+
+    void MultiplayerSampleUserSettings::Load()
+    {
+        // Read the setreg file from a loose file into a string in memory. This isn't technically a "cfg" file,
+        // but the method does the exact set of steps needed here to read a loose file into memory, so even though
+        // it has a slightly misleading name, it keeps us from duplicating the code.
+        AZ::Outcome<AZStd::string, AZStd::string> userSettings = 
+            AzFramework::FileFunc::GetCfgFileContents(AZStd::string(m_userSettingsPath.FixedMaxPathString()));
+
+        if (userSettings.IsSuccess())
+        {
+            // Merge the user settings file under the base "/O3DE/MultiplayerSample/User/Settings" key.
+            // This will ensure that it cannot overwrite any other engine settings.
+            // MergeSettings() is used here instead of MergeSettingsFile() because MergeSettingsFile() uses
+            // FileIOBase to read in the file, which will attempt to read it from a PAK file in PAK file builds.
+            // Our settings file will always be a loose file, so we instead read it into a buffer beforehand and then
+            // apply it here from the in-memory buffer.
+            [[maybe_unused]] auto mergeSuccess = m_registry->MergeSettings(userSettings.GetValue(),
+                AZ::SettingsRegistryInterface::Format::JsonMergePatch, BaseRegistryKey);
+
+            AZ_Error("UserSettings", mergeSuccess, "Failed to merge user settings into the O3DE registry.");
         }
+
+        // Get the current settings values (or the defaults if the keys don't exist) and pass the values back
+        // in to set the settings values, which will notify the engine as well as write the keys back into the registry.
+        SetGraphicsApi(GetGraphicsApi());
+        SetVolume(VolumeChannel::MasterVolume, GetVolume(VolumeChannel::MasterVolume));
+        SetVolume(VolumeChannel::MusicVolume, GetVolume(VolumeChannel::MusicVolume));
+        SetVolume(VolumeChannel::SfxVolume, GetVolume(VolumeChannel::SfxVolume));
+        SetTextureQuality(GetTextureQuality());
+        SetFullscreen(GetFullscreen());
+        SetResolution(GetResolution());
+        SetReflectionSetting(GetReflectionSetting());
+        SetMsaa(GetMsaa());
+        SetTaa(GetTaa());
     }
 
     AZStd::string MultiplayerSampleUserSettings::GetGraphicsApi()
     {
         // Default to an empty string, which will just use the default API.
         AZStd::string apiName = DefaultGraphicsApi;
-
-        if (auto* registry = AZ::SettingsRegistry::Get(); registry != nullptr)
-        {
-            registry->Get(apiName, m_graphicsApiKey.c_str());
-        }
+        m_registry->Get(apiName, GraphicsApiKey.c_str());
 
         return apiName;
     }
 
     void MultiplayerSampleUserSettings::SetGraphicsApi(const AZStd::string& apiName)
     {
-        if (auto* registry = AZ::SettingsRegistry::Get(); registry != nullptr)
+        // Set the requested api name as the highest (and only) user priority in the registry.
+        // Atom will select this api at startup as long as it exists and nothing was passed in via command-line.
+        // If the passed-in apiName is empty, just let Atom use its standard default priorities for api selection.
+        // If the passed-in apiName doesn't match one supported by Atom on this platform, Atom will ignore it and use
+        // its standard default priorities as well.
+        if (!apiName.empty())
         {
-            // Set the requested api name as the highest (and only) user priority in the registry.
-            // Atom will select this api at startup as long as it exists and nothing was passed in via command-line.
-            // If the passed-in apiName is empty, just let Atom use its standard default priorities for api selection.
-            // If the passed-in apiName doesn't match one supported by Atom on this platform, Atom will ignore it and use
-            // its standard default priorities as well.
-            if (!apiName.empty())
-            {
-                AZStd::vector<AZStd::string> factoriesPriority;
-                factoriesPriority.emplace_back(apiName);
-                registry->SetObject("/O3DE/Atom/RHI/FactoryManager/factoriesPriority", factoriesPriority);
-            }
-
-            registry->Set(m_graphicsApiKey.c_str(), apiName);
+            AZStd::vector<AZStd::string> factoriesPriority;
+            factoriesPriority.emplace_back(apiName);
+            m_registry->SetObject("/O3DE/Atom/RHI/FactoryManager/factoriesPriority", factoriesPriority);
         }
+
+        m_registry->Set(GraphicsApiKey.c_str(), apiName);
     }
 
-    uint8_t MultiplayerSampleUserSettings::GetMasterVolume()
+    uint8_t MultiplayerSampleUserSettings::GetVolume(VolumeChannel volumeChannel)
     {
         // Default to full volume (100)
-        AZ::u64 masterVolume = DefaultMasterVolume;
-
-        if (auto* registry = AZ::SettingsRegistry::Get(); registry != nullptr)
-        {
-            registry->Get(masterVolume, m_masterVolumeKey.c_str());
-        }
+        AZ::u64 masterVolume = DefaultVolume[volumeChannel];
+        m_registry->Get(masterVolume, VolumeKey[volumeChannel].c_str());
 
         // Make sure any hand-edited registry values stay within a valid range.
         return AZStd::clamp(aznumeric_cast<uint8_t>(masterVolume), aznumeric_cast<uint8_t>(0), aznumeric_cast<uint8_t>(100));
     }
 
-    void MultiplayerSampleUserSettings::SetMasterVolume(uint8_t masterVolume)
+    void MultiplayerSampleUserSettings::SetVolume(VolumeChannel volumeChannel, uint8_t masterVolume)
     {
-        if (auto* registry = AZ::SettingsRegistry::Get(); registry != nullptr)
+        // Send a request to the audio system to change the volume.
+        auto audioSystem = AZ::Interface<Audio::IAudioSystem>::Get();
+        if (audioSystem)
         {
-            // Send a request to the audio system to change the master volume.
-            auto audioSystem = AZ::Interface<Audio::IAudioSystem>::Get();
-            if (audioSystem)
+            static constexpr const char* volumeIds[] =
             {
-                Audio::TAudioObjectID rtpcId = audioSystem->GetAudioRtpcID("Volume_Master");
+                "Volume_Master",
+                "Volume_Music",
+                "Volume_SFX",
+            };
 
-                if (rtpcId != INVALID_AUDIO_CONTROL_ID)
-                {
-                    Audio::ObjectRequest::SetParameterValue setParameter;
-                    setParameter.m_audioObjectId = INVALID_AUDIO_OBJECT_ID;
-                    setParameter.m_parameterId = rtpcId;
-                    // Master volume in the audio system is expected to be 0.0 (min) - 1.0 (max), but we're using 0 - 100 as integers,
-                    // so convert it from 0 - 100 to the 0 - 1 range.
-                    setParameter.m_value = masterVolume / 100.0f;
-                    AZ::Interface<Audio::IAudioSystem>::Get()->PushRequest(AZStd::move(setParameter));
-                }
-            }
+            Audio::TAudioObjectID rtpcId = audioSystem->GetAudioRtpcID(volumeIds[volumeChannel]);
 
-            registry->Set(m_masterVolumeKey.c_str(), aznumeric_cast<AZ::u64>(masterVolume));
+            if (rtpcId != INVALID_AUDIO_CONTROL_ID)
+            {
+                Audio::ObjectRequest::SetParameterValue setParameter;
+                setParameter.m_audioObjectId = INVALID_AUDIO_OBJECT_ID;
+                setParameter.m_parameterId = rtpcId;
+                // Volume in the audio system is expected to be 0.0 (min) - 1.0 (max), but we're using 0 - 100 as integers,
+                // so convert it from 0 - 100 to the 0 - 1 range.
+                setParameter.m_value = masterVolume / 100.0f;
+                AZ::Interface<Audio::IAudioSystem>::Get()->PushRequest(AZStd::move(setParameter));
+            }
         }
+
+        m_registry->Set(VolumeKey[volumeChannel].c_str(), aznumeric_cast<AZ::u64>(masterVolume));
     }
 
     int16_t MultiplayerSampleUserSettings::GetTextureQuality()
     {
         AZ::s64 textureQuality = DefaultTextureQuality;
+        m_registry->Get(textureQuality, TextureQualityKey.c_str());
 
-        if (auto* registry = AZ::SettingsRegistry::Get(); registry != nullptr)
+        return AZStd::clamp(aznumeric_cast<int16_t>(textureQuality), aznumeric_cast<int16_t>(0), aznumeric_cast<int16_t>(10));
+    }
+
+    void MultiplayerSampleUserSettings::SetTextureQuality(int16_t textureQuality)
+    {
+        if (auto* imageSystem = AZ::RPI::ImageSystemInterface::Get())
         {
-            registry->Get(textureQuality, m_textureQualityKey.c_str());
+            AZ::Data::Instance<AZ::RPI::StreamingImagePool> pool = imageSystem->GetSystemStreamingPool();
+            pool->SetMipBias(textureQuality);
         }
 
-        return AZStd::clamp(aznumeric_cast<int16_t>(textureQuality), aznumeric_cast<int16_t>(0), aznumeric_cast<int16_t>(10));
+        m_registry->Set(TextureQualityKey.c_str(), aznumeric_cast<AZ::s64>(textureQuality));
     }
 
-    void MultiplayerSampleUserSettings::SetTextureQuality(int16_t textureQuality)
+    SpecularReflections MultiplayerSampleUserSettings::GetReflectionSetting()
+    {
+        AZ::u64 reflectionType = static_cast<AZ::u64>(DefaultReflectionType);
+        m_registry->Get(reflectionType, ReflectionSettingKey.c_str());
+
+        return static_cast<SpecularReflections>(reflectionType);
+    }
+
+    void MultiplayerSampleUserSettings::SetReflectionSetting(SpecularReflections reflectionType)
     {
-        if (auto* registry = AZ::SettingsRegistry::Get(); registry != nullptr)
+        // Only try to set the settings if the scene system is active.
+        // If we try to set it too early, it will assert / crash.
+        if (AzFramework::SceneSystemInterface::Get())
         {
-            if (auto* imageSystem = AZ::RPI::ImageSystemInterface::Get())
+            AzFramework::EntityContextId entityContextId;
+            AzFramework::GameEntityContextRequestBus::BroadcastResult(
+                entityContextId, &AzFramework::GameEntityContextRequestBus::Events::GetGameEntityContextId);
+
+            if (auto scene = AZ::RPI::Scene::GetSceneForEntityContextId(entityContextId); scene)
             {
-                AZ::Data::Instance<AZ::RPI::StreamingImagePool> pool = imageSystem->GetSystemStreamingPool();
-                pool->SetMipBias(textureQuality);
+                if (auto reflectionFeatureProcessor =
+                    scene->GetFeatureProcessor<AZ::Render::SpecularReflectionsFeatureProcessorInterface>(); reflectionFeatureProcessor)
+                {
+                    auto ssrOptions = reflectionFeatureProcessor->GetSSROptions();
+                    ssrOptions.m_enable = (reflectionType != SpecularReflections::None);
+                    ssrOptions.m_rayTracing = (reflectionType == SpecularReflections::ScreenSpaceAndRaytracing);
+                    reflectionFeatureProcessor->SetSSROptions(ssrOptions);
+                }
             }
+        }
+
+        m_registry->Set(ReflectionSettingKey.c_str(), aznumeric_cast<AZ::u64>(reflectionType));
+    }
+
+    Msaa MultiplayerSampleUserSettings::GetMsaa()
+    {
+        AZ::u64 msaa = static_cast<AZ::u64>(DefaultMsaa);
+        m_registry->Get(msaa, MsaaKey.c_str());
+
+        return static_cast<Msaa>(msaa);
+    }
 
-            registry->Set(m_textureQualityKey.c_str(), aznumeric_cast<AZ::s64>(textureQuality));
+    void MultiplayerSampleUserSettings::SetMsaaInRenderer(Msaa msaa)
+    {
+        if (auto rpiSystem = AZ::RPI::RPISystemInterface::Get(); rpiSystem)
+        {
+            auto multisampleState = rpiSystem->GetApplicationMultisampleState();
+            switch (msaa)
+            {
+            case Msaa::X1:
+                multisampleState.m_samples = 1;
+                break;
+            case Msaa::X2:
+                multisampleState.m_samples = 2;
+                break;
+            case Msaa::X4:
+                multisampleState.m_samples = 4;
+                break;
+            }
+            rpiSystem->SetApplicationMultisampleState(multisampleState);
         }
     }
 
-    bool MultiplayerSampleUserSettings::GetFullscreen()
+    void MultiplayerSampleUserSettings::SetMsaa(Msaa msaa)
     {
-        bool fullscreen = DefaultFullscreenMode;
+        // Currently MSAA settings don't get changed at runtime because they have the potential
+        // to cause a TDR graphics driver crash on at least Vulkan, maybe others.
+        // This might be the result of mixing PSOs between the msaa variant and the non-msaa variant in the same frame.
+        // Until the problem gets tracked down and resolved, we'll only set the MSAA setting in the renderer at boot time.
+        // If this ever gets fixed, the call to SetMsaaInRenderer() can get moved to here, and the extra flow handling to call
+        // it sooner can get removed.
+
+        m_registry->Set(MsaaKey.c_str(), aznumeric_cast<AZ::u64>(msaa));
+    }
+
+    bool MultiplayerSampleUserSettings::GetTaa()
+    {
+        bool enabled = DefaultTaa;
+        m_registry->Get(enabled, TaaKey.c_str());
+
+        return enabled;
+    }
 
-        if (auto* registry = AZ::SettingsRegistry::Get(); registry != nullptr)
+    void MultiplayerSampleUserSettings::SetTaa(bool enabled)
+    {
+        // Only try to set the settings if the scene system is active.
+        // If we try to set it too early, it will assert / crash.
+        if (AzFramework::SceneSystemInterface::Get())
         {
-            registry->Get(fullscreen, m_fullscreenKey.c_str());
+            AzFramework::EntityContextId entityContextId;
+            AzFramework::GameEntityContextRequestBus::BroadcastResult(
+                entityContextId, &AzFramework::GameEntityContextRequestBus::Events::GetGameEntityContextId);
+
+            if (auto scene = AZ::RPI::Scene::GetSceneForEntityContextId(entityContextId); scene)
+            {
+                AZ::RPI::PassFilter passFilter = AZ::RPI::PassFilter::CreateWithPassName(AZ::Name("TaaPass"), scene);
+                AZ::RPI::PassSystemInterface::Get()->ForEachPass(
+                    passFilter, [enabled](AZ::RPI::Pass* pass) -> AZ::RPI::PassFilterExecutionFlow
+                    {
+                        pass->SetEnabled(enabled);
+                        return AZ::RPI::PassFilterExecutionFlow::ContinueVisitingPasses;
+                    });
+
+                m_registry->Set(TaaKey.c_str(), enabled);
+            }
         }
+    }
+
+    bool MultiplayerSampleUserSettings::GetFullscreen()
+    {
+        bool fullscreen = DefaultFullscreenMode;
+        m_registry->Get(fullscreen, FullscreenKey.c_str());
 
         return fullscreen;
     }
@@ -222,67 +362,64 @@ namespace MultiplayerSample
             return;
         }
 
-        if (auto* registry = AZ::SettingsRegistry::Get(); registry != nullptr)
+        if (AZ::IConsole* console = AZ::Interface<AZ::IConsole>::Get(); console)
         {
-            if (AZ::IConsole* console = AZ::Interface<AZ::IConsole>::Get(); console)
-            {
-                AzFramework::NativeWindowHandle windowHandle = nullptr;
-                AzFramework::WindowSystemRequestBus::BroadcastResult(
-                    windowHandle,
-                    &AzFramework::WindowSystemRequestBus::Events::GetDefaultWindowHandle);
-
-                if (!windowHandle)
-                {
-                    // Initialize the fullscreen state via CVARs if we haven't created the window yet.
+            AzFramework::NativeWindowHandle windowHandle = nullptr;
+            AzFramework::WindowSystemRequestBus::BroadcastResult(
+                windowHandle,
+                &AzFramework::WindowSystemRequestBus::Events::GetDefaultWindowHandle);
 
-                    m_changingResolution = true;
+            if (!windowHandle)
+            {
+                // Initialize the fullscreen state via CVARs if we haven't created the window yet.
 
-                    AZ::CVarFixedString commandString = AZ::CVarFixedString::format("r_fullscreen %u", fullscreen ? 1 : 0);
-                    console->PerformCommand(commandString.c_str());
+                m_changingResolution = true;
 
-                    m_changingResolution = false;
-                }
-                else
-                {
-                    // Change the existing fullscreen state if the window already exists.
+                AZ::CVarFixedString commandString = AZ::CVarFixedString::format("r_fullscreen %u", fullscreen ? 1 : 0);
+                console->PerformCommand(commandString.c_str());
 
-                    bool isFullscreen = false;
-                    AzFramework::WindowRequestBus::EventResult(
-                        isFullscreen, windowHandle,
-                        &AzFramework::WindowRequestBus::Events::GetFullScreenState);
+                m_changingResolution = false;
+            }
+            else
+            {
+                // Change the existing fullscreen state if the window already exists.
 
-                    if (isFullscreen != fullscreen) 
-                    {
-                        m_changingResolution = true;
+                bool isFullscreen = false;
+                AzFramework::WindowRequestBus::EventResult(
+                    isFullscreen, windowHandle,
+                    &AzFramework::WindowRequestBus::Events::GetFullScreenState);
 
-                        AzFramework::WindowRequestBus::Event(
-                            windowHandle,
-                            &AzFramework::WindowRequestBus::Events::SetFullScreenState, fullscreen);
+                if (isFullscreen != fullscreen) 
+                {
+                    m_changingResolution = true;
 
-                        m_changingResolution = false;
-                    }
-                }
+                    AzFramework::WindowRequestBus::Event(
+                        windowHandle,
+                        &AzFramework::WindowRequestBus::Events::SetFullScreenState, fullscreen);
 
-                if (fullscreen)
-                {
-                    // Once Atom supports setting a rendering resolution to something other than the current window size,
-                    // this is where we'd want to make the appropriate API calls to change it when entering fullscreen mode.
-                    // Right now, fullscreen mode uses the full monitor resolution as Atom's resolution.
-                    // Ideally, we would like Atom to use the resolution that's set in the Resolution user setting regardless
-                    // of windowed or fullscreen, and would instead scale to fill the rullscreen real estate.
-                }
-                else
-                {
-                    // When leaving fullscreen, set the window resolution to the current requested resolution.
-                    // This is necessary because by default, leaving fullscreen will return the window back to its
-                    // pre-fullscreen state. But if we've changed the requested resolution between now and then, we
-                    // want to make sure we end up with a window that matches the currently-requested resolution instead.
-                    SetResolution(GetResolution());
+                    m_changingResolution = false;
                 }
             }
 
-            registry->Set(m_fullscreenKey.c_str(), fullscreen);
+            if (fullscreen)
+            {
+                // Once Atom supports setting a rendering resolution to something other than the current window size,
+                // this is where we'd want to make the appropriate API calls to change it when entering fullscreen mode.
+                // Right now, fullscreen mode uses the full monitor resolution as Atom's resolution.
+                // Ideally, we would like Atom to use the resolution that's set in the Resolution user setting regardless
+                // of windowed or fullscreen, and would instead scale to fill the rullscreen real estate.
+            }
+            else
+            {
+                // When leaving fullscreen, set the window resolution to the current requested resolution.
+                // This is necessary because by default, leaving fullscreen will return the window back to its
+                // pre-fullscreen state. But if we've changed the requested resolution between now and then, we
+                // want to make sure we end up with a window that matches the currently-requested resolution instead.
+                SetResolution(GetResolution());
+            }
         }
+
+        m_registry->Set(FullscreenKey.c_str(), fullscreen);
     }
 
     AZStd::pair<uint32_t, uint32_t> MultiplayerSampleUserSettings::GetResolution()
@@ -290,11 +427,8 @@ namespace MultiplayerSample
         AZ::u64 width = DefaultResolutionWidth;
         AZ::u64 height = DefaultResolutionHeight;
 
-        if (auto* registry = AZ::SettingsRegistry::Get(); registry != nullptr)
-        {
-            registry->Get(width, m_resolutionWidthKey.c_str());
-            registry->Get(height, m_resolutionHeightKey.c_str());
-        }
+        m_registry->Get(width, ResolutionWidthKey.c_str());
+        m_registry->Get(height, ResolutionHeightKey.c_str());
 
         return { aznumeric_cast<uint32_t>(width), aznumeric_cast<uint32_t>(height) };
     }
@@ -309,85 +443,82 @@ namespace MultiplayerSample
             return;
         }
 
-        if (auto* registry = AZ::SettingsRegistry::Get(); registry != nullptr)
+        if (AZ::IConsole* console = AZ::Interface<AZ::IConsole>::Get(); console)
         {
-            if (AZ::IConsole* console = AZ::Interface<AZ::IConsole>::Get(); console)
+            AzFramework::NativeWindowHandle windowHandle = nullptr;
+            AzFramework::WindowSystemRequestBus::BroadcastResult(
+                windowHandle,
+                &AzFramework::WindowSystemRequestBus::Events::GetDefaultWindowHandle);
+
+            if (!windowHandle)
             {
-                AzFramework::NativeWindowHandle windowHandle = nullptr;
-                AzFramework::WindowSystemRequestBus::BroadcastResult(
-                    windowHandle,
-                    &AzFramework::WindowSystemRequestBus::Events::GetDefaultWindowHandle);
+                // Initialize the resolution via CVARs if the window doesn't exist yet.
 
-                if (!windowHandle)
-                {
-                    // Initialize the resolution via CVARs if the window doesn't exist yet.
+                m_changingResolution = true;
 
-                    m_changingResolution = true;
+                AZ::CVarFixedString commandString = AZ::CVarFixedString::format("r_width %u", resolution.first);
+                console->PerformCommand(commandString.c_str());
 
-                    AZ::CVarFixedString commandString = AZ::CVarFixedString::format("r_width %u", resolution.first);
-                    console->PerformCommand(commandString.c_str());
+                commandString = AZ::CVarFixedString::format("r_height %u", resolution.second);
+                console->PerformCommand(commandString.c_str());
 
-                    commandString = AZ::CVarFixedString::format("r_height %u", resolution.second);
-                    console->PerformCommand(commandString.c_str());
+                m_changingResolution = false;
+            }
+            else
+            {
+                bool fullscreen = false;
+                AzFramework::WindowRequestBus::EventResult(
+                    fullscreen, windowHandle,
+                    &AzFramework::WindowRequestBus::Events::GetFullScreenState);
 
-                    m_changingResolution = false;
-                }
-                else
+                if (!fullscreen)
                 {
-                    bool fullscreen = false;
-                    AzFramework::WindowRequestBus::EventResult(
-                        fullscreen, windowHandle,
-                        &AzFramework::WindowRequestBus::Events::GetFullScreenState);
-
-                    if (!fullscreen)
-                    {
-                        // If the window exists, and isn't in fullscreen mode, resize it to the requested resolution.
-                        // To prevent people from getting into a bad state, also clamp the resolution to the maximum
-                        // resolution that fits on the current monitor.
-
-                        auto maxResolution = GetMaxResolution();
+                    // If the window exists, and isn't in fullscreen mode, resize it to the requested resolution.
+                    // To prevent people from getting into a bad state, also clamp the resolution to the maximum
+                    // resolution that fits on the current monitor.
 
-                        AzFramework::WindowSize desiredSize = {
-                            AZStd::min(resolution.first, maxResolution.first), AZStd::min(resolution.second, maxResolution.second) };
+                    auto maxResolution = GetMaxResolution();
 
-                        AzFramework::WindowSize windowSize = desiredSize;
-                        AzFramework::WindowRequestBus::EventResult(
-                            windowSize, windowHandle,
-                            &AzFramework::WindowRequestBus::Events::GetClientAreaSize);
+                    AzFramework::WindowSize desiredSize = {
+                        AZStd::min(resolution.first, maxResolution.first), AZStd::min(resolution.second, maxResolution.second) };
 
-                        if ((desiredSize.m_height != windowSize.m_height) || (desiredSize.m_width != windowSize.m_width))
-                        {
-                            m_changingResolution = true;
-
-                            AzFramework::WindowRequestBus::Event(
-                                windowHandle,
-                                &AzFramework::WindowRequestBus::Events::ResizeClientArea,
-                                AzFramework::WindowSize(
-                                    AZStd::min(resolution.first, maxResolution.first), AZStd::min(resolution.second, maxResolution.second)),
-                                AzFramework::WindowPosOptions());
+                    AzFramework::WindowSize windowSize = desiredSize;
+                    AzFramework::WindowRequestBus::EventResult(
+                        windowSize, windowHandle,
+                        &AzFramework::WindowRequestBus::Events::GetClientAreaSize);
 
-                            m_changingResolution = false;
-                        }
-                    }
-                    else
+                    if ((desiredSize.m_height != windowSize.m_height) || (desiredSize.m_width != windowSize.m_width))
                     {
                         m_changingResolution = true;
 
-                        // Once Atom supports setting a rendering resolution to something other than the current window size,
-                        // this is where we'd want to make the appropriate API calls to change it when changing resolutions while
-                        // in fullscreen mode.
-                        // Right now, fullscreen mode uses the full monitor resolution as Atom's resolution.
-                        // Ideally, we would like Atom to use the resolution that's set in the Resolution user setting regardless
-                        // of windowed or fullscreen, and would instead scale to fill the rullscreen real estate.
+                        AzFramework::WindowRequestBus::Event(
+                            windowHandle,
+                            &AzFramework::WindowRequestBus::Events::ResizeClientArea,
+                            AzFramework::WindowSize(
+                                AZStd::min(resolution.first, maxResolution.first), AZStd::min(resolution.second, maxResolution.second)),
+                            AzFramework::WindowPosOptions());
 
                         m_changingResolution = false;
                     }
                 }
-            }
+                else
+                {
+                    m_changingResolution = true;
 
-            registry->Set(m_resolutionWidthKey.c_str(), aznumeric_cast<AZ::u64>(resolution.first));
-            registry->Set(m_resolutionHeightKey.c_str(), aznumeric_cast<AZ::u64>(resolution.second));
+                    // Once Atom supports setting a rendering resolution to something other than the current window size,
+                    // this is where we'd want to make the appropriate API calls to change it when changing resolutions while
+                    // in fullscreen mode.
+                    // Right now, fullscreen mode uses the full monitor resolution as Atom's resolution.
+                    // Ideally, we would like Atom to use the resolution that's set in the Resolution user setting regardless
+                    // of windowed or fullscreen, and would instead scale to fill the rullscreen real estate.
+
+                    m_changingResolution = false;
+                }
+            }
         }
+
+        m_registry->Set(ResolutionWidthKey.c_str(), aznumeric_cast<AZ::u64>(resolution.first));
+        m_registry->Set(ResolutionHeightKey.c_str(), aznumeric_cast<AZ::u64>(resolution.second));
     }
 
     AZStd::pair<uint32_t, uint32_t> MultiplayerSampleUserSettings::GetMaxResolution()

+ 70 - 22
Gem/Code/Source/UserSettings/MultiplayerSampleUserSettings.h

@@ -9,9 +9,37 @@
 #pragma once
 #include <AzCore/EBus/EBus.h>
 #include <AzCore/IO/Path/Path.h>
+#include <Atom/Bootstrap/BootstrapNotificationBus.h>
+
+namespace AZ
+{
+    class SettingsRegistryInterface;
+}
 
 namespace MultiplayerSample
 {
+    enum VolumeChannel : uint8_t
+    {
+        MasterVolume,
+        MusicVolume,
+        SfxVolume,
+        Max
+    };
+
+    enum class SpecularReflections : uint8_t
+    {
+        None,
+        ScreenSpace,
+        ScreenSpaceAndRaytracing
+    };
+
+    enum class Msaa : uint8_t
+    {
+        X1,
+        X2,
+        X4
+    };
+
     // This provides a way to get/set every user setting that MultiplayerSample supports, and to save the user settings file.
     // Getting the values pulls them out of the saved user settings data, and setting the values both sets them in the user
     // settings and communicates the change to the appropriate part of the game engine to make the change take effect.
@@ -35,10 +63,6 @@ namespace MultiplayerSample
         virtual AZStd::string GetGraphicsApi() = 0;
         virtual void SetGraphicsApi(const AZStd::string& apiName) = 0;
 
-        // Change the master volume from 0 - 100.
-        virtual uint8_t GetMasterVolume() = 0;
-        virtual void SetMasterVolume(uint8_t masterVolume) = 0;
-
         // Change the texture quality. 0 = highest quality (highest mipmap), N = lowest quality (lowest mipmap).
         // There's no well-defined value for lowest quality so we'll just arbitrarily cap it at 6 (64x64 if mip 0 is 4096x4096). 
         // Anything lower doesn't really provide any benefit.
@@ -52,6 +76,26 @@ namespace MultiplayerSample
         // Change the rendering resolution (width, height)
         virtual AZStd::pair<uint32_t, uint32_t> GetResolution() = 0;
         virtual void SetResolution(AZStd::pair<uint32_t, uint32_t> resolution) = 0;
+
+        // Change the type of screen space reflections
+        virtual SpecularReflections GetReflectionSetting() = 0;
+        virtual void SetReflectionSetting(SpecularReflections reflectionType) = 0;
+
+        // Change the MSAA setting
+        virtual Msaa GetMsaa() = 0;
+        virtual void SetMsaa(Msaa msaa) = 0;
+
+        // This is a workaround. The MSAA setting can currently only be applied at boot time or else
+        // it has the potential to lead to a graphics crash.
+        virtual void ApplyMsaaSetting() = 0;
+
+        // Enable/Disable TAA
+        virtual bool GetTaa() = 0;
+        virtual void SetTaa(bool enable) = 0;
+
+        // Change the volume setting from 0 - 100 for the given channel
+        virtual uint8_t GetVolume(VolumeChannel volumeChannel) = 0;
+        virtual void SetVolume(VolumeChannel volumeChannel, uint8_t volume) = 0;
     };
 
     using MultiplayerSampleUserSettingsRequestBus = AZ::EBus<MultiplayerSampleUserSettingsRequests>;
@@ -61,48 +105,52 @@ namespace MultiplayerSample
     // settings need to be loaded before system components are initialized because the Atom system components load the graphics
     // API. All of the other settings are changeable at any time and would have allowed this class to get created later in the
     // boot process.
-    class MultiplayerSampleUserSettings : public MultiplayerSampleUserSettingsRequestBus::Handler
+    class MultiplayerSampleUserSettings 
+        : public MultiplayerSampleUserSettingsRequestBus::Handler
+        , public AZ::Render::Bootstrap::NotificationBus::Handler
     {
     public:
         MultiplayerSampleUserSettings();
         ~MultiplayerSampleUserSettings() override;
 
+        // AZ::Render::Bootstrap::NotificationBus overrides...
+        void OnBootstrapSceneReady(AZ::RPI::Scene* bootstrapScene) override;
+
+        // MultiplayerSampleUserSettingsRequestBus overrides...
         void Load() override;
         void Save() override;
 
         AZStd::string GetGraphicsApi() override;
         void SetGraphicsApi(const AZStd::string& apiName) override;
 
-        uint8_t GetMasterVolume() override;
-        void SetMasterVolume(uint8_t masterVolume) override;
-
         int16_t GetTextureQuality() override;
         void SetTextureQuality(int16_t textureQuality) override;
 
         bool GetFullscreen() override;
         void SetFullscreen(bool fullscreen) override;
 
+        SpecularReflections GetReflectionSetting() override;
+        void SetReflectionSetting(SpecularReflections reflectionType) override;
+
+        Msaa GetMsaa() override;
+        void SetMsaa(Msaa msaa) override;
+        void ApplyMsaaSetting() override;
+
+        bool GetTaa() override;
+        void SetTaa(bool enable) override;
+
+        uint8_t GetVolume(VolumeChannel volumeChannel) override;
+        void SetVolume(VolumeChannel volumeChannel, uint8_t volume) override;
 
         AZStd::pair<uint32_t, uint32_t> GetResolution() override;
         void SetResolution(AZStd::pair<uint32_t, uint32_t> resolution) override;
 
     private:
+        void SetMsaaInRenderer(Msaa msaa);
         AZStd::pair<uint32_t, uint32_t> GetMaxResolution();
 
-        using FixedString = AZStd::fixed_string<256>;
-
-        // The base registry key that all our user settings will live underneath.
-        // We keep them separate from the rest of the registry hierarchy to ensure that users can't
-        // edit their settings file by hand to overwrite any other registry keys that weren't intentionally exposed.
-        static inline constexpr FixedString BaseRegistryKey = "/O3DE/MultiplayerSample/User/Settings";
-
-        // These keep track of the specific registry keys used for each setting.
-        const FixedString m_graphicsApiKey;
-        const FixedString m_textureQualityKey;
-        const FixedString m_masterVolumeKey;
-        const FixedString m_fullscreenKey;
-        const FixedString m_resolutionWidthKey;
-        const FixedString m_resolutionHeightKey;
+        // Cached pointer to the settings registry so that we don't have to fetch it for every setting.
+        AZ::SettingsRegistryInterface* m_registry = nullptr;
 
         // The path to the user settings file.
         AZ::IO::FixedMaxPath m_userSettingsPath;

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 533 - 254
UICanvases/Settings.uicanvas


+ 216 - 114
scriptcanvas/ClientDisconnect.scriptcanvas

@@ -5,7 +5,7 @@
     "ClassData": {
         "m_scriptCanvas": {
             "Id": {
-                "id": 41296274672356
+                "id": 121749462916726
             },
             "Name": "Script Canvas Graph",
             "Components": {
@@ -16,7 +16,7 @@
                         "m_nodes": [
                             {
                                 "Id": {
-                                    "id": 41317749508836
+                                    "id": 121770937753206
                                 },
                                 "Name": "SC-Node(ExecuteConsoleCommand)",
                                 "Components": {
@@ -100,7 +100,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 41313454541540
+                                    "id": 121766642785910
                                 },
                                 "Name": "EBusEventHandler",
                                 "Components": {
@@ -341,7 +341,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 47163199998692
+                                    "id": 121762347818614
                                 },
                                 "Name": "SC-Node(ExecuteConsoleCommand)",
                                 "Components": {
@@ -411,6 +411,9 @@
                                         "methodType": 0,
                                         "methodName": "ExecuteConsoleCommand",
                                         "className": "ConsoleRequestBus",
+                                        "resultSlotIDs": [
+                                            {}
+                                        ],
                                         "inputSlots": [
                                             {
                                                 "m_id": "{365E1DAE-26DC-42E8-9DC2-E4AE1A04B08F}"
@@ -422,7 +425,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 41309159574244
+                                    "id": 121758052851318
                                 },
                                 "Name": "SC-Node(EqualTo)",
                                 "Components": {
@@ -571,7 +574,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 41304864606948
+                                    "id": 121753757884022
                                 },
                                 "Name": "SC-Node(TimeDelayNodeableNode)",
                                 "Components": {
@@ -712,7 +715,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 41300569639652
+                                    "id": 121775232720502
                                 },
                                 "Name": "ReceiveScriptEvent",
                                 "Components": {
@@ -802,17 +805,65 @@
                                             },
                                             {
                                                 "id": {
-                                                    "m_id": "{25FC9880-C3C6-4432-AA4F-1C894497F22D}"
+                                                    "m_id": "{34C4D9E8-A32D-4EB2-AD1B-C43AFBBAD285}"
                                                 },
                                                 "contracts": [
                                                     {
                                                         "$type": "SlotTypeContract"
                                                     }
                                                 ],
-                                                "slotName": "ScreenToShow",
-                                                "toolTip": "Name of the screen to show, or empty to hide all screens",
+                                                "slotName": "ExecutionSlot:SelectGeneralSettings",
+                                                "Descriptor": {
+                                                    "ConnectionType": 2,
+                                                    "SlotType": 1
+                                                },
+                                                "IsLatent": true
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{EC949864-E4A7-4237-8633-915F5C30AA8C}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "ExecutionSlot:SelectGraphicsSettings",
+                                                "Descriptor": {
+                                                    "ConnectionType": 2,
+                                                    "SlotType": 1
+                                                },
+                                                "IsLatent": true
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{AB6D6F96-D485-4DA2-AC9E-B0D01454336A}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "ExecutionSlot:SelectAudioSettings",
+                                                "Descriptor": {
+                                                    "ConnectionType": 2,
+                                                    "SlotType": 1
+                                                },
+                                                "IsLatent": true
+                                            },
+                                            {
+                                                "id": {
+                                                    "m_id": "{D9A334DC-C557-4B47-A51C-D42D5F6FD0FF}"
+                                                },
+                                                "contracts": [
+                                                    {
+                                                        "$type": "SlotTypeContract"
+                                                    }
+                                                ],
+                                                "slotName": "ShouldHide",
+                                                "toolTip": "True to hide the reticle, false to show it",
                                                 "DisplayDataType": {
-                                                    "m_type": 5
+                                                    "m_type": 0
                                                 },
                                                 "Descriptor": {
                                                     "ConnectionType": 2,
@@ -822,14 +873,14 @@
                                             },
                                             {
                                                 "id": {
-                                                    "m_id": "{5C46F887-23F6-4A14-9ADD-03B5E0543328}"
+                                                    "m_id": "{92E07AEF-4FD2-48E4-A09E-D8630974121B}"
                                                 },
                                                 "contracts": [
                                                     {
                                                         "$type": "SlotTypeContract"
                                                     }
                                                 ],
-                                                "slotName": "ExecutionSlot:SetActiveScreen",
+                                                "slotName": "ExecutionSlot:HideWhenUIScreenIsActive",
                                                 "Descriptor": {
                                                     "ConnectionType": 2,
                                                     "SlotType": 1
@@ -874,17 +925,17 @@
                                             },
                                             {
                                                 "id": {
-                                                    "m_id": "{D9A334DC-C557-4B47-A51C-D42D5F6FD0FF}"
+                                                    "m_id": "{25FC9880-C3C6-4432-AA4F-1C894497F22D}"
                                                 },
                                                 "contracts": [
                                                     {
                                                         "$type": "SlotTypeContract"
                                                     }
                                                 ],
-                                                "slotName": "ShouldHide",
-                                                "toolTip": "True to hide the reticle, false to show it",
+                                                "slotName": "ScreenToShow",
+                                                "toolTip": "Name of the screen to show, or empty to hide all screens",
                                                 "DisplayDataType": {
-                                                    "m_type": 0
+                                                    "m_type": 5
                                                 },
                                                 "Descriptor": {
                                                     "ConnectionType": 2,
@@ -894,14 +945,14 @@
                                             },
                                             {
                                                 "id": {
-                                                    "m_id": "{92E07AEF-4FD2-48E4-A09E-D8630974121B}"
+                                                    "m_id": "{5C46F887-23F6-4A14-9ADD-03B5E0543328}"
                                                 },
                                                 "contracts": [
                                                     {
                                                         "$type": "SlotTypeContract"
                                                     }
                                                 ],
-                                                "slotName": "ExecutionSlot:HideWhenUIScreenIsActive",
+                                                "slotName": "ExecutionSlot:SetActiveScreen",
                                                 "Descriptor": {
                                                     "ConnectionType": 2,
                                                     "SlotType": 1
@@ -909,8 +960,22 @@
                                                 "IsLatent": true
                                             }
                                         ],
-                                        "m_version": 5,
+                                        "m_version": 6,
                                         "m_eventMap": [
+                                            {
+                                                "Key": {
+                                                    "Value": 787548403
+                                                },
+                                                "Value": {
+                                                    "m_scriptEventAssetId": {
+                                                        "guid": "{53CB5ACB-6533-5BBD-B562-2A984307AB09}"
+                                                    },
+                                                    "m_eventName": "SelectGraphicsSettings",
+                                                    "m_eventSlotId": {
+                                                        "m_id": "{EC949864-E4A7-4237-8633-915F5C30AA8C}"
+                                                    }
+                                                }
+                                            },
                                             {
                                                 "Key": {
                                                     "Value": 789797413
@@ -951,6 +1016,20 @@
                                                     "m_numExpectedArguments": 1
                                                 }
                                             },
+                                            {
+                                                "Key": {
+                                                    "Value": 2777651356
+                                                },
+                                                "Value": {
+                                                    "m_scriptEventAssetId": {
+                                                        "guid": "{53CB5ACB-6533-5BBD-B562-2A984307AB09}"
+                                                    },
+                                                    "m_eventName": "SelectAudioSettings",
+                                                    "m_eventSlotId": {
+                                                        "m_id": "{AB6D6F96-D485-4DA2-AC9E-B0D01454336A}"
+                                                    }
+                                                }
+                                            },
                                             {
                                                 "Key": {
                                                     "Value": 2992876575
@@ -970,9 +1049,26 @@
                                                     ],
                                                     "m_numExpectedArguments": 1
                                                 }
+                                            },
+                                            {
+                                                "Key": {
+                                                    "Value": 3322309397
+                                                },
+                                                "Value": {
+                                                    "m_scriptEventAssetId": {
+                                                        "guid": "{53CB5ACB-6533-5BBD-B562-2A984307AB09}"
+                                                    },
+                                                    "m_eventName": "SelectGeneralSettings",
+                                                    "m_eventSlotId": {
+                                                        "m_id": "{34C4D9E8-A32D-4EB2-AD1B-C43AFBBAD285}"
+                                                    }
+                                                }
                                             }
                                         ],
                                         "m_eventSlotMapping": {
+                                            "{0A643858-2CB0-4376-B193-527DB8BAA397}": {
+                                                "m_id": "{34C4D9E8-A32D-4EB2-AD1B-C43AFBBAD285}"
+                                            },
                                             "{1BD7D7A8-7D73-4538-B017-7F35332878AA}": {
                                                 "m_id": "{D9A334DC-C557-4B47-A51C-D42D5F6FD0FF}"
                                             },
@@ -988,8 +1084,14 @@
                                             "{8378A620-A1DC-4B95-8685-28C1FDC490F7}": {
                                                 "m_id": "{25FC9880-C3C6-4432-AA4F-1C894497F22D}"
                                             },
+                                            "{9F8EBE86-2E00-49C5-9340-5A9185A87F6F}": {
+                                                "m_id": "{AB6D6F96-D485-4DA2-AC9E-B0D01454336A}"
+                                            },
                                             "{C35C565C-BA1B-45F5-9DE9-6C937EDF43B6}": {
                                                 "m_id": "{725AAD63-ECC8-4996-BE35-2D707832E2D6}"
+                                            },
+                                            "{F976DBA2-B8DB-4C47-A790-DAF966E4E642}": {
+                                                "m_id": "{EC949864-E4A7-4237-8633-915F5C30AA8C}"
                                             }
                                         },
                                         "m_scriptEventAssetId": {
@@ -1010,7 +1112,7 @@
                         "m_connections": [
                             {
                                 "Id": {
-                                    "id": 41326339443428
+                                    "id": 121779527687798
                                 },
                                 "Name": "srcEndpoint=(EntityBus Handler: ExecutionSlot:OnEntityActivated), destEndpoint=(Receive Script Event: Connect)",
                                 "Components": {
@@ -1019,7 +1121,7 @@
                                         "Id": 9151944094509384703,
                                         "sourceEndpoint": {
                                             "nodeId": {
-                                                "id": 41313454541540
+                                                "id": 121766642785910
                                             },
                                             "slotId": {
                                                 "m_id": "{ECD88DEB-EE0D-4ECC-8583-48E97A5113B2}"
@@ -1027,7 +1129,7 @@
                                         },
                                         "targetEndpoint": {
                                             "nodeId": {
-                                                "id": 41300569639652
+                                                "id": 121775232720502
                                             },
                                             "slotId": {
                                                 "m_id": "{739ED44A-BACE-4B23-9F76-DED2F3A7457C}"
@@ -1038,7 +1140,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 41330634410724
+                                    "id": 121783822655094
                                 },
                                 "Name": "srcEndpoint=(Receive Script Event: ScreenToShow), destEndpoint=(Equal To (==): Value A)",
                                 "Components": {
@@ -1047,7 +1149,7 @@
                                         "Id": 17600078873613684267,
                                         "sourceEndpoint": {
                                             "nodeId": {
-                                                "id": 41300569639652
+                                                "id": 121775232720502
                                             },
                                             "slotId": {
                                                 "m_id": "{25FC9880-C3C6-4432-AA4F-1C894497F22D}"
@@ -1055,7 +1157,7 @@
                                         },
                                         "targetEndpoint": {
                                             "nodeId": {
-                                                "id": 41309159574244
+                                                "id": 121758052851318
                                             },
                                             "slotId": {
                                                 "m_id": "{DBE1F264-1D99-4604-8070-B4ADFC8A2A1C}"
@@ -1066,7 +1168,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 41334929378020
+                                    "id": 121788117622390
                                 },
                                 "Name": "srcEndpoint=(Equal To (==): True), destEndpoint=(TimeDelay: Start)",
                                 "Components": {
@@ -1075,7 +1177,7 @@
                                         "Id": 10150836379398510596,
                                         "sourceEndpoint": {
                                             "nodeId": {
-                                                "id": 41309159574244
+                                                "id": 121758052851318
                                             },
                                             "slotId": {
                                                 "m_id": "{4C285E52-9795-47E5-90A5-70936454D2AF}"
@@ -1083,7 +1185,7 @@
                                         },
                                         "targetEndpoint": {
                                             "nodeId": {
-                                                "id": 41304864606948
+                                                "id": 121753757884022
                                             },
                                             "slotId": {
                                                 "m_id": "{89844691-7E99-4E4B-A2CC-7920469B3351}"
@@ -1094,7 +1196,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 41339224345316
+                                    "id": 121792412589686
                                 },
                                 "Name": "srcEndpoint=(Receive Script Event: ExecutionSlot:SetActiveScreen), destEndpoint=(Equal To (==): In)",
                                 "Components": {
@@ -1103,7 +1205,7 @@
                                         "Id": 5974153072275692349,
                                         "sourceEndpoint": {
                                             "nodeId": {
-                                                "id": 41300569639652
+                                                "id": 121775232720502
                                             },
                                             "slotId": {
                                                 "m_id": "{5C46F887-23F6-4A14-9ADD-03B5E0543328}"
@@ -1111,7 +1213,7 @@
                                         },
                                         "targetEndpoint": {
                                             "nodeId": {
-                                                "id": 41309159574244
+                                                "id": 121758052851318
                                             },
                                             "slotId": {
                                                 "m_id": "{DC73B288-02D4-4667-A0E5-3ED395DF8DC2}"
@@ -1122,7 +1224,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 52205491604196
+                                    "id": 121796707556982
                                 },
                                 "Name": "srcEndpoint=(TimeDelay: Done), destEndpoint=(ExecuteConsoleCommand: In)",
                                 "Components": {
@@ -1131,7 +1233,7 @@
                                         "Id": 15414995311809178445,
                                         "sourceEndpoint": {
                                             "nodeId": {
-                                                "id": 41304864606948
+                                                "id": 121753757884022
                                             },
                                             "slotId": {
                                                 "m_id": "{5BB44F12-9009-4193-961B-8E2F6CC538FB}"
@@ -1139,7 +1241,7 @@
                                         },
                                         "targetEndpoint": {
                                             "nodeId": {
-                                                "id": 47163199998692
+                                                "id": 121762347818614
                                             },
                                             "slotId": {
                                                 "m_id": "{E061744B-A882-4069-B606-F3F0036C2941}"
@@ -1150,7 +1252,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 53103139769060
+                                    "id": 121801002524278
                                 },
                                 "Name": "srcEndpoint=(ExecuteConsoleCommand: Out), destEndpoint=(ExecuteConsoleCommand: In)",
                                 "Components": {
@@ -1159,7 +1261,7 @@
                                         "Id": 13185958598790311973,
                                         "sourceEndpoint": {
                                             "nodeId": {
-                                                "id": 47163199998692
+                                                "id": 121762347818614
                                             },
                                             "slotId": {
                                                 "m_id": "{C7F2B1D8-93A2-4B0B-98B2-BFDE5E7E34B1}"
@@ -1167,7 +1269,7 @@
                                         },
                                         "targetEndpoint": {
                                             "nodeId": {
-                                                "id": 41317749508836
+                                                "id": 121770937753206
                                             },
                                             "slotId": {
                                                 "m_id": "{8C46EFC2-676D-4B14-A5F0-B58404C64CD0}"
@@ -1180,7 +1282,7 @@
                         "m_scriptEventAssets": [
                             [
                                 {
-                                    "id": 41300569639652
+                                    "id": 121775232720502
                                 },
                                 {}
                             ]
@@ -1195,7 +1297,7 @@
                     "GraphCanvasData": [
                         {
                             "Key": {
-                                "id": 41296274672356
+                                "id": 121749462916726
                             },
                             "Value": {
                                 "ComponentData": {
@@ -1203,7 +1305,7 @@
                                         "$type": "SceneComponentSaveData",
                                         "Constructs": [
                                             {
-                                                "Type": 1,
+                                                "Type": 3,
                                                 "DataContainer": {
                                                     "ComponentData": {
                                                         "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
@@ -1211,21 +1313,35 @@
                                                         },
                                                         "{524D8380-AC09-444E-870E-9CEF2535B4A2}": {
                                                             "$type": "CommentNodeTextSaveData",
-                                                            "Comment": "The \"disconnect\" is required here because once a client has connected to a server for the first time, it won't be able to initiate a level load without calling a client-side disconnect to reset the state.",
+                                                            "Comment": "On Disconnect load start menu after N seconds",
                                                             "BackgroundColor": [
-                                                                0.9800000190734863,
-                                                                0.9700000286102295,
-                                                                0.6499999761581421
+                                                                0.7409999966621399,
+                                                                0.3720000088214874,
+                                                                0.5450000166893005
                                                             ],
                                                             "FontSettings": {
                                                                 "PixelSize": 16
                                                             }
                                                         },
+                                                        "{6F4811ED-BD83-4A2A-8831-58EEA4020D57}": {
+                                                            "$type": "NodeGroupFrameComponentSaveData",
+                                                            "DisplayHeight": 547.0,
+                                                            "DisplayWidth": 2400.0,
+                                                            "PersistentGroupedId": [
+                                                                "{89868DAB-1712-4C78-AE33-0014BDC142EA}",
+                                                                "{282BB238-27B1-482D-A39E-A42B99C55EA9}",
+                                                                "{4B7B33DD-6E65-4A51-A4B7-F2E91BA9DAB4}",
+                                                                "{C21F9316-8419-4C35-BAFE-536829F5C78A}",
+                                                                "{1E80C9AA-C1A2-4313-9310-1EE8E5127DC8}",
+                                                                "{496A1DBA-E33D-4AA7-AA49-C533AFA7E519}",
+                                                                "{587F771B-FC38-4C05-8A31-6002D71FF144}"
+                                                            ]
+                                                        },
                                                         "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
                                                             "$type": "GeometrySaveData",
                                                             "Position": [
-                                                                960.0,
-                                                                220.0
+                                                                -800.0,
+                                                                160.0
                                                             ]
                                                         },
                                                         "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
@@ -1233,13 +1349,13 @@
                                                         },
                                                         "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
                                                             "$type": "PersistentIdComponentSaveData",
-                                                            "PersistentId": "{587F771B-FC38-4C05-8A31-6002D71FF144}"
+                                                            "PersistentId": "{6772D3A9-E458-43B3-AD89-35696F33819B}"
                                                         }
                                                     }
                                                 }
                                             },
                                             {
-                                                "Type": 3,
+                                                "Type": 1,
                                                 "DataContainer": {
                                                     "ComponentData": {
                                                         "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
@@ -1247,35 +1363,21 @@
                                                         },
                                                         "{524D8380-AC09-444E-870E-9CEF2535B4A2}": {
                                                             "$type": "CommentNodeTextSaveData",
-                                                            "Comment": "On Disconnect load start menu after N seconds",
+                                                            "Comment": "The \"disconnect\" is required here because once a client has connected to a server for the first time, it won't be able to initiate a level load without calling a client-side disconnect to reset the state.",
                                                             "BackgroundColor": [
-                                                                0.7409999966621399,
-                                                                0.3720000088214874,
-                                                                0.5450000166893005
+                                                                0.9800000190734863,
+                                                                0.9700000286102295,
+                                                                0.6499999761581421
                                                             ],
                                                             "FontSettings": {
                                                                 "PixelSize": 16
                                                             }
                                                         },
-                                                        "{6F4811ED-BD83-4A2A-8831-58EEA4020D57}": {
-                                                            "$type": "NodeGroupFrameComponentSaveData",
-                                                            "DisplayHeight": 547.0,
-                                                            "DisplayWidth": 2400.0,
-                                                            "PersistentGroupedId": [
-                                                                "{89868DAB-1712-4C78-AE33-0014BDC142EA}",
-                                                                "{282BB238-27B1-482D-A39E-A42B99C55EA9}",
-                                                                "{4B7B33DD-6E65-4A51-A4B7-F2E91BA9DAB4}",
-                                                                "{C21F9316-8419-4C35-BAFE-536829F5C78A}",
-                                                                "{1E80C9AA-C1A2-4313-9310-1EE8E5127DC8}",
-                                                                "{496A1DBA-E33D-4AA7-AA49-C533AFA7E519}",
-                                                                "{587F771B-FC38-4C05-8A31-6002D71FF144}"
-                                                            ]
-                                                        },
                                                         "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
                                                             "$type": "GeometrySaveData",
                                                             "Position": [
-                                                                -800.0,
-                                                                160.0
+                                                                960.0,
+                                                                220.0
                                                             ]
                                                         },
                                                         "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
@@ -1283,7 +1385,7 @@
                                                         },
                                                         "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
                                                             "$type": "PersistentIdComponentSaveData",
-                                                            "PersistentId": "{6772D3A9-E458-43B3-AD89-35696F33819B}"
+                                                            "PersistentId": "{587F771B-FC38-4C05-8A31-6002D71FF144}"
                                                         }
                                                     }
                                                 }
@@ -1300,18 +1402,22 @@
                         },
                         {
                             "Key": {
-                                "id": 41300569639652
+                                "id": 121753757884022
                             },
                             "Value": {
                                 "ComponentData": {
                                     "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
                                         "$type": "NodeSaveData"
                                     },
+                                    "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
+                                        "$type": "GeneralNodeTitleComponentSaveData",
+                                        "PaletteOverride": "TimeNodeTitlePalette"
+                                    },
                                     "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
                                         "$type": "GeometrySaveData",
                                         "Position": [
-                                            -380.0,
-                                            300.0
+                                            500.0,
+                                            340.0
                                         ]
                                     },
                                     "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
@@ -1319,31 +1425,14 @@
                                     },
                                     "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
                                         "$type": "PersistentIdComponentSaveData",
-                                        "PersistentId": "{282BB238-27B1-482D-A39E-A42B99C55EA9}"
-                                    },
-                                    "{D8BBE799-7E4D-495A-B69A-1E3940670891}": {
-                                        "$type": "ScriptEventReceiverHandlerNodeDescriptorSaveData",
-                                        "EventNames": [
-                                            [
-                                                {
-                                                    "Value": 599532887
-                                                },
-                                                "ShowDisconnectScreen"
-                                            ],
-                                            [
-                                                {
-                                                    "Value": 2992876575
-                                                },
-                                                "SetActiveScreen"
-                                            ]
-                                        ]
+                                        "PersistentId": "{4B7B33DD-6E65-4A51-A4B7-F2E91BA9DAB4}"
                                     }
                                 }
                             }
                         },
                         {
                             "Key": {
-                                "id": 41304864606948
+                                "id": 121758052851318
                             },
                             "Value": {
                                 "ComponentData": {
@@ -1352,13 +1441,13 @@
                                     },
                                     "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
                                         "$type": "GeneralNodeTitleComponentSaveData",
-                                        "PaletteOverride": "TimeNodeTitlePalette"
+                                        "PaletteOverride": "MathNodeTitlePalette"
                                     },
                                     "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
                                         "$type": "GeometrySaveData",
                                         "Position": [
-                                            500.0,
-                                            340.0
+                                            -20.0,
+                                            300.0
                                         ]
                                     },
                                     "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
@@ -1366,14 +1455,14 @@
                                     },
                                     "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
                                         "$type": "PersistentIdComponentSaveData",
-                                        "PersistentId": "{4B7B33DD-6E65-4A51-A4B7-F2E91BA9DAB4}"
+                                        "PersistentId": "{1E80C9AA-C1A2-4313-9310-1EE8E5127DC8}"
                                     }
                                 }
                             }
                         },
                         {
                             "Key": {
-                                "id": 41309159574244
+                                "id": 121762347818614
                             },
                             "Value": {
                                 "ComponentData": {
@@ -1382,28 +1471,29 @@
                                     },
                                     "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
                                         "$type": "GeneralNodeTitleComponentSaveData",
-                                        "PaletteOverride": "MathNodeTitlePalette"
+                                        "PaletteOverride": "MethodNodeTitlePalette"
                                     },
                                     "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
                                         "$type": "GeometrySaveData",
                                         "Position": [
-                                            -20.0,
-                                            300.0
+                                            960.0,
+                                            360.0
                                         ]
                                     },
                                     "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
-                                        "$type": "StylingComponentSaveData"
+                                        "$type": "StylingComponentSaveData",
+                                        "SubStyle": ".method"
                                     },
                                     "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
                                         "$type": "PersistentIdComponentSaveData",
-                                        "PersistentId": "{1E80C9AA-C1A2-4313-9310-1EE8E5127DC8}"
+                                        "PersistentId": "{89868DAB-1712-4C78-AE33-0014BDC142EA}"
                                     }
                                 }
                             }
                         },
                         {
                             "Key": {
-                                "id": 41313454541540
+                                "id": 121766642785910
                             },
                             "Value": {
                                 "ComponentData": {
@@ -1437,7 +1527,7 @@
                         },
                         {
                             "Key": {
-                                "id": 41317749508836
+                                "id": 121770937753206
                             },
                             "Value": {
                                 "ComponentData": {
@@ -1468,31 +1558,43 @@
                         },
                         {
                             "Key": {
-                                "id": 47163199998692
+                                "id": 121775232720502
                             },
                             "Value": {
                                 "ComponentData": {
                                     "{24CB38BB-1705-4EC5-8F63-B574571B4DCD}": {
                                         "$type": "NodeSaveData"
                                     },
-                                    "{328FF15C-C302-458F-A43D-E1794DE0904E}": {
-                                        "$type": "GeneralNodeTitleComponentSaveData",
-                                        "PaletteOverride": "MethodNodeTitlePalette"
-                                    },
                                     "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
                                         "$type": "GeometrySaveData",
                                         "Position": [
-                                            960.0,
-                                            360.0
+                                            -380.0,
+                                            300.0
                                         ]
                                     },
                                     "{B0B99C8A-03AF-4CF6-A926-F65C874C3D97}": {
-                                        "$type": "StylingComponentSaveData",
-                                        "SubStyle": ".method"
+                                        "$type": "StylingComponentSaveData"
                                     },
                                     "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
                                         "$type": "PersistentIdComponentSaveData",
-                                        "PersistentId": "{89868DAB-1712-4C78-AE33-0014BDC142EA}"
+                                        "PersistentId": "{282BB238-27B1-482D-A39E-A42B99C55EA9}"
+                                    },
+                                    "{D8BBE799-7E4D-495A-B69A-1E3940670891}": {
+                                        "$type": "ScriptEventReceiverHandlerNodeDescriptorSaveData",
+                                        "EventNames": [
+                                            [
+                                                {
+                                                    "Value": 599532887
+                                                },
+                                                "ShowDisconnectScreen"
+                                            ],
+                                            [
+                                                {
+                                                    "Value": 2992876575
+                                                },
+                                                "SetActiveScreen"
+                                            ]
+                                        ]
                                     }
                                 }
                             }

+ 52 - 58
scriptcanvas/InGameMenu.scriptcanvas

@@ -5,7 +5,7 @@
     "ClassData": {
         "m_scriptCanvas": {
             "Id": {
-                "id": 747733856982500
+                "id": 128200503795318
             },
             "Name": "Script Canvas Graph",
             "Components": {
@@ -16,7 +16,7 @@
                         "m_nodes": [
                             {
                                 "Id": {
-                                    "id": 747759626786276
+                                    "id": 128226273599094
                                 },
                                 "Name": "EBusEventHandler",
                                 "Components": {
@@ -257,7 +257,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 747763921753572
+                                    "id": 128221978631798
                                 },
                                 "Name": "EBusEventHandler",
                                 "Components": {
@@ -422,7 +422,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 747751036851684
+                                    "id": 128217683664502
                                 },
                                 "Name": "SC-Node(ExecuteConsoleCommand)",
                                 "Components": {
@@ -506,7 +506,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 747746741884388
+                                    "id": 128213388697206
                                 },
                                 "Name": "SendScriptEvent",
                                 "Components": {
@@ -576,7 +576,7 @@
                                                 "label": "ScreenToShow"
                                             }
                                         ],
-                                        "m_version": 5,
+                                        "m_version": 6,
                                         "m_eventSlotMapping": {
                                             "{8378A620-A1DC-4B95-8685-28C1FDC490F7}": {
                                                 "m_id": "{95ED6842-484A-4F25-9F99-B5AE548209F4}"
@@ -603,7 +603,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 747742446917092
+                                    "id": 128209093729910
                                 },
                                 "Name": "EBusEventHandler",
                                 "Components": {
@@ -768,7 +768,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 747768216720868
+                                    "id": 128230568566390
                                 },
                                 "Name": "EBusEventHandler",
                                 "Components": {
@@ -933,7 +933,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 747738151949796
+                                    "id": 128204798762614
                                 },
                                 "Name": "SendScriptEvent",
                                 "Components": {
@@ -1003,7 +1003,7 @@
                                                 "label": "ScreenToShow"
                                             }
                                         ],
-                                        "m_version": 5,
+                                        "m_version": 6,
                                         "m_eventSlotMapping": {
                                             "{8378A620-A1DC-4B95-8685-28C1FDC490F7}": {
                                                 "m_id": "{C61037F6-C89E-4009-AF41-A4D365F10845}"
@@ -1032,7 +1032,7 @@
                         "m_connections": [
                             {
                                 "Id": {
-                                    "id": 747772511688164
+                                    "id": 128234863533686
                                 },
                                 "Name": "srcEndpoint=(UiButtonNotificationBus Handler: OnConnected), destEndpoint=(UiButtonNotificationBus Handler: Connect)",
                                 "Components": {
@@ -1041,7 +1041,7 @@
                                         "Id": 11981214346165651552,
                                         "sourceEndpoint": {
                                             "nodeId": {
-                                                "id": 747742446917092
+                                                "id": 128209093729910
                                             },
                                             "slotId": {
                                                 "m_id": "{1196B610-CAAA-4E65-82E1-185DA50248D2}"
@@ -1049,7 +1049,7 @@
                                         },
                                         "targetEndpoint": {
                                             "nodeId": {
-                                                "id": 747768216720868
+                                                "id": 128230568566390
                                             },
                                             "slotId": {
                                                 "m_id": "{FA99194F-158E-4430-BE91-41DCD38C9C13}"
@@ -1060,7 +1060,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 747776806655460
+                                    "id": 128239158500982
                                 },
                                 "Name": "srcEndpoint=(UiButtonNotificationBus Handler: ExecutionSlot:OnButtonClick), destEndpoint=(ExecuteConsoleCommand: In)",
                                 "Components": {
@@ -1069,7 +1069,7 @@
                                         "Id": 10748104048025390661,
                                         "sourceEndpoint": {
                                             "nodeId": {
-                                                "id": 747768216720868
+                                                "id": 128230568566390
                                             },
                                             "slotId": {
                                                 "m_id": "{E6782F9A-BA87-4105-9F8E-83A56C0FCE20}"
@@ -1077,7 +1077,7 @@
                                         },
                                         "targetEndpoint": {
                                             "nodeId": {
-                                                "id": 747751036851684
+                                                "id": 128217683664502
                                             },
                                             "slotId": {
                                                 "m_id": "{911424A5-59CD-452B-9411-0636EC7D0175}"
@@ -1088,7 +1088,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 747781101622756
+                                    "id": 128243453468278
                                 },
                                 "Name": "srcEndpoint=(UiButtonNotificationBus Handler: OnConnected), destEndpoint=(UiButtonNotificationBus Handler: Connect)",
                                 "Components": {
@@ -1097,7 +1097,7 @@
                                         "Id": 13330218788003102614,
                                         "sourceEndpoint": {
                                             "nodeId": {
-                                                "id": 747768216720868
+                                                "id": 128230568566390
                                             },
                                             "slotId": {
                                                 "m_id": "{1196B610-CAAA-4E65-82E1-185DA50248D2}"
@@ -1105,7 +1105,7 @@
                                         },
                                         "targetEndpoint": {
                                             "nodeId": {
-                                                "id": 747763921753572
+                                                "id": 128221978631798
                                             },
                                             "slotId": {
                                                 "m_id": "{6447E883-AE5D-4099-BF0C-E410581D83C0}"
@@ -1116,7 +1116,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 747785396590052
+                                    "id": 128247748435574
                                 },
                                 "Name": "srcEndpoint=(EntityBus Handler: ExecutionSlot:OnEntityActivated), destEndpoint=(UiButtonNotificationBus Handler: Connect)",
                                 "Components": {
@@ -1125,7 +1125,7 @@
                                         "Id": 17739048204484515595,
                                         "sourceEndpoint": {
                                             "nodeId": {
-                                                "id": 747759626786276
+                                                "id": 128226273599094
                                             },
                                             "slotId": {
                                                 "m_id": "{74C7529D-94A1-434D-83E2-CC1BE55F6697}"
@@ -1133,7 +1133,7 @@
                                         },
                                         "targetEndpoint": {
                                             "nodeId": {
-                                                "id": 747742446917092
+                                                "id": 128209093729910
                                             },
                                             "slotId": {
                                                 "m_id": "{FA99194F-158E-4430-BE91-41DCD38C9C13}"
@@ -1144,7 +1144,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 747789691557348
+                                    "id": 128252043402870
                                 },
                                 "Name": "srcEndpoint=(UiButtonNotificationBus Handler: ExecutionSlot:OnButtonClick), destEndpoint=(Send Script Event: In)",
                                 "Components": {
@@ -1153,7 +1153,7 @@
                                         "Id": 11658318120071725282,
                                         "sourceEndpoint": {
                                             "nodeId": {
-                                                "id": 747763921753572
+                                                "id": 128221978631798
                                             },
                                             "slotId": {
                                                 "m_id": "{F5A4728B-04AB-4BCB-9227-0AC4620D6952}"
@@ -1161,7 +1161,7 @@
                                         },
                                         "targetEndpoint": {
                                             "nodeId": {
-                                                "id": 747746741884388
+                                                "id": 128213388697206
                                             },
                                             "slotId": {
                                                 "m_id": "{3B816E7C-4511-4F10-BEB4-787182A7975E}"
@@ -1172,7 +1172,7 @@
                             },
                             {
                                 "Id": {
-                                    "id": 747798281491940
+                                    "id": 128256338370166
                                 },
                                 "Name": "srcEndpoint=(UiButtonNotificationBus Handler: ExecutionSlot:OnButtonClick), destEndpoint=(Send Script Event: In)",
                                 "Components": {
@@ -1181,7 +1181,7 @@
                                         "Id": 9497824414611508912,
                                         "sourceEndpoint": {
                                             "nodeId": {
-                                                "id": 747742446917092
+                                                "id": 128209093729910
                                             },
                                             "slotId": {
                                                 "m_id": "{E6782F9A-BA87-4105-9F8E-83A56C0FCE20}"
@@ -1189,7 +1189,7 @@
                                         },
                                         "targetEndpoint": {
                                             "nodeId": {
-                                                "id": 747738151949796
+                                                "id": 128204798762614
                                             },
                                             "slotId": {
                                                 "m_id": "{A4D22096-91C2-4B1B-8BFF-1F88CE9F1A8B}"
@@ -1202,55 +1202,49 @@
                         "m_scriptEventAssets": [
                             [
                                 {
-                                    "id": 747755331818980
+                                    "id": 128213388697206
                                 },
                                 {}
                             ],
                             [
                                 {
-                                    "id": 747746741884388
+                                    "id": 128204798762614
                                 },
                                 {}
                             ],
                             [
                                 {
-                                    "id": 747738151949796
+                                    "id": 128204798762614
                                 },
                                 {}
                             ],
                             [
                                 {
-                                    "id": 747738151949796
+                                    "id": 128213388697206
                                 },
                                 {}
                             ],
                             [
                                 {
-                                    "id": 747746741884388
+                                    "id": 128204798762614
                                 },
                                 {}
                             ],
                             [
                                 {
-                                    "id": 747755331818980
+                                    "id": 128213388697206
                                 },
                                 {}
                             ],
                             [
                                 {
-                                    "id": 747738151949796
+                                    "id": 128204798762614
                                 },
                                 {}
                             ],
                             [
                                 {
-                                    "id": 747746741884388
-                                },
-                                {}
-                            ],
-                            [
-                                {
-                                    "id": 747755331818980
+                                    "id": 128213388697206
                                 },
                                 {}
                             ]
@@ -1265,7 +1259,7 @@
                     "GraphCanvasData": [
                         {
                             "Key": {
-                                "id": 747733856982500
+                                "id": 128200503795318
                             },
                             "Value": {
                                 "ComponentData": {
@@ -1282,7 +1276,7 @@
                         },
                         {
                             "Key": {
-                                "id": 747738151949796
+                                "id": 128204798762614
                             },
                             "Value": {
                                 "ComponentData": {
@@ -1313,7 +1307,7 @@
                         },
                         {
                             "Key": {
-                                "id": 747742446917092
+                                "id": 128209093729910
                             },
                             "Value": {
                                 "ComponentData": {
@@ -1347,7 +1341,7 @@
                         },
                         {
                             "Key": {
-                                "id": 747746741884388
+                                "id": 128213388697206
                             },
                             "Value": {
                                 "ComponentData": {
@@ -1378,7 +1372,7 @@
                         },
                         {
                             "Key": {
-                                "id": 747751036851684
+                                "id": 128217683664502
                             },
                             "Value": {
                                 "ComponentData": {
@@ -1409,7 +1403,7 @@
                         },
                         {
                             "Key": {
-                                "id": 747759626786276
+                                "id": 128221978631798
                             },
                             "Value": {
                                 "ComponentData": {
@@ -1419,15 +1413,15 @@
                                     "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
                                         "$type": "GeometrySaveData",
                                         "Position": [
-                                            60.0,
-                                            80.0
+                                            1420.0,
+                                            100.0
                                         ]
                                     },
                                     "{9E81C95F-89C0-4476-8E82-63CCC4E52E04}": {
                                         "$type": "EBusHandlerNodeDescriptorSaveData",
                                         "EventIds": [
                                             {
-                                                "Value": 245425936
+                                                "Value": 1238236530
                                             }
                                         ]
                                     },
@@ -1436,14 +1430,14 @@
                                     },
                                     "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
                                         "$type": "PersistentIdComponentSaveData",
-                                        "PersistentId": "{1529C9FC-4B99-45CC-82B4-034B729EF785}"
+                                        "PersistentId": "{1031F023-CC60-4AB0-B587-4EF938D637CF}"
                                     }
                                 }
                             }
                         },
                         {
                             "Key": {
-                                "id": 747763921753572
+                                "id": 128226273599094
                             },
                             "Value": {
                                 "ComponentData": {
@@ -1453,15 +1447,15 @@
                                     "{7CC444B1-F9B3-41B5-841B-0C4F2179F111}": {
                                         "$type": "GeometrySaveData",
                                         "Position": [
-                                            1420.0,
-                                            100.0
+                                            60.0,
+                                            80.0
                                         ]
                                     },
                                     "{9E81C95F-89C0-4476-8E82-63CCC4E52E04}": {
                                         "$type": "EBusHandlerNodeDescriptorSaveData",
                                         "EventIds": [
                                             {
-                                                "Value": 1238236530
+                                                "Value": 245425936
                                             }
                                         ]
                                     },
@@ -1470,14 +1464,14 @@
                                     },
                                     "{B1F49A35-8408-40DA-B79E-F1E3B64322CE}": {
                                         "$type": "PersistentIdComponentSaveData",
-                                        "PersistentId": "{1031F023-CC60-4AB0-B587-4EF938D637CF}"
+                                        "PersistentId": "{1529C9FC-4B99-45CC-82B4-034B729EF785}"
                                     }
                                 }
                             }
                         },
                         {
                             "Key": {
-                                "id": 747768216720868
+                                "id": 128230568566390
                             },
                             "Value": {
                                 "ComponentData": {

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 205 - 146
scriptcanvas/ReticleEffects.scriptcanvas


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 3377 - 206
scriptcanvas/SettingsScreen.scriptcanvas


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 288 - 90
scriptcanvas/UIManager.scriptcanvas


+ 135 - 45
scripts/UIScriptEvents.scriptevents

@@ -1,7 +1,7 @@
 <ObjectStream version="3">
 	<Class name="ScriptEventsAsset" version="1" type="{CB4D603E-8CB0-4D80-8165-4244F28AF187}">
 		<Class name="ScriptEvent" field="m_definition" version="2" type="{10A08CD3-32C9-4E18-8039-4B8A8157918E}">
-			<Class name="unsigned int" field="m_version" value="5" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+			<Class name="unsigned int" field="m_version" value="6" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
 			<Class name="VersionedProperty" field="m_name" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
 				<Class name="AZ::Uuid" field="m_id" value="{8276E36A-DC15-4ADF-8209-EBF4D163233F}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
 				<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
@@ -44,17 +44,7 @@
 						<Class name="AZ::Uuid" field="m_id" value="{7EFDBD3A-D409-4C56-8598-C7E51DB557B1}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
 						<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
 						<Class name="unsigned int" field="m_version" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}">
-							<Class name="VersionedProperty" field="element" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-								<Class name="AZ::Uuid" field="m_id" value="{7EFDBD3A-D409-4C56-8598-C7E51DB557B1}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								<Class name="unsigned int" field="m_version" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-									<Class name="AZStd::string" field="m_data" value="ShowInGameMenuScreen" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								</Class>
-							</Class>
-						</Class>
+						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
 						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
 							<Class name="AZStd::string" field="m_data" value="SetActiveScreen" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
 						</Class>
@@ -63,17 +53,7 @@
 						<Class name="AZ::Uuid" field="m_id" value="{E8DC286C-7FE9-4814-9CA9-E20BC3EB983E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
 						<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
 						<Class name="unsigned int" field="m_version" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}">
-							<Class name="VersionedProperty" field="element" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-								<Class name="AZ::Uuid" field="m_id" value="{E8DC286C-7FE9-4814-9CA9-E20BC3EB983E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								<Class name="unsigned int" field="m_version" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-									<Class name="AZStd::string" field="m_data" value="Show or hide the InGameMenu screen" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								</Class>
-							</Class>
-						</Class>
+						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
 						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
 							<Class name="AZStd::string" field="m_data" value="Set the active screen to the one requested, or none if empty" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
 						</Class>
@@ -184,17 +164,7 @@
 						<Class name="AZ::Uuid" field="m_id" value="{2B1EA25A-EB72-4FFE-AF15-40D1C2B8770E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
 						<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
 						<Class name="unsigned int" field="m_version" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}">
-							<Class name="VersionedProperty" field="element" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-								<Class name="AZ::Uuid" field="m_id" value="{2B1EA25A-EB72-4FFE-AF15-40D1C2B8770E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								<Class name="unsigned int" field="m_version" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-									<Class name="AZStd::string" field="m_data" value="ShowReticle" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								</Class>
-							</Class>
-						</Class>
+						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
 						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
 							<Class name="AZStd::string" field="m_data" value="HideWhenUIScreenIsActive" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
 						</Class>
@@ -203,17 +173,7 @@
 						<Class name="AZ::Uuid" field="m_id" value="{87A3ACE8-5791-4CA8-83D4-8D25D6EAAD9C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
 						<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
 						<Class name="unsigned int" field="m_version" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}">
-							<Class name="VersionedProperty" field="element" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-								<Class name="AZ::Uuid" field="m_id" value="{87A3ACE8-5791-4CA8-83D4-8D25D6EAAD9C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								<Class name="unsigned int" field="m_version" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-									<Class name="AZStd::string" field="m_data" value="Show / Hide the HUD Reticle" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								</Class>
-							</Class>
-						</Class>
+						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
 						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
 							<Class name="AZStd::string" field="m_data" value="Hide this element when a UI Screen is active" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
 						</Class>
@@ -259,6 +219,136 @@
 						</Class>
 					</Class>
 				</Class>
+				<Class name="Method" field="element" type="{E034EA83-C798-413D-ACE8-4923C51CF4F7}">
+					<Class name="VersionedProperty" field="m_name" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+						<Class name="AZ::Uuid" field="m_id" value="{0A643858-2CB0-4376-B193-527DB8BAA397}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+						<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+							<Class name="AZStd::string" field="m_data" value="SelectGeneralSettings" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						</Class>
+					</Class>
+					<Class name="VersionedProperty" field="m_tooltip" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+						<Class name="AZ::Uuid" field="m_id" value="{5079835B-19A7-4168-90A4-AA77AA92470C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+						<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+							<Class name="AZStd::string" field="m_data" value="Select the General tab of the settings screen" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						</Class>
+					</Class>
+					<Class name="VersionedProperty" field="m_returnType" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+						<Class name="AZ::Uuid" field="m_id" value="{0A6DCA44-0206-49BF-A23C-1A6CC49E616E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+						<Class name="AZStd::string" field="m_label" value="Return Type" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+							<Class name="AZ::Uuid" field="m_data" value="{C0F1AFAD-5CB3-450E-B0F5-ADB5D46B0E22}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+						</Class>
+					</Class>
+					<Class name="AZStd::vector&lt;Parameter, allocator&gt;" field="m_parameters" type="{6ED13EA7-791B-57A8-A4F1-560B5F35B472}"/>
+				</Class>
+				<Class name="Method" field="element" type="{E034EA83-C798-413D-ACE8-4923C51CF4F7}">
+					<Class name="VersionedProperty" field="m_name" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+						<Class name="AZ::Uuid" field="m_id" value="{F976DBA2-B8DB-4C47-A790-DAF966E4E642}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+						<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						<Class name="unsigned int" field="m_version" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}">
+							<Class name="VersionedProperty" field="element" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+								<Class name="AZ::Uuid" field="m_id" value="{F976DBA2-B8DB-4C47-A790-DAF966E4E642}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+								<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+									<Class name="AZStd::string" field="m_data" value="MethodName" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+								</Class>
+							</Class>
+						</Class>
+						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+							<Class name="AZStd::string" field="m_data" value="SelectGraphicsSettings" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						</Class>
+					</Class>
+					<Class name="VersionedProperty" field="m_tooltip" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+						<Class name="AZ::Uuid" field="m_id" value="{A1A772D3-B482-4C93-AD08-EF38EC233931}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+						<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						<Class name="unsigned int" field="m_version" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}">
+							<Class name="VersionedProperty" field="element" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+								<Class name="AZ::Uuid" field="m_id" value="{A1A772D3-B482-4C93-AD08-EF38EC233931}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+								<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+									<Class name="AZStd::string" field="m_data" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+								</Class>
+							</Class>
+						</Class>
+						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+							<Class name="AZStd::string" field="m_data" value="Select the Graphics tab of the settings screen" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						</Class>
+					</Class>
+					<Class name="VersionedProperty" field="m_returnType" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+						<Class name="AZ::Uuid" field="m_id" value="{157E09F1-F416-48CA-9D44-C4CEC470109C}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+						<Class name="AZStd::string" field="m_label" value="Return Type" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+							<Class name="AZ::Uuid" field="m_data" value="{C0F1AFAD-5CB3-450E-B0F5-ADB5D46B0E22}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+						</Class>
+					</Class>
+					<Class name="AZStd::vector&lt;Parameter, allocator&gt;" field="m_parameters" type="{6ED13EA7-791B-57A8-A4F1-560B5F35B472}"/>
+				</Class>
+				<Class name="Method" field="element" type="{E034EA83-C798-413D-ACE8-4923C51CF4F7}">
+					<Class name="VersionedProperty" field="m_name" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+						<Class name="AZ::Uuid" field="m_id" value="{9F8EBE86-2E00-49C5-9340-5A9185A87F6F}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+						<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						<Class name="unsigned int" field="m_version" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}">
+							<Class name="VersionedProperty" field="element" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+								<Class name="AZ::Uuid" field="m_id" value="{9F8EBE86-2E00-49C5-9340-5A9185A87F6F}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+								<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+									<Class name="AZStd::string" field="m_data" value="MethodName" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+								</Class>
+							</Class>
+						</Class>
+						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+							<Class name="AZStd::string" field="m_data" value="SelectAudioSettings" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						</Class>
+					</Class>
+					<Class name="VersionedProperty" field="m_tooltip" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+						<Class name="AZ::Uuid" field="m_id" value="{5E6FE928-A1F8-4783-9B22-14497BF9C607}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+						<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						<Class name="unsigned int" field="m_version" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}">
+							<Class name="VersionedProperty" field="element" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+								<Class name="AZ::Uuid" field="m_id" value="{5E6FE928-A1F8-4783-9B22-14497BF9C607}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+								<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+									<Class name="AZStd::string" field="m_data" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+								</Class>
+							</Class>
+						</Class>
+						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+							<Class name="AZStd::string" field="m_data" value="Select the Audio tab of the settings screen" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						</Class>
+					</Class>
+					<Class name="VersionedProperty" field="m_returnType" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+						<Class name="AZ::Uuid" field="m_id" value="{34B533B0-C9A3-484C-8842-A9FB219F9130}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+						<Class name="AZStd::string" field="m_label" value="Return Type" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+							<Class name="AZ::Uuid" field="m_data" value="{C0F1AFAD-5CB3-450E-B0F5-ADB5D46B0E22}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+						</Class>
+					</Class>
+					<Class name="AZStd::vector&lt;Parameter, allocator&gt;" field="m_parameters" type="{6ED13EA7-791B-57A8-A4F1-560B5F35B472}"/>
+				</Class>
 			</Class>
 			<Class name="AZStd::string" field="scriptCanvasSerializedData" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
 		</Class>

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.