Untitled
unknown
plain_text
a year ago
3.2 kB
16
Indexable
using System.Collections;
using System.Collections.Generic;
using Unity.MLAgents;
using Unity.MLAgents.Actuators;
using Unity.MLAgents.Sensors;
using UnityEngine;
//playeragent without status
public class PlayerAgent : Agent
{
public enum PenaltyStyle
{
Reward,
Termination
}
public int lives;
public int playerscore;
private Rigidbody2D rb2d;
private SpriteRenderer sr;
public GameManager manager;
public PenaltyStyle penaltyStyle;
public float dmg;
public int phaseReached;
public Player _playerScript;
public PlayerStatus status;
public UIManager _uiManager;
// Start is called before the first frame update
void Start()
{
lives = _playerScript.lives;
playerscore = _uiManager.score;
phaseReached = manager.phase;
Application.runInBackground = true;
rb2d = GetComponent<Rigidbody2D>();
sr = GetComponent<SpriteRenderer>();
Debug.Log("player agent has been called");
_playerScript = GetComponent<Player>(); // Ensure this is correctly assigned
}
public override void OnEpisodeBegin()
{
// When comparing agent configurations, it's best to have performance meausures that aren't
// swayed by the reward setup used. You can use Academy.Instance.StatsRecorder.Add() to add
// extra data to TensorBoard.
if (phaseReached != -1)
{
Academy.Instance.StatsRecorder.Add("Phase Reached", phaseReached);
Academy.Instance.StatsRecorder.Add("player Score", playerscore);
}
dmg = 0;
manager.newGame();
}
public void HandlePhaseAdvance()
{
Debug.LogError("phase" + phaseReached);
AddReward(1.0f);
}
public void HandleDamage()
{
dmg++;
if (penaltyStyle == PenaltyStyle.Reward)
{
AddReward(dmg);
}
else
{
EndEpisode();
}
}
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]);
// Debug.LogError("player score: " + playerscore);
// Debug.LogError("player lives: " + lives);
// Debug.LogError("phase reached " + phaseReached);
int rotate = actionBuffers.DiscreteActions[0];
int strafe = actionBuffers.DiscreteActions[1];
_playerScript.Movement_V1(rotate, strafe);
}
public override void Heuristic(in ActionBuffers actionsOut)
{
var actions = actionsOut.DiscreteActions;
//Debug.Log("actions: " + actions[0] + " " + actions[1]);
}
private void Update()
{
//playerscore++;
}
}
Editor is loading...
Leave a Comment