Para realizarlo Unity proporciona funciones especiales para usarlo en nuestra codificación, en esta ocasión utilizaremos la función:
Transform.RotateAround
Esta función nos permitirá girar sobre algún eje de referencia, está compuesta por los parámetros de la siguiente manera:
transform.RotateAround( Vector3 point, Vector3 axis, float angle );
El primer parámetro Vector3 point es la posición a cual queremos girar;
El segundo parámetro Vector3 axis es la referencia al eje que debe de girar.
El tercer parámetro float angle es el ángulo en que girar, pero al ponerla en el parámetro update esta se volvería la velocidad de giro que tendría.
Si deseamos que el objeto B gire al rededor del objeto A, entonces creamos un script y escribimos lo siguiente:
[SerializeField] GameObject objeto;
void Update()
{
transform.RotateAround(objeto.transform.position, Vector3.up, 20 * Time.deltaTime);
}
El script lo agregamos al objeto B, Después nos pedirá un objeto de referencia, entonces arrastramos el objeto A hasta el objeto de referencia, de esa manera el objeto B tendrá la posición para girar.
Al realizar la prueba el objeto B girara al rededor del objeto A.
Pasamos a explicar la función que utilizamos en el anterior ejemplo
Primer parámetro :
transform.RotateAround(objeto.transform.position, Vector3.up, 20 * Time.deltaTime);
Con el Primer parámetro estamos capturando la posición del objeto a cual debe de girar, además que captura la posición aunque este en movimiento, también se puede asignar una posición de otra manera escribiendo la posición de giro manualmente con un Vector3 y las coordenadas por ejemplo :
transform.RotateAround(new Vector3(0,0,0), Vector3.up, 20 * Time.deltaTime);
Con estos parámetros el objeto para el giro tendría la referencia de las coordenadas de 0.
Segundo parámetro:
transform.RotateAround(objeto.transform.position, Vector3.up, 20 * Time.deltaTime);
Con el Segundo parámetro le decimos al objeto que gire en el eje Y, el vector utiliza otra función que es up, esto es como escribir (0,1,0), también podemos introducir otras funciones como son :
Vector3.back = Vector3(0, 0, -1).
Vector3.Down = Vector3(0, -1, 0).
Vector3.forward = Vector3(0, 0, 1).
Vector3.left = Vector3(-1, 0, 0).
Vector3.one = Vector3(1, 1, 1).
Vector3.right = Vector3(1, 0, 0).
Vector3.up = Vector3(0, 1, 0).
Vector3.zero = Vector3(0, 0, 0).
Tercer parámetro:
transform.RotateAround(objeto.transform.position, Vector3.up, 20 * Time.deltaTime);
Con el tercer parámetro le decimos que gire con una velocidad de 20.
La función de PingPong nos permite realizar movimientos de un lado hacia el otro "ZIG ZAG", esta función se escribe de la siguiente manera:
Mathf.PingPong(Time.time, 8);
La primera función es sobre el tiempo real del juego para que vaya el objeto, si lo multiplicamos por algún valor será la velocidad a la vaya el objeto.
El segundo parámetro es la distancia que ira el objeto
Si deseamos que el objeto vaya en ZIG ZAG, entonces creamos un script y escribimos lo siguiente:
void Update()
{
transform.position = new Vector3 (Mathf.PingPong (Time.time, 4), 0,0);
}
Con este script lo agregamos a nuestro objeto y empezara a moverse en ZIG ZAG.
Pasamos a explicar el código del anterior ejemplo.
Primer Parámetro :
transform.position = new Vector3 (Mathf.PingPong (Time.time, 4),0,0);
En este primer parámetro para que se mueva nuestro objeto necesitamos crear un Vector3 para decirle sobre que eje se moverá.
Segundo Parámetro :
transform.position = new Vector3 (Mathf.PingPong (Time.time, 4),0,0);
En este segundo parámetro introducimos nuestra función de PingPong donde le estamos diciendo a nuestro objeto que vaya en el eje X, además de que recorra una distancia 4 desde su posición inicial.
Tercer Parámetro :
transform.position = new Vector3 (Mathf.PingPong (Time.time, 4),0,0);
En el tercer parámetro le decimos que la posición en el eje Y se mantenga.
Cuarto Parámetro :
transform.position = new Vector3 (Mathf.PingPong (Time.time, 4),0,0);
En el tercer parámetro le decimos que la posición en el eje Z se mantenga.
Para utilizar estas dos funciones debemos de introducir la función de PingPong al primer parámetro de la función RotateAround, ejemplo :
transform.RotateAround(objeto.transform.position = new Vector3 (Mathf.PingPong (Time.time, 10),0,0), Vector3.up, 20 * Time.deltaTime);
De esta manera el objeto A se moverá en zig zag y el Objeto B girara al rededor del objeto A
Lo único que hicimos fue agregar el código de PingPong en la función de RotateAround
transform.RotateAround(objeto.transform.position = new Vector3 (Mathf.PingPong (Time.time, 10),0,0), Vector3.up, 20 * Time.deltaTime);
Con el Primer parámetro fue donde se agrego el código de PingPong, así estamos capturando la posición del objeto a cual debe de girar, aunque este en movimiento el objeto girara al rededor de ella.