Download Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs from ashish2244/ppo-SnowballTarget: direct link, hf CLI and curl.
- Browser
- Download file 2.44 kB
-
https://huggingface.co/ashish2244/ppo-SnowballTarget/resolve/main/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs
- Command line
-
hf download hf://ashish2244/ppo-SnowballTarget/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs
-
curl -L -o PushAgentCollab.cs https://huggingface.co/ashish2244/ppo-SnowballTarget/resolve/main/Project/Assets/ML-Agents/Examples/PushBlock/Scripts/PushAgentCollab.cs
2.44 kB
| //Put this script on your blue cube. | |
| using UnityEngine; | |
| using Unity.MLAgents; | |
| using Unity.MLAgents.Actuators; | |
| public class PushAgentCollab : Agent | |
| { | |
| private PushBlockSettings m_PushBlockSettings; | |
| private Rigidbody m_AgentRb; //cached on initialization | |
| protected override void Awake() | |
| { | |
| base.Awake(); | |
| m_PushBlockSettings = FindAnyObjectByType<PushBlockSettings>(); | |
| } | |
| public override void Initialize() | |
| { | |
| // Cache the agent rb | |
| m_AgentRb = GetComponent<Rigidbody>(); | |
| } | |
| /// <summary> | |
| /// Moves the agent according to the selected action. | |
| /// </summary> | |
| public void MoveAgent(ActionSegment<int> act) | |
| { | |
| var dirToGo = Vector3.zero; | |
| var rotateDir = Vector3.zero; | |
| var action = act[0]; | |
| switch (action) | |
| { | |
| case 1: | |
| dirToGo = transform.forward * 1f; | |
| break; | |
| case 2: | |
| dirToGo = transform.forward * -1f; | |
| break; | |
| case 3: | |
| rotateDir = transform.up * 1f; | |
| break; | |
| case 4: | |
| rotateDir = transform.up * -1f; | |
| break; | |
| case 5: | |
| dirToGo = transform.right * -0.75f; | |
| break; | |
| case 6: | |
| dirToGo = transform.right * 0.75f; | |
| break; | |
| } | |
| transform.Rotate(rotateDir, Time.fixedDeltaTime * m_PushBlockSettings.agentRotationSpeed); | |
| m_AgentRb.AddForce(dirToGo * m_PushBlockSettings.agentRunSpeed, | |
| ForceMode.VelocityChange); | |
| } | |
| /// <summary> | |
| /// Called every step of the engine. Here the agent takes an action. | |
| /// </summary> | |
| public override void OnActionReceived(ActionBuffers actionBuffers) | |
| { | |
| // Move the agent using the action. | |
| MoveAgent(actionBuffers.DiscreteActions); | |
| } | |
| public override void Heuristic(in ActionBuffers actionsOut) | |
| { | |
| var discreteActionsOut = actionsOut.DiscreteActions; | |
| if (Input.GetKey(KeyCode.D)) | |
| { | |
| discreteActionsOut[0] = 3; | |
| } | |
| else if (Input.GetKey(KeyCode.W)) | |
| { | |
| discreteActionsOut[0] = 1; | |
| } | |
| else if (Input.GetKey(KeyCode.A)) | |
| { | |
| discreteActionsOut[0] = 4; | |
| } | |
| else if (Input.GetKey(KeyCode.S)) | |
| { | |
| discreteActionsOut[0] = 2; | |
| } | |
| } | |
| } | |