예제 #1
0
        internal static EnvironmentState ConfigureEnvironment()
        {
#if AGXUNITY_UPDATING
            Debug.LogWarning("AGX Dynamics for Unity is currently updating...");
            return(EnvironmentState.Updating);
#else
            // WARNING INFO:
            //     Unity 2018, 2019: AGX Dynamics for Unity compiles but undefined behavior
            //                       in players with API compatibility @ .NET Standard 2.0.
            //     Unity 2017: AGX Dynamics for Unity won't compile due to
            if (PlayerSettings.GetApiCompatibilityLevel(BuildTargetGroup.Standalone) != ApiCompatibilityLevel.NET_4_6)
            {
                Debug.LogWarning(AGXUnity.Utils.GUI.AddColorTag("<b>WARNING:</b> ", Color.yellow) +
                                 "AGX Dynamics for Unity requires .NET API compatibility level: .NET 4.x.\n" +
                                 "<b>Edit -> Project Settings... -> Player -> Other Settings -> Configuration -> Api Compatibility Level -> .NET 4.x</b>");
            }

            // Running from within the editor - two options:
            //   1. Unity has been started from an AGX environment => do nothing.
            //   2. AGX Dynamics dll's are present in the plugins directory => setup
            //      environment file paths.
            var binariesInProject = IO.Utils.AGXDynamicsInstalledInProject;
            if (binariesInProject)
            {
                // This is necessary when e.g., terrain dynamically loads dll's.
                AGXUnity.IO.Environment.AddToPath(IO.Utils.AGXUnityPluginDirectoryFull);

                try {
                    AGXUnity.NativeHandler.Instance.Register(null);
                }
                catch (TypeInitializationException) {
                    var lastRequestData = GetRequestScriptReloadData();
                    if ((float)EditorApplication.timeSinceStartup - lastRequestData.Float > 1.0f)
                    {
                        lastRequestData.Float = (float)EditorApplication.timeSinceStartup;
#if UNITY_2019_3_OR_NEWER
                        Debug.LogWarning("AGX Dynamics binaries aren't properly loaded into Unity - requesting Unity to reload assemblies...");
                        EditorUtility.RequestScriptReload();
#else
                        Debug.LogWarning("AGX Dynamics binaries aren't properly loaded into Unity - restart Unity manually.");
#endif
                    }

                    return(EnvironmentState.Uninitialized);
                }
                catch (Exception e) {
                    Debug.LogException(e);
                    return(EnvironmentState.Uninitialized);
                }

                if (!AGXUnity.IO.Environment.IsSet(AGXUnity.IO.Environment.Variable.AGX_DIR))
                {
                    AGXUnity.IO.Environment.Set(AGXUnity.IO.Environment.Variable.AGX_DIR,
                                                IO.Utils.AGXUnityPluginDirectoryFull);
                }

                if (!AGXUnity.IO.Environment.IsSet(AGXUnity.IO.Environment.Variable.AGX_PLUGIN_PATH))
                {
                    AGXUnity.IO.Environment.Set(AGXUnity.IO.Environment.Variable.AGX_PLUGIN_PATH,
                                                IO.Utils.AGXUnityPluginDirectoryFull + Path.DirectorySeparatorChar + "agx");
                }

                var envInstance = agxIO.Environment.instance();
                for (int i = 0; i < (int)agxIO.Environment.Type.NUM_TYPES; ++i)
                {
                    envInstance.getFilePath((agxIO.Environment.Type)i).clear();
                }

                envInstance.getFilePath(agxIO.Environment.Type.RESOURCE_PATH).pushbackPath(".");
                envInstance.getFilePath(agxIO.Environment.Type.RESOURCE_PATH).pushbackPath(IO.Utils.AGXUnityPluginDirectoryFull);
                envInstance.getFilePath(agxIO.Environment.Type.RESOURCE_PATH).pushbackPath(AGXUnity.IO.Environment.Get(AGXUnity.IO.Environment.Variable.AGX_PLUGIN_PATH));
                envInstance.getFilePath(agxIO.Environment.Type.RUNTIME_PATH).pushbackPath(AGXUnity.IO.Environment.Get(AGXUnity.IO.Environment.Variable.AGX_PLUGIN_PATH));
            }
            else
            {
                ExternalAGXInitializer.Initialize();
            }

            // This validate is only for "license status" window so
            // the user will be noticed when something is wrong.
            try {
                AGXUnity.NativeHandler.Instance.ValidateLicense();
                if (EditorSettings.Instance.AGXDynamics_LogEnabled &&
                    !string.IsNullOrEmpty(EditorSettings.Instance.AGXDynamics_LogPath.Trim()))
                {
                    agx.Logger.instance().openLogfile(EditorSettings.Instance.AGXDynamics_LogPath.Trim(),
                                                      true,
                                                      true);
                }
            }
            catch (Exception) {
                return(EnvironmentState.Uninitialized);
            }

            return(EnvironmentState.Initialized);
#endif
        }
예제 #2
0
        internal static EnvironmentState ConfigureEnvironment()
        {
#if AGXUNITY_UPDATING
            Debug.LogWarning("AGX Dynamics for Unity is currently updating...");
            return(EnvironmentState.Updating);
#else
            // WARNING INFO:
            //     Unity 2018, 2019: AGX Dynamics for Unity compiles but undefined behavior
            //                       in players with API compatibility @ .NET Standard 2.0.
            //     Unity 2017: AGX Dynamics for Unity won't compile due to
            if (PlayerSettings.GetApiCompatibilityLevel(BuildTargetGroup.Standalone) != ApiCompatibilityLevel.NET_4_6)
            {
                Debug.LogWarning(AGXUnity.Utils.GUI.AddColorTag("<b>WARNING:</b> ", Color.yellow) +
                                 "AGX Dynamics for Unity requires .NET API compatibility level: .NET 4.x.\n" +
                                 "<b>Edit -> Project Settings... -> Player -> Other Settings -> Configuration -> Api Compatibility Level -> .NET 4.x</b>");
            }

            // Running from within the editor - two options:
            //   1. Unity has been started from an AGX environment => do nothing.
            //   2. AGX Dynamics dll's are present in the plugins directory => setup
            //      environment file paths.
            var binariesInProject = IO.Utils.AGXDynamicsInstalledInProject;
            if (binariesInProject)
            {
                // This is necessary when e.g., terrain dynamically loads dll's.
                AGXUnity.IO.Environment.AddToPath(IO.Utils.AGXUnityPluginDirectoryFull);

                var initSuccess = false;
                try {
                    AGXUnity.NativeHandler.Instance.Register(null);

                    initSuccess = true;
                }
                catch (Exception) {
                }

                if (!HandleScriptReload(initSuccess))
                {
                    return(EnvironmentState.Uninitialized);
                }

                if (!AGXUnity.IO.Environment.IsSet(AGXUnity.IO.Environment.Variable.AGX_DIR))
                {
                    AGXUnity.IO.Environment.Set(AGXUnity.IO.Environment.Variable.AGX_DIR,
                                                IO.Utils.AGXUnityPluginDirectoryFull);
                }

                if (!AGXUnity.IO.Environment.IsSet(AGXUnity.IO.Environment.Variable.AGX_PLUGIN_PATH))
                {
                    AGXUnity.IO.Environment.Set(AGXUnity.IO.Environment.Variable.AGX_PLUGIN_PATH,
                                                IO.Utils.AGXUnityPluginDirectoryFull + Path.DirectorySeparatorChar + "agx");
                }

                var envInstance = agxIO.Environment.instance();
                for (int i = 0; i < (int)agxIO.Environment.Type.NUM_TYPES; ++i)
                {
                    envInstance.getFilePath((agxIO.Environment.Type)i).clear();
                }

                // Adding Plugins/x86_64/agx to RESOURCE_PATH (for additional data) and
                // to RUNTIME_PATH (for entities and components). The license file is
                // searched for by the license manager.
                var dataAndRuntimePath = AGXUnity.IO.Environment.Get(AGXUnity.IO.Environment.Variable.AGX_PLUGIN_PATH);
                envInstance.getFilePath(agxIO.Environment.Type.RESOURCE_PATH).pushbackPath(dataAndRuntimePath);
                envInstance.getFilePath(agxIO.Environment.Type.RUNTIME_PATH).pushbackPath(dataAndRuntimePath);
            }
            // Check if user would like to initialize AGX Dynamics with an
            // installed (or Algoryx developer) version.
            else
            {
                if (!HandleScriptReload(ExternalAGXInitializer.Initialize()))
                {
                    return(EnvironmentState.Uninitialized);
                }
            }

            // This validate is only for "license status" window so
            // the user will be noticed when something is wrong.
            try {
                AGXUnity.LicenseManager.LoadFile();

                AGXUnity.NativeHandler.Instance.ValidateLicense();
                if (EditorSettings.Instance.AGXDynamics_LogEnabled &&
                    !string.IsNullOrEmpty(EditorSettings.Instance.AGXDynamics_LogPath.Trim()))
                {
                    agx.Logger.instance().openLogfile(EditorSettings.Instance.AGXDynamics_LogPath.Trim(),
                                                      true,
                                                      true);
                }
            }
            catch (Exception) {
                return(EnvironmentState.Uninitialized);
            }

            return(EnvironmentState.Initialized);
#endif
        }