Unity如何使用从json字符串加载的变量作为更新部分的输入

Posted

技术标签:

【中文标题】Unity如何使用从json字符串加载的变量作为更新部分的输入【英文标题】:Unity How to use the variables loaded from json string as input in the update section 【发布时间】:2021-04-30 01:27:49 【问题描述】:

我对 Unity 和 C# 编码很陌生,所以我的问题对你们中的一些人来说可能很愚蠢,但我目前正在尝试在其坐标来自 json 字符串的位置创建一个按钮。我只是不知道下一步该去哪里存档我的目标。如何使用 json 中的 xcoor 作为更新中的输入? 这是我的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
using SimpleJSON;

public class JSONcontroller : MonoBehaviour

    public GameObject obj;
    Vector3 buttonPos;
    private string url = "http://localhost:3000/coordinates/";

    // Start is called before the first frame update
    void Start()
    
        StartCoroutine(getData());
        
    

    IEnumerator getData()
    
        UnityWebRequest request = UnityWebRequest.Get(url);
        yield return request.SendWebRequest();
        if(request.isNetworkError||request.isHttpError)
        
            Debug.LogError(request.error);
            yield break;
        
        JSONNode coordinates = JSON.Parse(request.downloadHandler.text);
        string xcoor = coordinates["x1"];
        string ycoor = coordinates["y1"];
        //Debug.Log(xcoor);


    

    // Update is called once per frame
    void Update()
    
        buttonPos = new Vector3(xcoor, ycoor, 4f);
        if (Input.GetButton("Fire1"))
            Instantiate(obj, buttonPos, Quaternion.identity);
    

还有我的示例 json 文件


  "coordinates": [
    
      "id": 1,
      "x1": "5",
      "y1": "2"
    ,
    
      "id": 2,
      "x1": "3",
      "y1": "5"
    ,
    
      "id": 3,
      "x1": "5",
      "y1": "7"
    
  ]

【问题讨论】:

使用布尔变量作为标志,并在 getData() 完成时将其设置为 true。将坐标存储在一个变量中,以便类函数可以访问。然后,在您的 Update() 中,检查标志何时为真以访问坐标 这可能是一个愚蠢的问题,但我怎样才能将从 json 中获得的内容存储为变量? string xcoor = coordinates["x1"]; string ycoor = coordinates["y1"];下应该有什么 您是否在问如何将字符串解析为浮点数(或整数)以及如何存储数字?不好意思问了,好像没听懂你的问题 【参考方案1】:

“xcoor”和“ycoor”变量实际上是在 getData() 方法中声明的,这意味着这些变量只能在 getData() 方法中使用。

您可以在类的顶部声明它们,然后您就可以使用更新中的变量并设置按钮位置。

编辑代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
using SimpleJSON;

public class JSONcontroller : MonoBehaviour

    public GameObject obj;
    Vector3 buttonPos;
    private string url = "http://localhost:3000/coordinates/";
    string xcoor;
    string ycoor;

    // Start is called before the first frame update
    void Start()
    
        StartCoroutine(getData());
        
    

    IEnumerator getData()
    
        UnityWebRequest request = UnityWebRequest.Get(url);
        yield return request.SendWebRequest();
        if(request.isNetworkError||request.isHttpError)
        
            Debug.LogError(request.error);
            yield break;
        
        JSONNode coordinates = JSON.Parse(request.downloadHandler.text);
        xcoor = coordinates["x1"];
        coor = coordinates["y1"];
        //Debug.Log(xcoor);


    

    // Update is called once per frame
    void Update()
    
        buttonPos = new Vector3(xcoor, ycoor, 4f);
        if (Input.GetButton("Fire1"))
            Instantiate(obj, buttonPos, Quaternion.identity);
    

【讨论】:

以上是关于Unity如何使用从json字符串加载的变量作为更新部分的输入的主要内容,如果未能解决你的问题,请参考以下文章

如何从 JSON 字符串转换图像数据?

如何从 Scala Json 字符串中将 Json 放入 JS 变量中?

Unity 多个滑块不会同时更新

如何从 JSON 解析到 Unity GameObject

编译后如何更改 AssemblyName 以在 Unity3d 中作为 mod 加载

从 json 文件中获取标签名称作为类中的变量