Untitled
unknown
plain_text
a year ago
3.4 kB
12
Indexable
using UnityEngine;
using Unity.MLAgents;
using Unity.MLAgents.Sensors;
using Unity.MLAgents.Actuators;
namespace Completed
{
public class PlayerAgent : Agent
{
public enum PenaltyStyle
{
Reward,
Termination
}
private Player player;
[SerializeField] private GameManager gameManager;
public bool banana = false;
public PenaltyStyle penaltyStyle;
public float dmg;
private Rigidbody2D rb2d;
private SpriteRenderer sr;
void Start()
{
Application.runInBackground = true;
player = GetComponent<Player>();
rb2d = GetComponent<Rigidbody2D>();
sr = GetComponent<SpriteRenderer>();
if (player == null)
{
Debug.LogError("Player component not found on the GameObject.");
}
if (gameManager == null)
{
Debug.LogError("GameManager not assigned in the inspector.");
}
Debug.Log("Player agent has been initialized.");
}
public void OnEpisodeEnd()
{
Academy.Instance.StatsRecorder.Add("Phase Reached", gameManager.phase);
}
public override void CollectObservations(VectorSensor sensor)
{
sensor.AddObservation(transform.position.x);
sensor.AddObservation(transform.position.y);
sensor.AddObservation(transform.rotation);
}
public override void OnActionReceived(ActionBuffers actionBuffers)
{
int action_chosen = actionBuffers.DiscreteActions[0];
Debug.Log("Action chosen = " + action_chosen + ", " + actionBuffers.DiscreteActions[1]);
int rotate = actionBuffers.DiscreteActions[0];
int strafe = actionBuffers.DiscreteActions[1];
player.Movement_V1(rotate, strafe);
}
public override void Heuristic(in ActionBuffers actionsOut)
{
var actions = actionsOut.DiscreteActions;
//Debug.Log("actions: " + actions[0] + " " + actions[1]);
}
#region handle
public void FoundPowerup()
{
AddReward(0.2f);
}
public void LostShield()
{
AddReward(-0.2f);
}
public void DestroyBoss()
{
AddReward(0.2f);
}
public void DestroyBossSpawn()
{
AddReward(0.4f);
}
public void GameLose()
{
AddReward(-1.0f);
}
public void HealthLoss()
{
AddReward(-0.2f);
}
public void HealthGain()
{
AddReward(0.3f);
}
public void DestroySpawner()
{
AddReward(0.4f);
}
public void DestroyEnemy()
{
AddReward(0.1f);
}
public void AdvancedHardPhase()
{
AddReward(0.5f);
}
public void AdvancedPhase()
{
AddReward(0.2f);
}
public void WonGame()
{
AddReward(1.0f);
}
#endregion
}
}
Editor is loading...
Leave a Comment