using System; using UnityEngine; using UnityEngine.UI; using MLAgents; using MLAgents.SideChannels; public class FoodCollectorSettings : MonoBehaviour { [HideInInspector] public GameObject[] agents; [HideInInspector] public FoodCollectorArea[] listArea; public int totalScore; public Text scoreText; StatsSideChannel m_statsSideChannel; public void Awake() { Academy.Instance.OnEnvironmentReset += EnvironmentReset; m_statsSideChannel = SideChannelUtils.GetSideChannel(); } public void EnvironmentReset() { ClearObjects(GameObject.FindGameObjectsWithTag("food")); ClearObjects(GameObject.FindGameObjectsWithTag("badFood")); agents = GameObject.FindGameObjectsWithTag("agent"); listArea = FindObjectsOfType(); foreach (var fa in listArea) { fa.ResetFoodArea(agents); } totalScore = 0; } void ClearObjects(GameObject[] objects) { foreach (var food in objects) { Destroy(food); } } public void Update() { scoreText.text = $"Score: {totalScore}"; // Send stats via SideChannel so that they'll appear in TensorBoard. // These values get averaged every summary_frequency steps, so we don't // need to send every Update() call. if ((Time.frameCount % 100)== 0) { m_statsSideChannel?.AddStat("TotalScore", totalScore); } } }