Noticias

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

Teleport a un nuevo nivel y vuelta

Iniciado por ramunda, Julio 23, 2015, 04:31:34 PM

Tema anterior - Siguiente tema
Hola buenas tardes, se me escapa algo y no se que es he mirado foros y tutos y sigue sin funcionar.Sere breve i explicito.Una trampilla con tag "trapdoor",con un collider que te lleva a un nuevo level con script:
#pragma strict
 var player : GameObject;
 function OnTriggerEnter() {
  Application.LoadLevel ("gruta");
 }
function Awake () {
DontDestroyOnLoad (transform.gameObject);
}
en el otro nivel un simple cubo con un collider y este script:
using UnityEngine;
using System.Collections;

public class teleportspawnpoint : MonoBehaviour {
public GameObject player;//que el jugador sea el que se mueva.


void OnTriggerEnter(Collider other)
{

   if(other.gameObject.tag == "jugador")

   {
      DontDestroyOnLoad(other.gameObject);//que se lleve el objeto al otro level.
      Application.LoadLevel("laisla");//carga nivel 1(laisla).
   }
}
void OnLevelWasLoaded(int thisLevel)
{
   player.transform.position = GameObject.FindWithTag("trapdoor").transform.position;//le digo que al cargar el lvl busque este objeto y vaya hacia el.
   
}
}
Y no hay manera de que me aparezca el la trampilla se va al comienzo de donde empieza el nivel 1. Alguna idea de que esta mal?Gracias de antemano. 

Primer punto, intenta ser prolijo, programa en un solo lenguaje, elige C#.Segundo, te voy a dar una solución, suponiendo que lo que vos necesitas es que el jugador al entrar en un Trigger se cambie de escena y este se ubique justo en la posicion que desees.Entonces, primero necesitas generalizar y normalizar datos.Empecemos. 
  1. ¿Que necesitamos?
  2. ¿Para que lo necesitamos?
  3. ¿Sera un evento muy recurrido?
  4. ¿Deberíamos crear un estándar?
1) Necesitamos que el jugador al entrar en contacto con un Trigger se genere un evento.2) Este evento es, cargar una escena diferente sin destruir al jugador.3) Podría ser utilizado en varias partes del juego.4) Si.¡Vamos al Código!
public class Teletransport : MonoBehaviour
{
public string SceneName = "House";//Nombre de la Escena que vamos a Cargar.
public Vector3 EndPosition = Vector3.zero; // Posicion donde el jugador se deberia hubicar en la escena.   

//Comprobamos la collision
void OnTriggerEnter(Collider col)
{
   if(col.tag == "Player")
   {
      LoadScene(col.transform);
   }
}

//Seteamos la posicion del Jugador, le indicamos que no se destruya y luego cargamos la escena.
private void LoadScene(Transform PlayerTransform)
{
   PlayerTransform.Posicion = EndPosition;
   DontDestroyOnLoad(PlayerTransform);
   Application.LoadLevel(SceneName);
}
}
Como ves, es una simple implementacion, que puede tener bugs, es tarea tuya solucionarlos. Suerte.

Muchas gracias francoe1 , si asi lo are usare c#, Mañana lo pruebo i te cuento!!, una cosilla pongo lo mismo en el otro cubo el se vuelta? osea el mismo script en los 2? Gracias!!! 

EndPosition  es la posicion donde el jugador va a aparecer en la siguiente escena.

Julio 24, 2015, 02:16:53 PM #4 Ultima modificación: Julio 24, 2015, 04:22:21 PM por ramunda
PlayerTransform.Posicion = EndPosition;Aqui en posicion le tengo que dar las coordenadas?, porque me da error de:error CS1061: Type `UnityEngine.Transform' does not contain a definition for `Posicion' and no extension method `Posicion' of type `UnityEngine.Transform' could be found (are you missing a using directive or an assembly reference?)Por cierto gracias por contestarYay  ya lo encontre :), el Posicion, estaba mal no es Posicion, es position en minusculas y en pitinglish  using UnityEngine;
using System.Collections;

public class teleportspawnpoint2 : MonoBehaviour {

public string SceneName = "gruta";//Nombre de la Escena que vamos a Cargar.
public Vector3 EndPosition = Vector3.zero; // Posicion donde el jugador se deberia hubicar en la escena.   

//Comprobamos la collision
void OnTriggerEnter(Collider col)
{
   if(col.tag == "jugador")
   {
      LoadScene(col.transform);
   }
}

//Seteamos la posicion del Jugador, le indicamos que no se destruya y luego cargamos la escena.
private void LoadScene(Transform PlayerTransform)
{
PlayerTransform.position = EndPosition;
   DontDestroyOnLoad(PlayerTransform);
   Application.LoadLevel(SceneName);
}
}este el que sube:
using UnityEngine;
using System.Collections;

public class teleportspawnpoint : MonoBehaviour {

public string SceneName = "laisla";//Nombre de la Escena que vamos a Cargar.
public Vector3 EndPosition = Vector3.zero; // Posicion donde el jugador se deberia hubicar en la escena.   

//Comprobamos la collision
void OnTriggerEnter(Collider col)
{
   if(col.tag == "jugador")
   {
      LoadScene(col.transform);
   }
}

//Seteamos la posicion del Jugador, le indicamos que no se destruya y luego cargamos la escena.
private void LoadScene(Transform PlayerTransform)
{
PlayerTransform.position = EndPosition;
   DontDestroyOnLoad(PlayerTransform);
   Application.LoadLevel(SceneName);
}
}
pero hacen caso omiso de las coordenadas que le digo.A ver yo me he perdido algo, el
DontDestroyOnLoad
Sirve para que se lleve TODO de una escena a otra no?, si no es asi por favor que alguien me diga que hace, porque lo único que consigo asi es que se lleve la pistola en la mano, pero ni los scrores, ni las balas ni el disparo ni sistema de vida todo eso se queda atrás.Por favor que alguien me lo explique como me llevo TODO al otro nivel?GraciasEstoy por crear un plano alli a lo lejos y crear la escena alli ...creo que sera mas facil...a falta de entendimiento buenas son tortas     

Etiquetas: