Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: lozdanmultimedial en Abril 29, 2016, 01:13:40 AM

Título: instanciando por codigo un "sabio"
Publicado por: lozdanmultimedial en Abril 29, 2016, 01:13:40 AM
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 
aparecedorSabios.js
Título: instanciando por codigo un "sabio"
Publicado por: pioj en Abril 29, 2016, 06:23:50 AM
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.
Título: instanciando por codigo un "sabio"
Publicado por: lozdanmultimedial en Abril 29, 2016, 01:33:54 PM
Soy artista y los artistas creamos cosas jajaj. GRacias por tu ayuda pioj.
Título: instanciando por codigo un "sabio"
Publicado por: francoe1 en Abril 29, 2016, 06:17:39 PM
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 -.
Título: instanciando por codigo un "sabio"
Publicado por: lozdanmultimedial en Mayo 02, 2016, 06:04:00 AM
MUchas gracias por tu aporte francoe1. Probaremos tu sugerencia a ver que sucede.
Título: instanciando por codigo un "sabio"
Publicado por: lozdanmultimedial en Mayo 06, 2016, 06:56:04 PM
TEMA SOLUCIONADO    GRACIAS A TODOS.