在协程中实例化GameObject时出现无限问题

时间:2019-04-30 18:33:17

标签: c# unity3d

我正在尝试通过Unity项目中的脚本实例化GameObject。问题在于,在Unity上执行时,它会开始创建预制件的无限克隆。

这是MonumentFactory.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using Newtonsoft.Json.Linq;

public class MonumentFactory : MonoBehaviour
{
    // Class to handle monuments information
    public class Monumento
    {
        public string nombre;
        public int codvia;
        public double[] coordinates;
    }

    // List of loaded monuments
    public List<Monumento> Monumentos;

    // UTM center value
    public double[] utmCenter = { 721441.668, 4376931.207 };

    // 3D representation of each monument
    public GameObject MonumentPrefab;

    // URL to download monuments information
    public string url = "http://mapas.valencia.es/lanzadera/opendata/Monumentos-turisticos/JSON";

    // Start is called before the first frame update
    void Start()
    {
        // Load monuments JSON
        StartCoroutine(GetRequest(url));
    }

    IEnumerator GetRequest(string url)
    {
        // Create web request
        using (UnityWebRequest webRequest = UnityWebRequest.Get(url))
        {
            // Request and wait for the desired content
            yield return webRequest.SendWebRequest();

            // Check errors
            if (webRequest.isNetworkError)
            {
                Debug.LogError("Error loading monuments: " + webRequest.error);
            }
            else
            {
                Monumentos = new List<Monumento>();

                // Parse JSON
                JObject todo = JObject.Parse(webRequest.downloadHandler.text);
                foreach (JObject m in todo["features"])
                {
                    Monumento monumento = m["properties"].ToObject<Monumento>();
                    monumento.coordinates = m["geometry"]["coordinates"].ToObject<double[]>();
                    Monumentos.Add(monumento);

                    // Debug information
                    Debug.Log(monumento.nombre + " " + (monumento.coordinates[0] - utmCenter[0]) + " " + (monumento.coordinates[1] - utmCenter[1]));

                    // Create position acording to UTM center
                    Vector3 pos = new Vector3(
                            (float)(monumento.coordinates[0] - utmCenter[0]),
                            0,
                            (float)(monumento.coordinates[1] - utmCenter[1]));

                    // Create the 3D representation of the monument in its 3D position
                    GameObject aux = Instantiate(
                        MonumentPrefab,
                        pos,
                        Quaternion.identity
                       // transform
                        );

                    // Set monument information, in this case only the name
                    aux.GetComponent<Monument>().label.text = monumento.nombre;
                    Debug.Log(aux.GetComponent<Monument>());

                }
            }
        }
    }
}

这个Monumnet.cs

using System.Collections.Generic;
using UnityEngine;

public class Monument : MonoBehaviour
{
    public TMPro.TextMeshPro label;
    // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        //Look always to the camera
        transform.LookAt(Camera.main.transform, Vector3.up);

        //Adjust size according to the distance from the camera
        float dist = (transform.position - Camera.main.transform.position).magnitude;
        float tam = 0.1f * dist;
        transform.localScale = new Vector3(tam, tam, tam);
    }
}

我希望为JSON文件中的每个元素创建GameObject的实例。有什么建议吗?

0 个答案:

没有答案