Curso de Inteligencia Artificial con ML-Agents de UNITY. Introducción.
Presentación y creación de nuestro primer proyecto con MLAgents
Cualquier duda o comentario de la lección podéis dejarla en el foro del curso.
En el vídeo hemos visto de que va nuestro primer proyecto. Hemos creado el proyecto en Unity, así como algunos de los scripts auxiliares.
Aquí tenemos el script creado para nuestro premio. Se encarga de mover el objeto que lo contiene a una nueva posición, pasados unos segundos, después de chocar con el agente.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Premio : MonoBehaviour { private void OnTriggerEnter(Collider other) { if (other.CompareTag("mlagent")) { Invoke("MoverPosicionInicial", 4); } } private void MoverPosicionInicial() { bool posicionEncontrada = false; int intentos = 100; Vector3 posicionPotencial = Vector3.zero; while (!posicionEncontrada && intentos >= 0) { intentos--; posicionPotencial = new Vector3( transform.parent.position.x + UnityEngine.Random.Range(-3f, 3f), 0.555f, transform.parent.position.z + UnityEngine.Random.Range(-3f, 3f)); //en el caso de que tengamos mas cosas en el escenario checker que no choca Collider[] colliders = Physics.OverlapSphere(posicionPotencial, 0.05f); if (colliders.Length == 0) { transform.position = posicionPotencial; posicionEncontrada = true; } } } }
Ahora vemos el script MoveBall, que lo usamos para mover la esfera, y lo usaremos tan solo para probar la mecanica del juego. Aunque el mismo código lo reutilizaremos mas adelante, para el script del agente.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class MoveBall : MonoBehaviour { Rigidbody _rb = null; public float speed = 400; void Start() { _rb = GetComponent<Rigidbody>(); } void FixedUpdate() { float moveHorizontal = Input.GetAxis("Horizontal"); float moveVertical = Input.GetAxis("Vertical"); Vector3 movement = new Vector3(moveHorizontal, 0f, moveVertical); _rb.AddForce(movement * speed * Time.deltaTime); } }