Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 15,00€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales
Sign in to follow this  
Aprendetoga

Como mover un cubo a una dirección aleatoria?

Recommended Posts

Hola alguien me pude ayudar con esto? estoy haciendo mi propia IA y no logro hacer para que el enemigo camine en dirección aleatoria (random), y que no se eleve o sea no se vaya al eje y. Supongamos que es el enemigo es un cubo como lo puedo mover en direccion aleatoria? Saludos

Share this post


Link to post
Share on other sites

Mmmm, podrias hacer algo como esto (no se en que programas pero yo lo hago en UnityScript (Javascript)):

var movimiento : int;

function Start () {
	movimiento = Random.Range(0,4);
	print(movimiento);
}

function Update(){
	if (movimiento == 0){
		transform.Translate(Vector3.forward * 5 * Time.deltaTime);
	}
	else if (movimiento == 1){
		transform.Translate(Vector3.back * 5 * Time.deltaTime);
	}
	else if (movimiento == 2){
		transform.Translate(Vector3.up * 5 * Time.deltaTime);
	}
	else if (movimiento == 3){
		transform.Translate(Vector3.down * 5 * Time.deltaTime);
	}
}

En la funcion Start() tiro un random para dedicir hacia que lado se va a mover, y luego en el update pregunto que numero es, y lo muevo en dicha direccion, es algo muy simple. En el Start() fijate que puse un print, es para que en la consola se muestre el numero, asi se que tal numero, corresponde a tal movimiento dentro del scripts, ya despues es modificarlo para quitar los que no te sirvan. Es algo muy sencillo, asi que no esperes milagros de ese codigo. Un saludo. EDIT: fijate que el Random.Range esta entre 0 y 4, esto es porque al colocarlo asi, genera numeros enteros en vez de coma flotante, por lo que en numero enteros, deja el ultimo numero fuera, si queres randomizar entre 1 y 10, tendrias que poner Random.Range(1,11), ya que el primer numero es inclusivo, y el segundo exclusivo, osea, no lo va a tirar nunca. En el caso de que quieras con coma flotante, seria Random.Range(1.0,10.0), ya que en las variables Float (o coma flotante), es "inclusivo, inclusivo", lo que significa que si queres hacer un random entre 1 y 10 con coma flotante, seria lo que ya escribi antes. Ahora si. Un saludo!.

Share this post


Link to post
Share on other sites

Este par de lineas obtienen una dirección aleatoria en la x y en la z. La altura la puedes definir tu, o en caso de usar character controller, podría ser directamente la gravedad..

Vector 3 moveDir = new Vector3(Random.value,height,Random.value);
transform.position += moveDir * Time.deltaTime * velocity;

Ya para que cambien de dirección, tendrías que hacer una maquina de estados. Busca por el foro, encontraras información. Suerte.

Share this post


Link to post
Share on other sites

Hay que poner un poco de tu parte... el movimiento 2 dice Vector3.up que es igual a Vector3(0,1,0), es decir, moverse en positivo en eje Y. Si no quieres que lo haga, lo quitas. No es una manera fascinante para hacer lo que necesitas, pero para empezar a entender cosas puede ser suficiente. Y si quieres que el movimiento cambie, por sentido común, lo que tienes que conseguir es cambiar el valor de la variable "movimiento" más veces, según cuanto te interese que cambie de direccion. Para eso comienzas una coroutina en el Start, que cambie cada X tiempo haciendo un random como lo que te dijeron.

Share this post


Link to post
Share on other sites
Hola alguien me pude ayudar con esto? estoy haciendo mi propia IA y no logro hacer para que el enemigo camine en dirección aleatoria (random), y que no se eleve o sea no se vaya al eje y. Supongamos que es el enemigo es un cubo como lo puedo mover en direccion aleatoria? Saludos
#pragma strict

var velocidad : float = 5.0;

private var direccion : Vector3;

private var hit1 : RaycastHit;
private var hit2 : RaycastHit;
private var hit3 : RaycastHit;

private var derecha45   : Quaternion;
private var izquierda45 : Quaternion;

private var controller : CharacterController;

function Start () {

	direccion   = Vector3(Random.Range(-1.0,1.0),0.0,Random.Range(-1.0,1.0));
	derecha45   = Quaternion.Euler(0.0,45.0,0.0);
	izquierda45 = Quaternion.Euler(0.0,-45.0,0.0);
	
	controller = GetComponent(CharacterController);

}

function FixedUpdate () {

	var frente    : Vector3 =             direccion;
	var derecha   : Vector3 = derecha45  *direccion;
	var izquierda : Vector3 = izquierda45*direccion;
	
	if(!Physics.Raycast(transform.position,frente   ,hit1,20.0)) hit1.distance=20.0;
	if(!Physics.Raycast(transform.position,derecha  ,hit2,20.0)) hit2.distance=20.0;
	if(!Physics.Raycast(transform.position,izquierda,hit3,20.0)) hit3.distance=20.0;
	
	direccion = (hit1.distance*frente + hit2.distance*derecha + hit3.distance*izquierda) / 3.0; //Media
	direccion.Normalize();
	direccion.y=0.0;
	
	controller.SimpleMove(direccion*velocidad);	

}

Enlace de descarga. Si tienes alguna duda, pregunta.

Share this post


Link to post
Share on other sites

se que el post es viejo, pero, al poner ese script, al personaje al que se lo agrego (una mosca) se mueve, pero solo se mueve un poquit por ejemplo si en el vare de moviemiento, esta el numero 2 que vendria a ser el de subir (up) la mosca sube, pero solo un poquito y alli se queda, al igual que si le pongo el 0, o el 1, o el 3, se mueve un poquito para el lado correspondiente pero solo un poquito y alli se queda

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...