Noticias

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

duda consultas en diccionario o lista

Iniciado por oridar, Mayo 22, 2017, 09:54:00 PM

Tema anterior - Siguiente tema
Mayo 22, 2017, 09:54:00 PM Ultima modificación: Mayo 23, 2017, 09:35:28 PM por oridar
buenas a todos, a ver si me pueden orientar que no consigo que me funcione.
 
Estoy intentando hacer una lista o diccionario en el que he introducido 4 propiedades de tipo string.
 
esto es una:
 

public class listaMesclas {
    public string nombre;
    public string compBase;
    public string compExtra;
    public string catalizador;
    public listaMesclas(string newNombre, string newBase, string newExtra, string newCata){
        nombre = newNombre;
        compBase = newBase;
        compExtra = newExtra;
        catalizador = newCata;
    }
}

 
luego en otro script por otro lado hago las entradas,(solo pongo tres ahora tengo unas 20 y la idea es ir ampliando):
 

List<listaMesclas> Mezcla = new List<listaMesclas>();
    Mezcla.Add (new listaMesclas("semillaPlanta1","Azufre", "Carbon", "pocion1" ));
    Mezcla.Add (new listaMesclas("semillaPlanta2","Azufre", "Plata", "pocion2" ));
    Mezcla.Add (new listaMesclas("semillaPlanta3","Carbon", "Plata", "pocion3" ));

 
hasta aquí creo que bien.
 
lo que intento conseguir es poder comprobar si en un trigger tengo tres objetos con los nombre de la lista, por ejemplo Azufre, carbon, y pocion1, que me devuelva la posición o el nombre del primer valor, semillaPlanat1 en este caso, o la posición 0.
 
el trigger lo tengo, no se como hacer las consultas en el diccionario y dar validez a una posición si se cumplen los tres parámetros.
 
he estado buscando pero en tema List y Dictionary soy muy principiante, si conocen un sistema mejor también lo agradecería 
 
gracias de antemano por la atención .
 
p.d. si necesitan el script entero lo pasaría.
 
 

no necesitas usar diccionarios en el script imagino que lo que quires hacer es una espcie de sistema de crafting, podrias añadir lo siguiente
 

public class Inventario
{
public List<string> items;
    public List<listaMescla> mezcla;
     
    void OnTriggerEnter(Collider other)
{
      for(int n = ; n < mezcla.Count ; n++)
      {
          if(items.Contains(mezcla[n].compBase) && items.Contains(mezcla[n].compExtra) && items.Contains(mezcla[n].catalizador))
          {
               Debug.log("El jugador posee los ingrediendes para craftear " + mezcla[n].nombre);
          }
      }
    }
}

 
 

puedes usar lambda:
 

ListaMesclas lm = Mezcla.Find(o => o.comBase == "nombreObjeto");
//recogera de tu lista la que en comBase tenga "x objeto".
//donde 'o' es una variable de tipo ListaMesclas.
...

 
o como tu lo quieras usar, esta es una forma de acceso rapido a listas o diccionarios.
 
-> En una Lista puedes acceder desde un indice de tipo int=> lista[index].propertie...
 
-> En un diccionario cambia la cosa, si lo declaras con un Key de tipo string puedes acceder al diccionario de esta forma=>
 

Dictionary<string,string> d = new Dictionary<string,string>();
 d.Add("key1","value1");
d.Add("key2","value2");
d["key1"] = "nuevo valor";

 
puedes buscar referencia sobre lambda o System.Collection.Generic (es el nombre de espacio de List y Dictionary) en internet.
 
Un Saludo.

····>Desarrollando un videojuegos online-arcade para Android.


····>Programador en:C,C#,VB.net,PHP,HTML5,SQL,JS,Ruby.


····>Trabajando en: Desarrollo de paginas web y bushistudios.


                    ๑۩۞۩๑_(▀▄)KINGTRASE()_๑۩۞۩๑ 



La clase List implementa un método que busca en todos los elementos con las condiciones que tú definas, en otras palabras tu objeto Mezcla tiene una función que busca en todas las listaMezclaClas la que coincida con las condiciones que quieras, esto lo hace haciendo uso de un predicado, un predicado es un tipo de delegado que es como una función que creas para buscar en la lista.
 
Depende de lo que quieras lograr puedes buscar por elementos que tiene listaMezclaClas o puedes buscar de los 20 elementos los que tengas:
 

//Busca todos los elementos que contengan "Carbon"
List<listaMezclaClas> primerFiltro = Mezcla.FindAll( x=> x.compBase == "Carbon" || x.compExtra == "Carbon");
 
//Busca en los elementos que tienen carbon los elementos que contengan "Azufre"
List<listaMezclaClas> segundoFiltro = primerFiltro.FindAll ( x=> x.compBase == "Azufre" || x.compExtra == "Azufre");
 
//Puedes hacerlo una última vez con la opción "PocionX"

 
De esta forma puedes crear en tu trigger una función que busca los objetos que tienes y si con los objetos que tienes hay alguna opción o más de una posible simplemente la devuelve, el problema es que si tienes muchos objetos diferentes puedes tener muchas combinaciones, por esto estaría bien que comenzaras por el más restrictivo, por ejemplo si tienes 10 compBase pero solo 4 pociones, busca siempre primero las pociones que tengas.
 
Igual hay otra forma menos complicada de hacerlo pero así es como yo lo haría. Suerte!
 
 

Cita de: juanma_teso date=1495811414La clase List implementa un método que busca en todos los elementos con las condiciones que tú definas, en otras palabras tu objeto Mezcla tiene una función que busca en todas las listaMezclaClas la que coincida con las condiciones que quieras, esto lo hace haciendo uso de un predicado, un predicado es un tipo de delegado que es como una función que creas para buscar en la lista.
   
   
      Depende de lo que quieras lograr puedes buscar por elementos que tiene listaMezclaClas o puedes buscar de los 20 elementos los que tengas:
   
   

//Busca todos los elementos que contengan "Carbon"
List<listaMezclaClas> primerFiltro = Mezcla.FindAll( x=> x.compBase == "Carbon" || x.compExtra == "Carbon");
 
//Busca en los elementos que tienen carbon los elementos que contengan "Azufre"
List<listaMezclaClas> segundoFiltro = primerFiltro.FindAll ( x=> x.compBase == "Azufre" || x.compExtra == "Azufre");
 
//Puedes hacerlo una última vez con la opción "PocionX"

   
      De esta forma puedes crear en tu trigger una función que busca los objetos que tienes y si con los objetos que tienes hay alguna opción o más de una posible simplemente la devuelve, el problema es que si tienes muchos objetos diferentes puedes tener muchas combinaciones, por esto estaría bien que comenzaras por el más restrictivo, por ejemplo si tienes 10 compBase pero solo 4 pociones, busca siempre primero las pociones que tengas.
   
   
      Igual hay otra forma menos complicada de hacerlo pero así es como yo lo haría. Suerte!
   
   
       
   


gracias por tu respuesta, ya encontre un sistema parecido, pero m elo guardo como alternativa, gracias de verdad.
 
Cita de: kingtrase date=1495810844puedes usar lambda:
   
   

ListaMesclas lm = Mezcla.Find(o => o.comBase == "nombreObjeto");
//recogera de tu lista la que en comBase tenga "x objeto".
//donde 'o' es una variable de tipo ListaMesclas.
...

   
      o como tu lo quieras usar, esta es una forma de acceso rapido a listas o diccionarios.
   
   
      -> En una Lista puedes acceder desde un indice de tipo int=> lista[index].propertie...
   
   
      -> En un diccionario cambia la cosa, si lo declaras con un Key de tipo string puedes acceder al diccionario de esta forma=>
   
   

Dictionary<string,string> d = new Dictionary<string,string>();
 d.Add("key1","value1");
d.Add("key2","value2");
d["key1"] = "nuevo valor";

   
      puedes buscar referencia sobre lambda o System.Collection.Generic (es el nombre de espacio de List y Dictionary) en internet.
   
   
      Un Saludo.
   


si, encontre algo parecido, gracias por el comentario.
 
Cita de: James Roman date=1495766166no necesitas usar diccionarios en el script imagino que lo que quires hacer es una espcie de sistema de crafting, podrias añadir lo siguiente
   
   

public class Inventario
{
public List<string> items;
    public List<listaMescla> mezcla;
     
    void OnTriggerEnter(Collider other)
{
      for(int n = ; n < mezcla.Count ; n++)
      {
          if(items.Contains(mezcla[n].compBase) && items.Contains(mezcla[n].compExtra) && items.Contains(mezcla[n].catalizador))
          {
               Debug.log("El jugador posee los ingrediendes para craftear " + mezcla[n].nombre);
          }
      }
    }
}

   
       
   


gracias por tu respuesta, encontre otro sistema mas principiante, jajaja, pero me inetresa este sistema, loq ue no me queda claro es como declaras que un objeto tiene x xompoennets, seria en listamezca tal como lo tenia?
 
gracias.
 
 

Etiquetas: