Noticias

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

instanciando por codigo un "sabio"

Iniciado por lozdanmultimedial, Abril 29, 2016, 01:13:40 AM

Tema anterior - Siguiente tema
HOla a todos. deso instanciar por codigo un NPC que personifica a un sabio galáctico, de tal manera que las coordenadas del NPC en el momento de instanciarse esten del jugador a + 50 unidades hasta + 70 unidades en el eje x y en el mismo rango en el eje z (la distancia exacta se define randómicamente en ambos ejes).El jugador posee un collider esferico de de 0.5 u de radio y su escala es de 10 u en cada uno de los tres ejes., cuando el codigo instancia al sabio lo hace chocando el collider por lo cual concluyo que lo hace en en valores de coordenadas a los que deseo.Adjunto el código para ver donde esta el error. Muchas gracias a todos 
http://unityspain.com/applications/core/interface/file/attachment.php?id=9560">aparecedorSabios.js

la distancia exacta se define randómicamente en ambos ejes[/quote]Randómicamente ! Ha sido inventado un nuevo palabro!!!  En tu código, no estás haciendo ningún uso del radio mínimo de colisión para filtrar el Update y puede que lo esté omitiendo.  También puede que al estar escalado el jugador, esos valores que le das no son suficientes para que traspase el radio de colisión, y debas multiplicarlos por la escala actual que tiene el jugador (o sea, x 10u). Recuerda que siempre puedes intercalar un Debug.Break() en tu código para ir mirando paso a paso qué se está haciendo realmente.

Soy artista y los artistas creamos cosas jajaj. GRacias por tu ayuda pioj.

Abril 29, 2016, 06:17:39 PM #3 Ultima modificación: Abril 29, 2016, 06:20:33 PM por francoe1
El problema radica en que en realidad estás moviendo el Objeto que tenga asignado "AparecedorSabios", quiero decir :
conteoRegresivo -= Time.deltaTime;
if(conteoRegresivo <= 0)
{
  transform.position.x += Random.Range(-randomX, randomX);
  transform.position.y = 1;
  transform.position.z += Random.Range(301, randomZ);
  Instantiate(sabiondo, transform.position, transform.rotation);      
  conteoRegresivo += Random.Range(143,161);      
}
Estas modificando la posicion del Transform del actual componente. Luego cuando Instancias el Sabiondo lo haces exactamente en la misma posicion. No sabría decirte si es correcto o no, pero a simple vista parece un error.¿No deberias crear un Vector3 Nuevo?
var SpawnPosition = new Vector3(Random.Range(50,70),1,Random.Range(50,70));
//Los Resultados de X y Z serán siempre Positivos, podrias crear un Random para cambiar su valor..
Instantiate(Objecto,Player.transform.position + SpawnPosition,Quaternion.identity);
Fijate que le sume la posicion del Jugador, entonces el Vector3 de SpawnPosition nos dará siempre un resultado con los límites establecidos que luego los usaremos como una referencia relativa al espacio, esto quiere decir que si a la posicion relativa le sumamos una absoluta entonces nos dara una nueva posicion absoluta que es la que necesitarás para crear el efecto que deseas. Evita tambien utilizar esta implementacion. 
conteoRegresivo -= Time.deltaTime;
Tratá de comprobar con Time.time
private float tmp_Wait;

private bool CheckWait(float Wait)
{
    if(tmp_Wait < Time.time)
    {
        tmp_Wait = Wait + Time.time;
        return true;
    }
    else   return true;
}
Espero haberte ayudado.Saludos -.

MUchas gracias por tu aporte francoe1. Probaremos tu sugerencia a ver que sucede.

TEMA SOLUCIONADO    GRACIAS A TODOS.

Etiquetas: