Jump to content

Search the Community

Showing results for tags 'listas'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • General
    • Proyectos
    • Offtopic
    • Unity Feeds
    • Website
  • Mesa de ayuda
    • Unity
    • Arte
    • Builds & Dispositivos
    • Otras Especialidades
  • Aportes de la Comunidad
    • Recursos
    • Eventos
  • Bolsa de trabajo & Colaboraciones
    • Ofertas y Demandas
  • Post Antiguos
    • General (Antiguo)

Blogs

There are no results to display.

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Especialidad

Found 4 results

  1. tengo un par de problemas con un script, ya que yo usaba solo JS se me dificulta un poco el hacer ciertas cosas en C# El Objertivo esta en el Update, ya que se van a estar instanciando varios enemigos durante la escena, quiero que detecte a todos en cada momento, al guardarlos en una lista (Array [ ]), no me deja ponerlos como el objetivo, ya qu e sale un error de convercion a transform o position. como puedo hacer que en la lista, ejemplo: 3 enemigos (Enemigo 0, Enemigo1, Enemigo 2) me detecte el que esta mas cerca y vaya tras el, y no que se vaya por el ultimo de la lista te muestro este script: //Estadisticas public int Salud = 100; public int Velociad = 2; //Componentes public UnityEngine.AI.NavMeshAgent Agente; //Enemigos public Transform Objetivo; GameObject Obj; //Funciones void Update () { Objetivo = GameObject.FindGameObjectWithTag("Humano").transform; if (Obj == null) { Debug.Log ("Ganaste"); } Agente.destination = Objetivo.position; } void OnTriggerEnter (Collider otro) { if (otro.tag == "Humano") { Obj = otro.gameObject; } } Asi como esta el Script busca al ultimo creado, pero esta hasta el fondo, pasa a travez de todos para atacar al que esta mas escondido, algo ilogico. Espero me haya explicado y puedas entenderme y ayudarme, estoy estancado con eso desde hace mucho.....
  2. 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: 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: 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.
  3. Muy buenas, estoy creando un inventario a traves de una lista y no encuentro la manera de comprobar si un objeto existe en el inventario, la lista la he creado así: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Inventory { public string name; public int health; public Inventory(string newName, int newHealth) { name = newName; health = newHealth; } } Para añadir un objeto lo que hago es esto: Donde manzana es el nombre del objeto y 1 su poder de salud (health en el código de arriba). Lo que intento es saber como buscar en mi lista si por ejemplo tengo una manzana pero no encuentro el comando adecuado, alguna idea?? :S Muchísimas gracias. PD: El primer código y el segundo están en scripts distintos, aunque no creo que eso suponga ningún problema al declarar las variables públicas.
  4. 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.
UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...