Noticias

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

hacer un switch entre 2 objetos y mantener la posicion del ultimo

Iniciado por Abramelin, Agosto 21, 2015, 08:55:51 PM

Tema anterior - Siguiente tema
Estoy intentando hacer un intercambio entre 2 objetos con active, pero que mantengan la ultima posicion... y no hay manera.. aver si podeis echarme un cable...Tengo esto, pero no me funciona correctamente.
    var first : GameObject;
    var third : GameObject;
    var playerpos1 : Transform = first.transform;
    var playerpos3 : Transform = third.transform;
     
    function Update () {
     
    if(Input.GetButtonDown("camview")){
    if (first.activeSelf == true){
    third.SetActive(true);
    third.transform.position = playerpos1.position;
    first.SetActive(false);
    }
    else{
    first.SetActive(true);
    first.transform.position = playerpos3.position;
    third.SetActive(false);
    }
    }
    }
 Recalco el cuadro de transform para que veiais donde manda las coordenadas tras darle al boton de switch, ¿que es lo que esta mal en el codigo? 


Si quieres que conserve la posicion por que la modificas? Borra las lineas de third.transform.position = playerpos1.position; y la otra del else. SI no es eso es que no he entendido muy bien lo que quieres hacer. Por cierto la posicion es una variables tipo Vector3 las variables Transform tambien almacenan rotacion y tamaño

el juego comienza con el objeto third, imagina que entras en una habitacion.. pues lo que quiero es que al cambiar de objeto, el objeto first (al activarse) vaya a posicion donde estaba el objeto third (el objeto que se desactiva). Es un cambio entre primera y tercera persona para que se entienda mejor

Agosto 21, 2015, 11:41:50 PM #3 Ultima modificación: Enero 01, 1970, 01:00:00 AM por Antonio
No sé a qué se puede deber.

Sin embargo, estas variables:
var playerpos1 : Transform = first.transform;
var playerpos3 : Transform = third.transform;
Aunque las definas fuera de la función, creo que habría que cargarles el transform durante el tiempo de ejecución, por ejemplo, en la función Start. Tu juego tal y como está ahora, ¿encuentra esas variables o se quedan en nulas?.

Pero en la función Start de cualquier objeto? creo que no te he entendido bien... dices de declarar esas 2 variables en function start (de por ejemplo el mismo objeto que lleva el codigo del switch)?? dime exactamente donde tengo que mirarlas porque estoy un poco pez.

[quote author=Abramelin date=1440201037" data-ipsquote="" data-cite="Abramelin" class="ipsQuote">Pero en la función Start de cualquier objeto? creo que no te he entendido bien... dices de declarar esas 2 variables en function start (de por ejemplo el mismo objeto que lleva el codigo del switch)?? dime exactamente donde tengo que mirarlas porque estoy un poco pez.[/quote]simplemente a ese mismo script que ya tienes le añades la funcion Start y ahi dentro declaras las variables
        if (first.activeSelf == true){
            third.SetActive(true);
            third.transform.position = playerpos1.position;
            first.SetActive(false);
        }
        else{
            first.SetActive(true);
            first.transform.position = playerpos3.position;
            third.SetActive(false);
        }
    }
}
Tambien puedes directamente borrar esas variables y hacer esto
var first : GameObject;
var third : GameObject;
   
function Update () {
    if(Input.GetButtonDown("camview")){
        if (first.activeSelf == true){
            third.SetActive(true);
            third.transform.position = first.position.position;
            first.SetActive(false);
        }
        else{
            first.SetActive(true);
            first.transform.position = third.transform.position;
            third.SetActive(false);
        }
    }
}
 En la primera captura de pantalla veo un NullReferenceException... Asegurate de que no tenga nada que ver con este script

El segundo codigo no me devuelve el switch al third person, y con el primero me pasa exactamente lo mismo... al darle al boton del switch me manda el first person al quinto pino, y al volver a darle me retorna al third person donde lo deje (no va a la ultima posicion del otro objeto). he grabado un video para ver si podeis apreciar mas detalles y dais con el error... lo que mas me llama la atencion es que en el cuadro transform del first person, una vez pulsas el boton switch, cambian las coordenadas... se supone que deberia ir al 0,0,0 del otro objeto no?
eature=oembed" allowfullscreen="true" frameborder="0" height="270" width="480">  

Etiquetas: