Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Tizon

#1
Scripting / Mostrar button desactivado.
Marzo 25, 2020, 10:11:41 AM
Buenas a todos, espero se encuentren todos bien.
 
Estoy utilizando en nuevo Button - TextMeshPro, que entiendo que es el button de toda la vida, lo que le han cambiado el Text por el TextMeshPro e ya.
 
Aquí mi problemilla. Quiero por script desactivar el button cuando se den determinadas circunstancias, lo hago con el button.enabled, poniéndolo a true o false según convenga, y me funciona correctamente, ahora bien, al usuario aunque el button no responde a clic, no muestra diferencia alguna, no se muestra "desactivado", sino que sigue mostrando su aspecto normal a pesar de estar desactivado.
 
Si quieren ver a que me refiero...
 

 
Dos de esos botones están desactivados. ¿A qué no adivinan cual?
 
¿Lo estoy haciendo correctamente? ¿Alguna idea de como corregir este comportamiento que al usuario le puede resultar desconcertante?
 
Muchas gracias a todos.
#2
Otros / Unity ECS
Mayo 11, 2019, 08:04:21 PM
Hola a todos.
 
Disculpad si esto no va aquí, pero no sabía dónde meterlo.
 
Bien, el caso es que he decidido empezar a pelearme con el ECS y como no, la primera en la frente.Estoy con la versión Unity 2019.1.2f1. Hago proyecto nuevo, cargo los complementos desde Package Manager (Burst, Math, Entities (31 v 0.0.12), etc...) y empiezo por, teóricamente lo más sencillo, generar una entity desde un Game Object. Así que cargo un elemento 3d (He probado esferas, cubos...) y le meto el script ConvertToEntity y voy a probar antes de hacer nada más. Arranco, y chequeo que me crea correctamente la Entity desde el Entity Debuger, pero sin embargo no me muestra el objeto en la pantalla.
 
He estado buscando si a alguien más le pasaba lo mismo, pero no he logrado encontrar nada al respecto. Alguien más le ha pasado? Alguien que pueda darme una idea de qué me puede estar faltando o por dónde pueda venir el problema?
 
Muchas gracias a todos.
 
PD: @pioj, ya sé que ECS aún no está soportado oficialmente, pero quizá no fuera mala idea crear un subforo para aquellos que empezamos a trastear y darnos de morros con el ECS y demases, para ir poniendo nuestras experiencias, dudas, documentación, etc... sin manchar el resto del foro.
 
 
#3
General (Antiguo) / Interfaces y listas
Julio 23, 2018, 07:31:15 PM
A ver si alguien me da una idea por qué no doy con ello. Aunque no he apretado mucho con la teórica de C#, doy por supuesto que se puede crear una lista de interfaces, dado que lo he conseguido en un caso simple, pero no en el segundo doble, a mi parecer idénticos excepto por eso, de ahí mi perplejidad. Aclarar, que he aprendido C# a base de leches, así que a no descartar que se me esté yendo.
 
Bien, al lío. Necesito crear tipos diferentes de Interfaces y tipos diferentes de datos con una o más interfaces, que para eso están, no? O al menos eso creo. Por otro lado deseo guardar listas de los objetos creados con cada uno de las interfaces, por lo que he decido crear un singleton. Bien para hacernos una idea, simplifico al máximo.
 

public class UnoParaGuardarlosATodos : Monobehavior {
     public static UnoParaGuardarlosATodos miSharedInstance;
     public List<IMiInterfaceA> misObjetosConInterfaceA = new List<IMiInterfaceA>();
     public List<IMiInterfaceB> misObjetosConnIterfaceB = new List<IMiInterfaceB>();
     public void f_InstanciaObjetosConInterface(){
          ObjetoTipoA miObjetoTipoA = new ObjetoTipoA();
          ObjetoTipoB miObjetoTipoB = new ObjetoTipoB();
     }
}

 
Bien, único objeto que tira de Monobehavior. Luego creo dos Interfaces.
 

public interface IMiInterfaceA {
     void f_Iregistra();
     funcion1();
     funcion2();
     funcionN();
}

 
y
 

public interface IMiInterfaceB {
     void f_Iregistra();
     funcion1();
     funcion2();
     funcionN();
}

 
Y dos objetos.
 

public class ObjetoTipoA : IMiInterfaceA {
     public ObjetoTipoA() {
          f_Iregistra()
     }
     public void f_Iregistra() {
          UnoParaGuardarlosATodos.miSharedInstance.misObjetosConInterfaceA.add(this);
     }
}

 
Este primero se lo traga sin problema. No tira error. Creo el segundo.
 

public class ObjetoTipoB : IMiInterfaceA, IMiInterfaceB {
     public ObjetoTipoB() {
          f_Iregistra()
     }
     public void f_Iregistra() {
          UnoParaGuardarlosATodos.miSharedInstance.misObjetosConInterfaceA.add(this);
          UnoParaGuardarlosATodos.miSharedInstance.misObjetosConInterfaceB.add(this);
     }
}

 
Con este segundo si me tira error. Para ser más concreto, este: 
 



   
      NullReferenceException: Object reference not set to an instance of an object
      Tzn.ObjetoTipoB.f_Iregistra () (at Assets/Scripts/Programa/ObjetoTipoB.cs:31)
      Tzn.ObjetoTipoB..ctor () (at Assets/Scripts/Programa/ObjetoTipoB.cs:21)
   

[/quote]
 
El error me lo tira primero en la función f_Iregistra y después en el constructor. El problema es que me lo tira directamente en el editor, con lo que no puedo debuggearlo, y el único modo de saber que narices le pasa es comentando líneas. Así he llegado a lo que le molesta, que es cualquiera de las dos líneas:
 



   
       
   
   
                UnoParaGuardarlosATodos.miSharedInstance.misObjetosConInterfaceA.add(this);
   
   
                UnoParaGuardarlosATodos.miSharedInstance.misObjetosConInterfaceB.add(this);
   
   
       
   

[/quote]
 
Lo curioso es que he copiado y pegado la línea de la clase ObjetoTipoA, por si fuera un error de sintaxis, nada. No puede ser el Singleton, dado que es ese el que crea los objetos de las clases. Mi duda es si al tener dos interfaces con la misma función, pero todo lo que leo (A menos que lo interprete al revés, cosa a no descartar, soy medio así... ) no sólo es que se pueda, sino que es como se DEBE de hacer, para hacer código legible, mantenible y blabla... Pero el caso es que si hago que implemente sólo una de las dos Interfaces (Sea cual sea, la A o la B) si me funciona...
 
Llegados a este punto, ya no sé por dónde tirar...
 
Acepto ideas, sugerencias y tirones de pelo.
 
Muchas gracias a todos.
#4
Buenas.
 
Pues de momento sigo con mi monotema del Layout. Me sucede algo muy curioso, no sé si a alguien le ha pasado y si alguien me puede dar una pista de por dónde empezar a mirar, pues a estas alturas estoy más perdido que un bacalao en el Sahara.
 
Vamos al lío. Estoy en fase de diseño. Creo mi panel, mi vertical layout, mi Scroll view, el diseño de los elementos que han de salir en el layout. Todo perfecto, me funciona a las mil maravillas. Creo los prefabs, programo el código para que los elementos se generen en tiempo de ejecución según necesidad instanciando los prefabs y lanzo. Me sale todo menos los elementos. Que raro... Al alejar la escena, veo que me salen con un tamaño monstruoso, del orden de más de 10 veces el tamaño asignado. Bueno, pienso, eso es que la he cagado con los prefabs, así que pruebo a meter uno en tiempo de diseño, y ese si me sale perfecto. Reviso que no me haya olvidado al instanciar el prefab el emparentar los transforms, pero veo que eso me lo hace perfectamente.He probado cambiando las configuraciones del Layout varias veces, a min size, prefered size, cambiando las medidas en el Layou element y todo lo que se me ha ocurrido, pero al final la conclusión es rotunda si los agrego en tiempo de diseño, van perfectos. Si los agrego instanciando se me fastidia todo. De momento he solucionado creando 100 elementos de cada en tiempo diseño, desactivandolos y activandolos cuando necesito, pero no deja de ser una solución "sucia" que me obliga a ocupar mucha memoria, puesto que tengo que ir a máximos en cada uno de los elementos.
 
Aquí, en la primera captura, podemos ver en la parte superior el elemento creado a través del un prefab, tan grande que parece "invisible". Abajo los elementos añadidos en tiempo de diseño, con su tamaño idóneo.
 
Y en el segundo podemos ver el motivo al ir a Escena. El elemento instanciado a pesar de emparentar correctamente, se hace tan grande que desborda incluso el tamaño del canvas.
 
 
 
 
 

 
#5
General (Antiguo) / UI Vertical Layout
Abril 29, 2018, 09:00:08 PM
Hola a todos.
 
Antes que nada gracias por la atención. Bien, empecemos por decir que soy programador y la parte gráfica como que menos un tercio, así que si meto algún error de base, dadme un capón sin problema.
 
Bueno al lio. Para situarnos. Tengo un Canvas con un Canvas Scaler puesto a Scale With Screen Size para que vaya manteniendo más o menos en diferentes formatos. Hasta aquí todo genial. Bien, quiero crear un panel con un conjunto de botones con una barra de scroll que me vayan presentando una serie de objetos en pantalla y blablablabla... El caso, creo un panel el cual me hace de marco, en el que añado los componentes ScrollRect y Mask. Dentro de este un Panel contenido, al que añado un Vertical Layout Group. Luego a este Panel Contenido, voy añadiendo los prefabs de los botones. Huelga decir que en tiempo de ejecución no se cuantos de estos he de presentar. Sino sería muy fácil, no? Bueno, todo me va genial, los botones se ven estupendos, el Mask me recorta justo dónde quiero, el Scroll bar se ajusta estupendamente. Todo perfecto excepto una cosa, como no sé el número de botones en tiempo de ejecución, me deja un espacio final bastante grande que queda feo. Bueno, no importa, como conozco el tamaño de los botones, pues no importa, hago el chid count y lo multiplico por el tamaño... Que feliz es uno en su inocencia. Ni modo. He probado de varios modos. Entiendo que la forma correcta de generar el size del Panel es con un RectTransform.sizeDelta = new vector2.pasandole el ancho y el alto deseado. Esto me da bien en Weith, pero el Heigth no hay modo. Siempre me queda ese cacho vació feo abajo del todo. He probado con un float, recorriendo todos los childs y sumando su Heigth. Tampoco. Supongo que el problema viene de que entre el modo diseño y el modo ejecución varian las medidas, y que por algún motivo me coge los Heigths de los prefabs de base, antes de escalarlos. Si alguien tiene alguna idea de como puedo ajustar el alto de este panel contenido, o alguna idea de por dónde la estoy cag... estaría muy agradecido.
 
PD: Ya se que existe la opción de marcar que los Childs ajusten tamaño o separación, pero si permito en tamaño me los deforma, ya que tienen mucho contenido, y con la separación queda fatal.
 
Muchas gracias a todos.
#6
General (Antiguo) / Creación y destrucción de objetos.
Diciembre 26, 2017, 02:02:41 PM
Hola a todos.
 
Primero feliz navidad y entrada de año a todos.
 
He comprobado que si creas una clase que no herede de nada, puedes ejecutar los constructores. A partir de aquí, mis preguntas. Del mismo modo, si implemento destructores se ejecutarán? Y siguiendo con ello. Hay alguna forma de marcar estos objetos para el borrado? Y siendo así, el destructor cuando se ejecutará? Al marcarlo para el borrado o cuando el sistema efectivamente lo borre? La verdad es que llevo unas cuantas horas buscando información al respecto y me resulta confuso.
 
Muchas gracias a todos.
#7
General (Antiguo) / Control de versiones.
Agosto 21, 2017, 03:56:05 PM
Hola,
 
Mi proyecto está creciendo y mi ordenador está haciendo ya el tonto, así que mi pregunta es muy simple. Que control de versiones usáis y si tiene opción de guardar con una copia de respaldo en la nube. Realmente necesito poca cosa. Poder restaurar el proyecto si me peta el ordenador, y poder recuperar versiones anteriores de algún archivo si la cago.
 
Muchas gracias.
#8
General (Antiguo) / Help IMGUI
Junio 18, 2017, 01:47:46 PM
Hola a todos, y perdón por esta consulta que seguramente resulte tonta.
 
He descubierto un control que me interesa bastante, el TreeView. El caso es que cuando lo implemento, me salta error. Miro en la documentación y me dice que cuelga de la IMGUI, así que tiro como me indica la documentación un using Unit***itor.IMGUI, pero no me lo encuentra. He tratado de verificar que la IMGUI ni esté obsoleta, pero el caso es que por lo que parece sigue activa, así que no sé que me falta para que me lo coja. Si alguien puede orientarme estaría muy agradecido.
 
Muchas gracias a todos.
#9
Buenas, vuelvo nuevamente con un montón de dudas, la mayoría seguramente tontas, pero llevo una semana y pico trasteando con el tema y me parece que cada vez más perdido.
 
Para ponernos en situación, tras que @GSG3D me descubrieran esa maravilla del ScriptableObject, que se adaptaba como un guante a mis necesidades, he puesto codos en el tema, y he rehecho mi proyecto. El caso es que es sencillo, intuitivo y funciona fantástico como base de datos, lo hace todo de maravilla. Ahora bien, al emplearlo como base de datos, tiene un problema, y es que al manejarlo desde el inspector, para que nos hagamos a la idea, tengo una clase que referencia a otra clase, y esta a otra y esta a una colección de otras clases y así, con lo cual a la hora de establecer las referencias en el inspector es un caos de desplegables y datos que es muy difícil ir siguiendo.
 
Bueno, así que empiezo a buscar por dónde puedo racionalizar la edición de toda esta información. Y aquí es dónde empiezo a liarme como un trompo. Bien, primer paso lógico, la documentación oficial. Ahí me encuentro con la posibilidad de crear Property Drawers. Sobre la claseA puedes crear:
 
[CustomPropertyDrawer (ClaseA)]
 
class ClaseADrawer : PropertyDrawer {}
 
Bien, hasta aquí bien. El caso en que no he conseguido encontrar en ningún lado que digan dónde se ha de meter el dichoso script para poder jugar con él. Digo yo que será en la carpeta editor, pero no me funciona. En la clase original? También he probado y me ha tirado muchos errores. Seguro que algo hago mal, pero no puedo saberlo a ciencia cierta si de buen inicio no sé dónde se mete.
 
Por otro lado, investigando esto, doy con la posibilidad de crear tu propia ventana del editor, Bien, estupendo. La verdad es que encuentro información muy buena y es sencillo de hacer. Ahora bien, a la hora de dotarlo de contenido... Ahí nuevamente no me salgo. Pienso hacer una ventana con tres secciones en vertical, la de la izquierda, tendrá unos botones de arriba a abajo con los diferentes tipos de clases que tiene mi proyecto. La idea es que al pulsar el botón de una determinada clase, se listen todas las instancias con sus propiedades y referencias, como en el editor (Y con sus Property Drawers cuando consiga hacerlo) y que al hacer clic sobre una referencia se listen todas las instancias del tipo de la referencia en el panel de más a la derecha, para poder seleccionarlas con un simple clic. Consigo dividirlo en tres con la propiedad BeginArea y EndArea y queda bien. Pero al insertar el BeginArea dentro del if(GuiButton) como dicen en la documentación me desaparece y temo que es porqué la crea como un subarea dentro del primer área. En fin, que voy más perdido que un bacalao en el Sahara. Si alguien pudiera echar un poco de luz, me diga si voy bien encarado o estoy confundiendo cosas, o conoce algún tutorial que vaya un poco más allá de simplemente poner un botoncito y alguna cosa más, algo más elaborado, estaría muy agradecido.
#10
Hola,
 
Bueno, os explico esa duda o medio duda que me ha surgido así de pronto, a ver si me se explicar bien.
 
Imaginemos un juego que se compone de centenares o miles de objetos, todos con unas determinadas características que me permiten por un lado crearlos fácilmente de una una docena de familias de prefabs y por otro lado agruparlos para controlarlos en un único objeto en determinadas circunstancias, de forma que no necesito esa sobrecarga de miles de objetos arriba y abajo por todo el juego (para hacernos una idea, como los ejércitos en el Total War, que en el plano estratégico son una sola pieza y no es hasta descender al plano táctico que cada unidad toma entidad, o por poner otro ejemplo, una flota de centenares de naves, que tomando la velocidad y el destino, no necesitas las naves individuales hasta que se encuentran con una flota enemiga)
 
Así que la idea es generar un pool de unidades/naves o lo que toque, y moverme en el plano general con unos pocos GameObjects que contendrán la información de conjunto (numero de naves/tropa, total de cada subtipo, velocidad de conjunto, salud promedio y cosas así) y en el momento que sea necesario tomar los GameObjects necesarios del Pool y alimentarlos con los datos para darles la entidad.Hasta aquí el planteamiento en sencillo. Creas uno o más diccionarios para guardar todos los datos de las naves/unidades simuladas, y en el momento necesario en que una agrupación/flota/ejercito pasa al plano táctico, seleccionas de los diccionarios los objetos involucrados a través de LINQ y pasas los datos adecuados a cada uno de los objetos activados del pool. Hasta aquí todo bien. Pero aquí se me plantea la duda.
 
Los objetos guardados han de ser "puros" o heredados de MonoBehaviour.
 
En el caso de objetos puros, puede que necesiten tener referencias a GameObjects y otros elementos particulares de Unity. Pueden tener objetos que no hereden de MonoBehaviour referencias a Objetos propios de Unity?
 
En el caso de heredar de MonoBehaviour, bastaría con añadir directamente el componente seleccionado al Prefab instanciado, pero al hacerlo, no estaré sobrecargando el sistema con datos innecesarios? Tener miles de Componentes con MonoBehaviour, incluso para clases sencillas de un par o tres de datos, puede ser en si mismo una burrada por toda la cola que puede traer el MonoBehaviour? Puede tener efectos secundarios por la acumulación?
 
Reflexionando sobre ello, me he dado cuenta de mi ignorancia al respecto, y buscando tampoco he sabido encontrar nada que me indique como es mejor encarar el tema...
 
Muchas gracias a todos.
#11
Hola, seguro que muchos os habéis encontrado en un caso similar, y seguramente la solución es fácil, pero no consigo dar con ella.
 
Veréis, el caso es el siguiente, en un GameObject creo un diccionario, en otro cargo los datos y finalmente en un tercero los leo para su uso. El caso es que en todos uso el Start para cargar las referencias entre objetos y componentes. Lo hago en el Start para estar seguro de que todos existen (Se han generado) y no me va a fallar por ahí. Pero el caso es que en el momento de lanzar el juego, la función del tercer objeto me da error en el diccionario, casi seguro por qué el segundo elemento aún no ha cargado los datos en el diccionario (Aparte del error que me lanza, es que si aguardo que me salte el error y continúo todo me va perfecto) y mi pregunta es, hay algún modo de indicarle a Unity que ejecute el Start dejando algunos GameObject los últimos o por un orden(esto sería ideal) o de decirle dentro del Start que aguarde aunque sea un segundo? O alguna función que se ejecute una única vez tras el Start? No quiero meterlo en el Update por qué me forzaría un if, y tendré que recurrir a este método en muchos más GameObject y eso serían muchos if por frame para algo que seguro que existe un método mucho más elegante de resolver.
 
Cómo lo solucionarías vosotros?
 
Nuevamente muchas gracias a todos.
#12
General (Antiguo) / Problema con OnMouseDown()
Noviembre 13, 2016, 03:28:29 PM
Hola a todos.
 
Llevo un buen rato con un problema muy tonto y no me salgo. He revisado el foro y la documentación oficial y no consigo salirme. Seguramente me estoy dejando una chorrada pero el caso es que no consigo encontrarla.
 
Me explico. Se trata simplemente de que dentro del Canvas, creo un panel y dentro de este panel diversos paneles más. La idea es que los paneles actúen casi como botones. Llevan un texto que va variando dinámicamente según las circunstancias del juego, etc. El caso es que los paneles hijos, no me detectan el mouse. Ni el evento OnMouseDawn, como tampoco el OnMouseEnter, etc...
 
He revisado que esté dentro del Layer UI, que entiendo que no ignora RayCast, a la desesperada le he metido un BoxCollider, he metido debug para verificar que simplemente no entra en las funciones y que no se trata de un código mal hecho, etc...
 
Pero haga lo que haga, simplemente, no me detecta el Mouse, como si lo ignorara por algún motivo y ya no sé que más hacer. He de añadirle algún componente para que lo detecte? La idea de que un panel de la Ui detecte el mouse es una animalada como concepto?
 
Seguramente es que de tanto pelearme con el tema ya estoy espeso, y será una chorrada, pero ni modo. Si alguien puede darme una idea de por dónde tirar lo agradecería, por qué estoy clavado con este tema.
 
Muchas gracias a todos.
#13
General (Antiguo) / problema con animación
Agosto 08, 2016, 08:59:31 PM
Hola a todos.
 
Más que un problema, creo que lo que necesito es un poco de orientación. Para empezar decir que en el tema de animaciones decir que estoy verde es decir poco. Es la primera vez que me meto en esto, ya que soy coder, y más o menos hasta ahora, con mis tropiezos, me había ido saliendo de todo lo que me había metido, y ahora ya más o menos tengo las cosas encaradas y quería empezar ha darle un poquillo de imagen, así que ni corto ni perezoso, empiezo a buscar por el asset store y me encuentro esto, que me parecía una muy buena oferta. En el link podéis ver todos los componentes que lleva.
 
https://www.assetstore.unity3d.com/en/#!/content/43181
 
En mi ignorancia, pensaba que como por ejemplo las naves, sería colocar los assets, quizá manejarlos un poquillo, algo de codigo y arreando. A primera vista está todo muy bien, lleva un montón de animaciones incluídas, controles y demás, pero no necesito tanta sotisficación, aparte que si no me salgo con algo básico, menos con algo tan completo, ya que en realidad sólo necesito que hagan por decirlo de alguna forma de figurantes, es decir, que adopten una posición natural y quizá un poco de movimiento para que no den sensación de estático. Así que simplemente cargo en el proyecto, busco el prefab que me interesa, se lo enchufo a la escena, le meto un anim de idle, por ejemplo, y pienso que ya. Que al ejecutar se ejecutará la anim, adoptará la posición idle y listos. Pues no, siguen en T y no hay modo. Les enchufo otra anim y otra y otro, y sólo muy de vez en cuando cogen alguna. He probado a meterle un Animator Controler, y ahí meter la animación y asignarle la animación y las transiciones tanto al Entry como al Any State, y nada, ni modo. He pensado que a lo mejor cada modelo lleva sus propias animaciones y que estaba asignando las que no eran, así que me he pelado el culo probando, pero es que me salen cientos, y por ejemplo con un modelo he probado todos los de unarmed idle, y tampoco, así que no es eso, he buscado la documentación, y no hay ninguna.
 
Así pues me pregunto, por ejemplo, si es que cuando se hacen Assets hay una serie de convenciones que me estoy saltando por ignorarlas, si estoy saltándome algún paso por desconocimiento, o si simplemente lo estoy haciendo como el culo. No sé si alguien con más experiencia en animaciones o en assets me puede dar una idea.
 
Como siempre, muchas gracias por vuestro tiempo.
#14
General (Antiguo) / Cuestion de magnitudes
Julio 25, 2016, 12:30:32 PM
Hola,
 
Estoy empezando a buscar assets para iniciar la parte gráfica. El problema es que no tengo idea de a partir que punto empezaría a ralentizar. Ahora mismo los modelos que barajo estarían sobre los 10.000 triángulos, aunque habrían varios de estos en escena. También he visto algunos hiperrealistas, que se suben hasta los 200.000 e incluso más, pero los descarto tanto por el número de triángulos como por el precio.
 
Así que los que más o menos tengan referencias para orientarme de cuantos triángulos puede mover bien una escena por ejemplo a nivel orientativo solamente, estaría agradecido. Decir que sólo considero que funcione en PC.
 
Muchas gracias a todos.
#15
General (Antiguo) / Instanciar
Julio 18, 2016, 06:07:41 PM
Hola nuevamente.
 
Otra vez atrancado en algo que será una chorrada pero tras un par de días de pelearme con ello, mirar en la ayuda de Unity y el foro, diría que lo estoy haciendo calcado, pero no, hay algo que no me va. Trato de instanciar un prefab, y lo curioso es que me lo genera, así que mal, mal, no lo estoy haciendo, pero algo no "rula". Me explico, al crearlo quiero tener una referencia al objeto instanciado para poder lógicamente modificar sus propiedades. Pero no hay manera. No es mucho problema, podría buscar por tipo, o añadirle un tag, imagino que funcionaría, pero la primera cuestión es que parece más evidente obtener esta referencia en el momento de la creación, es más limpio y consume menos recursos. Segundo, por qué si no lo estoy consiguiendo, es que algún concepto no he entendido bien, y eso puede ser un problema importante más adelante, así que si alguien puede darme una idea de qué estoy haciendo y/o entendiendo mal, estaría muy agradecido.
 
Empiezo creando la referencia a un GameObject en la declaración de la clase:
 



   
       
   
   
      public GameObject Planeta1GO;
   
   
      //Y procedo a la instanciación del prefab.
   
   
      Planeta1GO = Instantiate(PrefabPlaneta, transform.position, transform.rotation) as GameObject;
   
   
       
   

[/quote]
 
Me crea el objeto sin problema, lo veo en el juego, en el inspector e incluso puedo mani***rlo manualmente desde la pantalla de diseño. Sin embargo Planeta1GO me aparece siempre como NONE (GameObject), vamos el Null de toda la vida. He probado a crear el objeto en la misma línea de la instanciación como he visto en muchos ejemplos:
 



   
       
   
   
      GameObject Planeta1GO = Instantiate(PrefabPlaneta, transform.position, transform.rotation) as GameObject;
   
   
      //También tratando de hacer un cast
   
   
      GameObject Planeta1GO = (GameObject) Instantiate(PrefabPlaneta, transform.position, transform.rotation);
   
   
       
   

[/quote]
 
Y todas las combinaciones que se me han ocurrido.
 
Como siempre muchas gracias a todos.
 
 
#16
Bien, para dar una idea, imaginemos que es un juego de estrategía y que ha de lanzar unos eventos periódicos, imaginemos por ejemplo, cada mes, cobrar los impuestos, pagar las nóminas de funcionarios, incorporación de reclutas a filas, incrementos de población, etc.Tengo hecho un timer y un Objeto que es un director de juego, que se encarga de crear las nuevas entidades según conviene, y meterlos en colecciones para tenerlos controlados y esas cosas. Lo tengo resuelto de tal forma que cuando se cumple un mes en el timer, ataca una función del director del juego la cual se encarga de recorrer uno por uno todos los elementos de las colecciones (forearch) y ejecutar a su vez las funciones de "fin de mes" para que cada uno de los pueblos paguen los impuestos, recluten los reclutas, paguen a los funcionarios, incrementen población, etc... y va bien. Ahora, trato más de aprender que no que las cosas funcionen (Aunque cuando lo hacen es un gusto, jejejejeje...) y aún me faltan muchos conceptos por asimilar, así que mi pregunta para el foro es... Se os ocurre un método mejor de hacerlo? Más eficiente? O podríamos decir que el que empleo es el más óptimo para este propósito?Nuevamente muchas gracias a todos.
#17
Hola, siento si se ha preguntado miles de veces, lo cierto es que he buscado y no he encontrado, así que nuevamente recurro a vuestra ayuda,En tema es lo siguiente, creo una pantalla de menú con una imagen y unos botones que dependen de la imagen. Al pulsar determinado botón, a de activarse otra imagen que tiene otra serie de botones dependientes. Hasta aquí, bien, pero al tratar de activar la imagen con image,enabled = true, ni caso. Copio el código entero por si afecta alguna otra parte o descuido algo.using UnityEngine;
using System.Collections;
using UnityEngine.UI;public class ClsDirectorDeMenus : MonoBehaviour {    public int opcion;    public Image panelImagenSelector;
    public Image panelImagenPlaneta;    public void botonPulsado(int boton)
    {
        switch (boton)
        {
            case 1:
                if(opcion == 0)
                {
                    opcion = 1;
                    panelImagenPlaneta.enabled = true;
                }
                break;
        }
    }
}Nuevamente, muchas gracias a todos.
#18
General (Antiguo) / Serialización. Listas y objetos
Febrero 15, 2016, 09:08:41 PM
Hola,Pues sigo aprendiendo y practicando. Esencialmente me gustaría preguntar si alguien conoce un buen manual o tutorial sobre serialización, especialmente dirigido hacia la parte de listas y referencias a objetos, que es dónde la estoy liando bonita. Me gustaría que fuera más práctico y por conceptos, más que nada para saber cuando y como es coherente serializar, ya que creo que tengo malas costumbres del C++ y estoy dando cosas por supuestas erróneamente. He pegado una vuelta a las ayudas de microsoft y las cosas que salen a bote pronto googleando, pero lo que me sale no profundiza mucho y no me resuelve mis dudas de fondo.Y ya que estoy, aprovecho para preguntar una de mis dudas. Cuando creo un objeto y lo añado con un add a una lista, entiendo que no se crea una copia del objeto a la lista, sino una referencia al objeto original. Alguien puede confirmármelo?Y siguiendo con mis dudas, si no es abusar, planteo el caso que me atormenta ahora mismo. Para que os situéis es un juego de estrategia naval. Creo una clase arma, dónde figuran tiempos de recarga, cadencia de disparo, consumo de munición, alcance máximo etc. Para poner un ejemplo, un antiaeréo de 20mm. Para calcular su impacto, creo otra clase dónde se marca distancia, probabilidad, penetración... Siguiendo con el ejemplo, a 500 metros tiene una probabilidad de un 5% de acertar y atraviesa 20mm de blindaje, a 1000 un 2% y atraviesa sólo 5mm. Esto lo añado al arma con una lista. Después creo una clase torreta, dónde según el tipo de arma podrá tener montajes simples, dobles, triples, cuadruples, sextuples, octuples. Esto tiene sentido sobre todo al pensar en montajes antiareos complejos o en las piezas principales, ya que tienen blindaje, velocidad de rotación y recarga más lentos, pero incrementa las posibilidades de impacto. Más si luego que pensamos que cada torre tendrá una ubicación y la de proa podrá disparar a proa, estribor y babor, pero una pieza en estribor sólo a proa estribor y popa, que una torreta montada más atrasada sobre otra sufrirá una penalización en velocidad de rotación y en efectividad o que una batería secundaria puesta al lado de una mayor sólo podrá abrir fuego defensivo por ejemplo a proa y estribor... Bien, me lío. El caso es que a la clase torreta sólo le añado una referencia al objeto arma, ya que tenga una, dos, tres u ocho piezas, siempre serán del mismo tipo. Hasta aquí bien. Luego creo una clase contenedora (Una mala costumbre del C++, hecho de menos el main) donde creo las tres listas de objetos de armas, puntería y torretas, y asigno a cada arma sus tablas de puntería, y a cada torreta la arma que le corresponde. Y serializo. Y ahí es dónde me lía el pitosfio. Al ver la serialización tengo toda la tabla de puntería, luego toda la tabla de armas y toda la tabla de torretas. Ahora bien, al abrir las armas, veo que también me ha serializado en su interior toda la tabla de puntería. Bueno, eso no es muy grave, podría cargarme la tabla que las agrupa todas las punterías, ya que pensando, resulta redundante. Ahora, el trauma me viene con las torretas, no sólo me guarda la referencia, sino el objeto entero, es decir, el arma y todas las tablas de puntería del arma. Y aquí la primera de mis cuestiones. Entiendo que al deserializar, no me crearía un objeto arma, como tengo en origen, sino un objeto arma por cada tipo de torreta, lo cual es un desperdicio de memoria en objetos duplicados, cuadriplicados e incluso más. Lo ideal sería que existiera un comando que indicara que sólo es una referencia, no un objeto en si (He buscado, pero o no existe o no he sabido encontrarlo). Se me ocurren dos soluciones, a no ser que alguien más experimentado me apunte una tercera. La primera sería serializar sólo las colecciones enteras sin las referencias entre objetos, añadiéndoles un ID y reconstruyendo después las referencias a través por ejemplo de LINQ (Entiendo que Unity lo implementa, una solución muy SQL, lo reconozco). La segunda cambiar la jerarquía y hacer que las torretas dependan del arma (Es decir, una lista en el propio arma) ya que un arma podrá estar montada en diferentes tipos de torretas, en cambio una torreta sólo tendrá una o más armas siempre del mismo tipo, pero como concepto me choca. A vosotros que os parece mejor solución?En fin, que pregunto más cuestiones de concepto que de implementación. Perdón si pregunto burradas, pero es que lo encuentro googleando se centra más en la implementación que en los conceptos, que seguramente es dónde más fallo.Perdón por el tocho y gracias nuevamente a todos.
#19
General (Antiguo) / Problema 3dText y LookAt
Febrero 07, 2016, 08:45:05 PM
Bueno, el problema es bastante absurdo, pero me estoy dejando la salud mental.Estoy con un juego de estrategia, así que rotulo determinados objetos con un 3dText, de modo que el jugador no se pierda teniendo que buscar las cosas. Evidentemente al desplazar la cámara los textos salen orientados tal como marqué en diseño, de tal modo que según como se pone la cámara no se ve nás, cosa que apaño añadiendo al Update del rótulo el LookAt, lo divertido del tema, es que ahora haga lo que haga, mueva la cámara como la mueva, me aparecen los textos al revés, rotados 180º, vamos, con lo cual no sé que estoy haciendo mal.Adjunto la función Update, que como veis no tiene gran cosa.    void Update () {
        this.transform.LookAt(camara.transform);
    }estaré muy agradecido si alguien aporta alguna idea o si estoy haciendo algo mal.Muchas gracias.
#20
General (Antiguo) / Pregunta retórica
Noviembre 23, 2015, 09:48:43 PM
Hola a todos.Hace poco que ando trasteando con Unity, y gracias a este foro estoy aprendiendo mucho y deprisa (una pequeña parte de lo que me queda, eso si). Vengo del C++ (Sin visual) y gracias a este foro he descubierto lo mucho que ha progresado el mundo de la programación (Que maravilla la serialización, por ejemplo, fácil y rápido. Antes lo teníamos que hacer eso a mano, abriendo el fichero y escribiendo o leyendo línea a línea)Bueno, no voy a entreteneros con mis historietas del abuelo cebolleta. El caso es que estoy con una clase que tendrá decenas de objetos, pero quiero que cada uno sea diferente en su comportamiento, la forma y momento de activarse, y los efectos que causa, pero la gracia es que han de ser todos de una misma clase, no quiero crear clases diferentes. Bien, en un principio me había planteado la solución clásica, hacer que los parámetros que condicionen los diferentes comportamientos, sean variables de la clase para que en cada objeto sea diferente y ahí en las funciones adecuadas, meter un montón de sentencias if case etc anidados hasta el infinito para tratar cada uno de los posibles comportamientos. Ahora bien, trasteando en diversos juegos que tengo, me doy cuenta que muchos de ellos meten el código del comportamiento directamente en unos archivos externos, que leen al ejecutar. Entonces se me ocurre la pregunta interesante, es posible que este código sea leído como una cadena o varias cadenas y que exista una función que permita la ejecución de este código, o bien existe un maravilloso método que permite ejecutar o sobreescribir funciones de la clase, o bien una forma aún más elegante de hacer esto? O simplemente veo esto tan evolucionado que se me va la pelota haciendo cábalas sobre las cosas que aún desconozco y como podría funcionar y lo único que hacen es hacer servir el método clásico sólo que han elaborado un sistema "interprete" con if case anidados, tan elaborado que les permite cargar desde una cadena y así ahorrar variables?Muchas gracias a todos por leerme y perdón por el tocho.