ppo-Pyramids-Training / com.unity.ml-agents.extensions /Tests /Runtime /Input /InputActuatorComponentTests.cs
| using System; | |
| using System.Linq; | |
| using NUnit.Framework; | |
| using Unity.MLAgents.Actuators; | |
| using Unity.MLAgents.Extensions.Input; | |
| using Unity.MLAgents.Policies; | |
| using UnityEngine; | |
| using UnityEngine.InputSystem; | |
| namespace Unity.MLAgents.Extensions.Tests.Runtime.Input | |
| { | |
| class TestProvider : MonoBehaviour, IInputActionAssetProvider | |
| { | |
| public InputActionAsset asset; | |
| public IInputActionCollection2 collection; | |
| public (InputActionAsset, IInputActionCollection2) GetInputActionAsset() | |
| { | |
| return (asset, collection); | |
| } | |
| } | |
| public class InputActuatorComponentTests : InputTestFixture | |
| { | |
| InputActionAsset m_Asset; | |
| GameObject m_GameObject; | |
| PlayerInput m_PlayerInput; | |
| BehaviorParameters m_BehaviorParameters; | |
| InputActuatorComponent m_ActuatorComponent; | |
| TestPushBlockActions m_Actions; | |
| TestProvider m_Provider; | |
| public override void Setup() | |
| { | |
| base.Setup(); | |
| m_Actions = new TestPushBlockActions(); | |
| m_Asset = m_Actions.asset; | |
| m_GameObject = new GameObject(); | |
| m_PlayerInput = m_GameObject.AddComponent<PlayerInput>(); | |
| m_Provider = m_GameObject.AddComponent<TestProvider>(); | |
| m_Provider.asset = m_Asset; | |
| m_Provider.collection = m_Actions; | |
| m_ActuatorComponent = m_GameObject.AddComponent<InputActuatorComponent>(); | |
| m_BehaviorParameters = m_GameObject.AddComponent<BehaviorParameters>(); | |
| m_BehaviorParameters.BehaviorName = "InputTest"; | |
| m_BehaviorParameters.BehaviorType = BehaviorType.Default; | |
| } | |
| public override void TearDown() | |
| { | |
| m_ActuatorComponent.CleanupActionAsset(); | |
| var objects = GameObject.FindObjectsOfType<GameObject>(); | |
| foreach (var o in objects) | |
| { | |
| UnityEngine.Object.DestroyImmediate(o); | |
| } | |
| base.TearDown(); | |
| } | |
| [] | |
| public void InputActuatorComponentTestCreateActuators() | |
| { | |
| // Use the Assert class to test conditions. | |
| m_PlayerInput.actions = m_Asset; | |
| m_PlayerInput.defaultActionMap = m_Asset.actionMaps[0].name; | |
| var actuators = m_ActuatorComponent.CreateActuators(); | |
| Assert.IsTrue(actuators.Length == 2); | |
| Assert.IsTrue(actuators[0].ActionSpec.Equals(ActionSpec.MakeContinuous(2))); | |
| Assert.IsTrue(actuators[1].ActionSpec.NumDiscreteActions == 1); | |
| var actuatorComponentActionSpec = m_ActuatorComponent.ActionSpec; | |
| Assert.IsTrue(actuatorComponentActionSpec.BranchSizes.SequenceEqual(new[] {2})); | |
| Assert.IsTrue(actuatorComponentActionSpec.NumContinuousActions == 2); | |
| } | |
| [] | |
| public void InputActuatorComponentTestGenerateActuatorsFromAsset() | |
| { | |
| // Use the Assert class to test conditions. | |
| m_PlayerInput.actions = m_Asset; | |
| m_PlayerInput.defaultActionMap = m_Asset.actionMaps[0].name; | |
| var inputActionMap = m_Asset.FindActionMap(m_PlayerInput.defaultActionMap); | |
| InputActuatorComponent.RegisterLayoutBuilder( | |
| inputActionMap, | |
| "TestLayout"); | |
| var device = InputSystem.AddDevice("TestLayout"); | |
| var actuators = InputActuatorComponent.CreateActuatorsFromMap(inputActionMap, m_BehaviorParameters, device, new InputActuatorEventContext()); | |
| Assert.IsTrue(actuators.Length == 2); | |
| Assert.IsTrue(actuators[0].ActionSpec.Equals(ActionSpec.MakeContinuous(2))); | |
| Assert.IsTrue(actuators[1].ActionSpec.NumDiscreteActions == 1); | |
| } | |
| [] | |
| public void InputActuatorComponentTestCreateDevice() | |
| { | |
| // Use the Assert class to test conditions. | |
| m_PlayerInput.actions = m_Asset; | |
| m_PlayerInput.defaultActionMap = m_Asset.actionMaps[0].name; | |
| // need to call this to load the layout in the input system | |
| InputActuatorComponent.RegisterLayoutBuilder( | |
| m_Asset.FindActionMap(m_PlayerInput.defaultActionMap), | |
| "TestLayout"); | |
| InputSystem.LoadLayout("TestLayout"); | |
| var device = InputSystem.AddDevice("TestLayout"); | |
| Assert.AreEqual("TestLayout", device.layout); | |
| Assert.IsTrue(device.children.Count == 2); | |
| Assert.AreEqual(device.children[0].path, $"{device.path}{InputControlPath.Separator}movement"); | |
| Assert.AreEqual(device.children[1].path, $"{device.path}{InputControlPath.Separator}jump"); | |
| Assert.NotNull(InputSystem.LoadLayout("TestLayout")); | |
| } | |
| } | |
| } | |