Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Como mover un cubo a una dirección aleatoria?

Iniciado por Aprendetoga, Diciembre 01, 2013, 09:26:11 PM

Tema anterior - Siguiente tema
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

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!.

No me funciono o sea salen para distintos lados y no cambian la direccion y uno se va hacia arriba

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.

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.

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[/quote]

#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);   

}



eature=oembed" frameborder="0" allowfullscreen="true">

Enlace de descarga.

Si tienes alguna duda, pregunta.

Muchas gracias Utilize un random.range y fui poniendo un if cada ves que sucede algo y ya quedo gracias por la onda


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

Etiquetas: