Adrián Sanz Fernández - alu0101686400@ull.edu.es
1 - Crea un script asociado al cubo que inicialice un array a un conjunto de valores numéricos aleatorios entre 0 y 25. En cada frame se debe cambiar una posición aleatoria y mostrar en pantalla en la consola los que sean mayores que 15. Parametrizar el rango para poderlo cambiar desde el inspector.
He añadido el script p2_1 como componente al cubo. Para que se pueda cambiar desde el inspector he definido como public los dos valores.
public int minValue = 0;
public int maxValue = 25;
randomArray[i] = Random.Range(minValue, maxValue + 1); // Numeros aleatorios entre 0 y 25, +1 para que incluya el 25.
2 - Crea una escena simple en la que ubiques un plano y sobre él un cubo, una esfera y un cilindro. Cada uno de los objetos debe estar en un color diferente. En la consola cada objeto debe mostrar su nombre.
He añadido el script p2_2 como componente a cada objeto.
3 - Crea un script asociado a la esfera con dos variables Vector3 públicas. Dale valor a cada componente de los vectores desde el inspector. Muestra en la consola:
Declaro los vectores publicos
public Vector3 vectorA;
public Vector3 vectorB;
Busque en la documentacion de Vector3 la propiedad de magnitud https://docs.unity3d.com/ScriptReference/Vector3-magnitude.html
float magnitudeA = vectorA.magnitude;
float magnitudeB = vectorB.magnitude;
https://docs.unity3d.com/ScriptReference/Vector3.Angle.html
float angleDegrees = Vector3.Angle(vectorA, vectorB);
https://docs.unity3d.com/ScriptReference/Vector3.Distance.html
float distance = Vector3.Distance(vectorA, vectorB);
Para ello hice un condicional que comprueba los distintos casos.
5 - Crea un script para la esfera que muestre en consola la distancia a la que están el cubo y el cilindro.
Primeramente, creo tags para cada objeto para poder asignarlos.
He hecho public los tags para poder modificarlos desde el inspector.
6 - Crea un script que alinee el cilindro y el cubo con la esfera, 5 unidades a derecha e izquierda respectivamente en el eje X. Prueba a cambiar a cambiar la coordenada x de la posición de la esfera en el Inspector de Objetos.
Busco por tags, creo un vector3 nuevo para el cilindro y el cubo y le aplico la posicion x de la esfera para estar alineados a esta. Sumo y resto 5.0 para que se desplace a la derecha e izquierda. Cuando cambio la X de la esfera, se desplaza todo en el eje x, ya que esta puesto dentro del update y cada frame cambia.
7 - Cambia el color del cilindro cuando el usuario pulse la tecla A, cambia el color del cubo cuando el usuario pulse la flecha arriba.
Seguimos los pasos del enunciado para acceder a las propiedades de los materiales.
// Obtiene los materiales de los objetos cilindro y cubo
cilindroMaterial = cilindro.GetComponent<Renderer>().material;
cuboMaterial = cubo.GetComponent<Renderer>().material;
// Si se presiona la tecla A
if (Input.GetKeyDown(KeyCode.A))
{
cilindroMaterial.color = Color.yellow;
}
// Si se presiona la flecha arriba
if (Input.GetKeyDown(KeyCode.UpArrow))
{
cuboMaterial.color = Color.blue;
}
8 - Agrega 5 esferas más en la escena. Crea un grupo de 2 , asígnales la misma etiqueta y a las restantes otra etiqueta diferente a ésta. Crea un vector con las distancias de cada una de las del segundo grupo al cubo. Sube en altura (aumenta la y) de la esfera más cercana. Cambiar color de la más lejana cuando el jugador pulsa la tecla espacio.
Añado esferas mediante
GameObject
.3D Object
.Esfera
. Creo un nuevo grupo y le asigno a las 2 primeras el tag first_blue_esfera.
El resto que no estan en el grupo tienen el tag second_blue_esfera.
Hago un array con las esferas con cada tag diferente y el cubo.
GameObject[] esferas = GameObject.FindGameObjectsWithTag(esferaTag);
GameObject[] esferas_sec = GameObject.FindGameObjectsWithTag(esfera_groupTag);
GameObject cubo = GameObject.FindWithTag(cuboTag);
Recorro la el array de esferas y guardo al final la esfera con menor distancia al cubo.
foreach (GameObject esfera in esferas)
{
var distanceToCubo = Vector3.Distance(cubo.transform.position, esfera.transform.position);
if (distanceToCubo < distanciaMinima)
{
distanciaMinima = distanceToCubo;
esferaMasCercanaAlCubo = esfera;
}
}
Como en apartados anteriores, creo un vector con la nueva posición y se la cambio a la esfera más cercana.
Vector3 min_newPositionEsfera = new Vector3(esferaMasCercanaAlCubo.transform.position.x, esferaMasCercanaAlCubo.transform.position.y + 1.0f,esferaMasCercanaAlCubo.transform.position.z);
esferaMasCercanaAlCubo.transform.position = min_newPositionEsfera;
Lo pongo en el start para que lo haga al inciar.
Repetimos lo mismo pero al contrario para obtener la esfera mas lejana.
if (Input.GetKeyDown(KeyCode.Space))
{
esferaMaterial = esferaMasLejanaCubo.GetComponent<Renderer>().material;
esferaMaterial.color = Color.green;
}
Esta vez dentro del update para que se accione al tocar el espacio.