Noticias

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

Instanciar player

Iniciado por brok, Enero 16, 2018, 09:42:01 AM

Tema anterior - Siguiente tema
toy buscando como loco y no encuentro como instanciar un player diferente en la escena es un juego 2d pero será lo mismo al instanciar lo he intentado pero no se como pongo parte del script.
 

if (BotonMOto1Sel.Moto1)
        {
            StartCoroutine(Loadlevelslider());
            ImagenCarga.SetActive(true);
            if (Moto1Insta != null)
            {
                if (tiempo >= 0)
                {
 
                    DontDestroyOnLoad(Instantiate(Moto1Insta));
                    tiempo = 0f;
                }
            }
        }

 
 
 
Bueno he conseguido que carge y ahora tengo otro problema que no funciona los botones y la puntuación me dice que no ecuentra el objeto :
 

private Puntos puntos;
    public PolygonCollider2D pol2d;
    public Transform CentroDeMasa;
    private CamaraPlayer camPlayer;
    private void Awake()
    {
        camPlayer = GameObject.Find("Main Camera").GetComponent<CamaraPlayer>();
        puntos = GameObject.Find("Puntos").GetComponent<Puntos>();
        FondoS = GameObject.Find("FondoScroll").GetComponent<ScrollFondo>();
        PulsarBoton = GameObject.Find("BotonCorrer").GetComponent<BotonCorrer>();
        VolteretaBoton = GameObject.Find("BotonVoltereta").GetComponent<BotonVoltereta>();
 
        puntos.rutaArchivo = Application.persistentDataPath + "/data.dat";
        puntos.textoPuntos.text = "" + puntos.puntosSalt;
    }

 
 
 
Me he dado cuenta que al instanciar como lo estoy haciendo no ecuentra los gameobjects privados,como puedo solucionarlo ayuda por favor.

A ver, deberias dar un paso atras joven padawan y empezar de mas abajo, veo que te complicas la vida mucho xDDD
 
1-Para instanciar cosas lo mejor (siempre que se conozca en tiempo de diseño) es dejar las cosas linkadas y no hacer el find. 
 
2- Como veo que coges cosas de muchos sitios, deberias plantearte estudiar "gamecontrollers" y crearte uno para tener esas cosas ahi, y que sean facil referenciar, llamando a:
 
camPlayer = myGamecontroller.GetCamera();
 
en vez de tanto find, te ahorraras dolores de cabeza y tendras una estructura clara, cosa que como se aprecia en el ejemplo no ocurre ahora xDD
 
 

Cita de: Eskema date=1516097122A ver, deberias dar un paso atras joven padawan y empezar de mas abajo, veo que te complicas la vida mucho xDDD
   
   
      1-Para instanciar cosas lo mejor (siempre que se conozca en tiempo de diseño) es dejar las cosas linkadas y no hacer el find. 
   
   
      2- Como veo que coges cosas de muchos sitios, deberias plantearte estudiar "gamecontrollers" y crearte uno para tener esas cosas ahi, y que sean facil referenciar, llamando a:
   
   
      camPlayer = myGamecontroller.GetCamera();
   
   
      en vez de tanto find, te ahorraras dolores de cabeza y tendras una estructura clara, cosa que como se aprecia en el ejemplo no ocurre ahora xDD
   
   
       
   


¿Y como se hacer Gamecontrollers?

Como he dicho eso es cosa tuya para estudiarlo, buscar info y aplicarla :)
 
Busca patrones de diseño y mira "controllers" en general para que te den ideas de como integrar eso en tus proyectos.

Cita de: Eskema date=1516099823Como he dicho eso es cosa tuya para estudiarlo, buscar info y aplicarla :)
   
   
      Busca patrones de diseño y mira "controllers" en general para que te den ideas de como integrar eso en tus proyectos.
   


Vale muchas gracias.

No hay por donde cojerlo hacer el gamecontrollers cada persona lo hace diferente como siga asin me pasa a unreal que mas fácil con el visual script
En Unreal consegui hacerlo intanciar los player y en un dia.

1-El controller es "unico", lo que cambia es el contenido, si cada uno te explica una cosa es porque son tutoriales muy cutres o de gente que no tiene ni idea. El patron/algoritmo es unico.
 
2-Asumo que estas aqui para aprender, y la programacion cuesta, nadie dijo que programar fuera facil :)

Cita de: Eskema date=15161786291-El controller es "unico", lo que cambia es el contenido, si cada uno te explica una cosa es porque son tutoriales muy cutres o de gente que no tiene ni idea. El patron/algoritmo es unico.
   
   
      2-Asumo que estas aqui para aprender, y la programacion cuesta, nadie dijo que programar fuera facil :)
   


Ya pero es que  estoy muy hagobiado por que no me sale y estoy super liado.

Si te rindes porque en 1 dia no te sale..... la programacion es paciencia y no se que prisa teneis los jovenes por querer hacer las cosas para ayer! xD.
 
Hay que relajarse y disfrutar del proceso, cuanto mas te agobies menos te saldra....
 
 

