ppo-Pyramids-Training / Project /Assets /ML-Agents /Examples /SharedAssets /Scripts /ProjectSettingsOverrides.cs
| using UnityEngine; | |
| using Unity.MLAgents; | |
| namespace Unity.MLAgentsExamples | |
| { | |
| /// <summary> | |
| /// A helper class for the ML-Agents example scenes to override various | |
| /// global settings, and restore them afterwards. | |
| /// This can modify some Physics and time-stepping properties, so you | |
| /// shouldn't copy it into your project unless you know what you're doing. | |
| /// </summary> | |
| public class ProjectSettingsOverrides : MonoBehaviour | |
| { | |
| // Original values | |
| Vector3 m_OriginalGravity; | |
| float m_OriginalFixedDeltaTime; | |
| float m_OriginalMaximumDeltaTime; | |
| int m_OriginalSolverIterations; | |
| int m_OriginalSolverVelocityIterations; | |
| bool m_OriginalReuseCollisionCallbacks; | |
| [] | |
| public float gravityMultiplier = 1.0f; | |
| [] | |
| [] | |
| public float fixedDeltaTime = .02f; | |
| [] | |
| public float maximumDeltaTime = 1.0f / 3.0f; | |
| [] | |
| public int solverIterations = 6; | |
| [] | |
| public int solverVelocityIterations = 1; | |
| [] | |
| public bool reuseCollisionCallbacks = true; | |
| public void Awake() | |
| { | |
| // Save the original values | |
| m_OriginalGravity = Physics.gravity; | |
| m_OriginalFixedDeltaTime = Time.fixedDeltaTime; | |
| m_OriginalMaximumDeltaTime = Time.maximumDeltaTime; | |
| m_OriginalSolverIterations = Physics.defaultSolverIterations; | |
| m_OriginalSolverVelocityIterations = Physics.defaultSolverVelocityIterations; | |
| m_OriginalReuseCollisionCallbacks = Physics.reuseCollisionCallbacks; | |
| // Override | |
| Physics.gravity *= gravityMultiplier; | |
| Time.fixedDeltaTime = fixedDeltaTime; | |
| Time.maximumDeltaTime = maximumDeltaTime; | |
| Physics.defaultSolverIterations = solverIterations; | |
| Physics.defaultSolverVelocityIterations = solverVelocityIterations; | |
| Physics.reuseCollisionCallbacks = reuseCollisionCallbacks; | |
| // Make sure the Academy singleton is initialized first, since it will create the SideChannels. | |
| Academy.Instance.EnvironmentParameters.RegisterCallback("gravity", f => { Physics.gravity = new Vector3(0, -f, 0); }); | |
| } | |
| public void OnDestroy() | |
| { | |
| Physics.gravity = m_OriginalGravity; | |
| Time.fixedDeltaTime = m_OriginalFixedDeltaTime; | |
| Time.maximumDeltaTime = m_OriginalMaximumDeltaTime; | |
| Physics.defaultSolverIterations = m_OriginalSolverIterations; | |
| Physics.defaultSolverVelocityIterations = m_OriginalSolverVelocityIterations; | |
| Physics.reuseCollisionCallbacks = m_OriginalReuseCollisionCallbacks; | |
| } | |
| } | |
| } | |