代码之家  ›  专栏  ›  技术社区  ›  zyonneo

如何根据Unity中已加载的所有模型列表中的类别显示项目?

  •  0
  • zyonneo  · 技术社区  · 7 年前

    List<int> assetiid = new List<int>();
    List<string> productname = new List<string>();
    List<string> productcatogery = new List<string>();
    List<string> productcatogeryid = new List<string>();
    List<string> productdesc = new List<string>();
    List<int> assetpriceurl = new List<int>();
    List<string> assetimageurl = new List<string>();
    List<string> assetimageurl1 = new List<string>();
    List<string> assetimageurl2 = new List<string>();
    List<string> assetimageurl3 = new List<string>();
    
    
    List<string> assetmodelurl = new List<string>();
    
    
    string JSONDataString;
    
    
    public static PopulateGrid Instancepop;
    
    public void Awake()
    {
        Instancepop = this;
    }
    
    
    // Use this for initialization
    public void Start ()
    {
        StartCoroutine(GetData());
    
    }
    
    // Update is called once per frame
    void Update () 
    {
    
    
    }
    
    IEnumerator GetData()
    {
    
        string URL = "http://test.com/test/api/products";//fake api
        WWW readjson = new WWW(URL);
        yield return readjson;
    
        if (string.IsNullOrEmpty(readjson.error))
        {
    
            JSONDataString = readjson.text;
        }
    
        JSONNode JNode = SimpleJSON.JSON.Parse(JSONDataString);
    
        for (int i = 0; i < JNode.Count; i++)
        {
            //Debug.Log("Image URLS before = " + JNode[i]["product_images"][0]);
            assetiid.Add(JNode[i]["id"]);
            productname.Add(JNode[i]["product_name"]);
            productcatogery.Add(JNode[i]["product_category"]);
            productcatogeryid.Add(JNode[i]["product_category_id"]);
            productdesc.Add(JNode[i]["product_description"]);
            assetpriceurl.Add(JNode[i]["product_price"]);
    
            assetimageurl.Add(JNode[i]["product_images"][0]);
            assetimageurl1.Add(JNode[i]["product_images"][1]);
            assetimageurl2.Add(JNode[i]["product_images"][2]);
            assetimageurl3.Add(JNode[i]["product_images"][3]);
    
            assetmodelurl.Add(JNode[i]["product_model"]);
    
    
            Debug.Log("Image URLS = "+assetimageurl[i] );
    
    
        }
    
        StartCoroutine(FillData());
    
    
    }
    
    IEnumerator FillData()
    {
        //for (int i = 0; i < assetimageurl.Count; i++)
        for (int i = 0; i < assetimageurl.Count; i++)
        {
            Texture2D tex;
            tex = new Texture2D(150, 150, TextureFormat.DXT1, false);
    
    
            WWW imgurllinks = new WWW(assetimageurl[i]);
            yield return imgurllinks;
    
            if (string.IsNullOrEmpty(imgurllinks.error))
            {
                yield return null;
    
            }
    
            imgurllinks.LoadImageIntoTexture(tex);
            rimg.texture = tex;
    
            //RawImage newItem = Instantiate(rimg) as RawImage;
            //newItem.transform.SetParent(ParentTransform.transform,false);
            Productxt.text = productname[i];
            Pricetxt.text = assetpriceurl[i].ToString();
    
                Instantiate(Mainprefab, ParentTransform);
    
        }
    
    
    }
    

    以下是所有产品的详细API(未显示完整API)

    "id":1,"product_name":"Dining Chair ","product_category_id":3
    

    [{"id":1,"category":"Chairs"},{"id":2,"category":"Tables"},{"id":3,"category":"Beds"}]
    

    类别API中的“id”与完整产品API中的“product_Category_id”匹配,以根据类别显示它们。

    如果我在类别视图中单击chairs,我希望显示已加载详细信息中“product_category_id”=3的产品的所有详细信息

    public void ButtonClickedOn(int buttonNo)
    {
        buttonNo = Index;
    
        Debug.Log("Button clicked = " + buttonNo);
    
        if(buttonNo==0)
        {
     //Category 1 is clicked
    
        }
    
    }
    

    Category view

    0 回复  |  直到 7 年前
        1
  •  0
  •   Masoud Darvishian    7 年前

    使用 Json.NET 反序列化您的 json 进入 C# Object linq 使用特殊类别筛选列表。

    console 工作示例

    using Newtonsoft.Json;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    class ProductDetails
    {
        public int id { get; set; }
        public string product_name { get; set; }
        public int product_category_id { get; set; }
    }
    
    class Category
    {
        public int id { get; set; }
        public string category { get; set; }
    }
    
    class Program
    {
        static void Main()
        {
            string productJson = @"[{'id': '1', 'product_name':'test', 'product_category_id': '1'},
                                    {'id': '2', 'product_name':'Dining Chair', 'product_category_id': '3'},
                                    {'id': '3', 'product_name':'Dining Chippsss', 'product_category_id': '3'}]";
    
            string categoryJson = @"[{ 'id':'1','category':'Chairs'},
                                    { 'id':'2','category':'Tables'},
                                    { 'id':'3','category':'Beds'}]";
    
            var categories = JsonConvert.DeserializeObject<List<Category>>(categoryJson);
            var products = JsonConvert.DeserializeObject<List<ProductDetails>>(productJson);
    
            // Finding tables category
            var query = (from x in products
                         where x.product_category_id == 3
                         select x);
    
            foreach (var product in query)
            {
                var category = categories.SingleOrDefault(x => x.id == product.product_category_id);
    
                Console.WriteLine("Product Name: " + product.product_name + 
                                  " - Product Category: " + category.category);
            }
        }
    }