Ya he estudiado algo pero me funciona me instancia al player pero al seleccionar el otro player me carga el primero puedesn ayudarme alguien por favor.
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class JuegoControlador : MonoBehaviour {
    public static JuegoControlador juegoControlador;
 
   
    public GameObject Coche1Inst;
    public GameObject Moto1Inst;
    private AsyncOperation Asyn;
    private Button Coche1Boton;
    private Button Moto1Boton;
    public static JuegoControlador juego
    {
        get; set;
    }
   
    private void Awake ()
    {
   if(juegoControlador == null)
        {
            juegoControlador = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
       
    }
    private void OnEnable()
    {
        UnityEngine.SceneManagement.SceneManager.sceneLoaded += CargarComponentesVeiculos;
    }
    public void OnDisable()
    {
        UnityEngine.SceneManagement.SceneManager.sceneLoaded -= CargarComponentesVeiculos;
    }
    void CargarComponentesVeiculos(Scene scena, LoadSceneMode scenaModo)
    {
 
        if (scena.name == "MenuSeleccion")
        {
            Coche1Boton = GameObject.Find("Coche1").GetComponent<Button>();
            Coche1Boton.onClick.AddListener(Cargar);
           
            Moto1Boton = GameObject.Find("Moto1").GetComponent<Button>();
            Moto1Boton.onClick.AddListener(Cargar);
           
 
        }
        if (scena.name == "Scena01")
        {
            Instantiate(Coche1Inst);
        }
        else if (scena.name == "Scena01")
        {
            Instantiate(Moto1Inst);
        }
 
    }
    void Cargar()
    {
        MenuSeleccion.menuSeleccion.ImagenCarga.SetActive(true);
        StartCoroutine(Loadlevelslider());
    }
    public IEnumerator Loadlevelslider()
    {
        Asyn = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync("Scena01");
        while (!Asyn.isDone)
        {
            MenuSeleccion.menuSeleccion.slider.value = Asyn.progress;
            yield return null;
        }
    }
   
}

 
 
 
Y no me funciona al anidar scena.name los if
 
 
 
Cita de: Eskema date=1516193372Si te rindes porque en 1 dia no te sale..... la programacion es paciencia y no se que prisa teneis los jovenes por querer hacer las cosas para ayer! xD.
   
   
      Hay que relajarse y disfrutar del proceso, cuanto mas te agobies menos te saldra....
   
   
       
   


Gracias por el consejo.

Enero 18, 2018, 07:34:05 AM #10 Ultima modificación: Enero 18, 2018, 07:36:37 AM por brok
Hola miren voy mejorando ya se intanciar los players y seleccionarlo solo que al salir del botón exit de juego no del editor, me gurda en menoria el objeto y siempre se instancia y tengo 2 salgo y tengo 3 y lo mismo 4 asin, a ver si alguien me echa un cable y inetrcambiamos servicios de animación o modelado riging con blender...
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class JuegoControlador : MonoBehaviour {
    public static JuegoControlador juegoControlador;
 
   
    public GameObject Coche1Inst;
    public GameObject Moto1Inst;
    private AsyncOperation Asyn;
    private Button Coche1Boton;
    private Button Moto1Boton;
    private int contador;
    private int seleccion = 0;
    public static JuegoControlador juego
    {
        get; set;
    }
   
    private void Awake ()
    {
   if(juegoControlador == null)
        {
            juegoControlador = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
       
    }
    private void OnEnable()
    {
        UnityEngine.SceneManagement.SceneManager.sceneLoaded += CargarComponentesVeiculos;
       
    }
    public void OnDisable()
    {
        UnityEngine.SceneManagement.SceneManager.sceneLoaded -= CargarComponentesVeiculos;
        UnityEngine.SceneManagement.SceneManager.sceneLoaded -= InstanciarVeiculosCoche1;
        UnityEngine.SceneManagement.SceneManager.sceneLoaded -= InstanciarVeiculosMoto1;
    }  
    void CargarComponentesVeiculos(Scene scena, LoadSceneMode scenaModo)
    {
       
       
        if (scena.name == "MenuSeleccion")
        {
            int click = 0;
            Coche1Boton = GameObject.Find("Coche1").GetComponent<Button>();
           
           
           
            Moto1Boton = GameObject.Find("Moto1").GetComponent<Button>();
           
            if(click == 0)
            {
                Moto1Boton.onClick.AddListener(CargarMoto1);
                Coche1Boton.onClick.AddListener(CargarCoche1);
            }
           
 
        }
       
         
       
 
    }
    void InstanciarVeiculosCoche1(Scene scena, LoadSceneMode loadScene)
    {
       
        if (scena.name == "Scena01")
        {
            Instantiate(Coche1Inst);
        }
       
    }
    void InstanciarVeiculosMoto1(Scene scena, LoadSceneMode loadScene)
    {
       
        if (scena.name == "Scena01")
        {
            Instantiate(Moto1Inst);
        }
       
    }
    void destruirMoto1()
    {
        UnityEngine.SceneManagement.SceneManager.sceneLoaded -= InstanciarVeiculosMoto1;
    }
    void detruirCoche1()
    {
        UnityEngine.SceneManagement.SceneManager.sceneLoaded -= InstanciarVeiculosCoche1;
    }
    void CargarCoche1()
    {
        int coche1 = 0;
        if(coche1 == 0)
        {
            MenuSeleccion.menuSeleccion.ImagenCarga.SetActive(true);
            StartCoroutine(Loadlevelslider());
            UnityEngine.SceneManagement.SceneManager.sceneLoaded += InstanciarVeiculosCoche1;
        }
       
       
       
    }
    void CargarMoto1()
    {
        int Moto1 = 0;
        if (Moto1 == 0)
        {
            MenuSeleccion.menuSeleccion.ImagenCarga.SetActive(true);
            StartCoroutine(Loadlevelslider());
            UnityEngine.SceneManagement.SceneManager.sceneLoaded += InstanciarVeiculosMoto1;
        }
       
           
    }
    public IEnumerator Loadlevelslider()
    {
        Asyn = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync("Scena01");
        while (!Asyn.isDone)
        {
            MenuSeleccion.menuSeleccion.slider.value = Asyn.progress;
            yield return null;
        }
    }
   
}

 
 
 
ya lo arregle
no habia yamads las funciones destruir

Etiquetas: