(五)BIM-Unity 搭建数字孪生 - Unity前端请求API获取数据
同理,实际项目中,前端通过阿里云等服务器去获取数据的形式也是类似如此,均通过读取API的形式去获取。至此,完成了一个简单的天气数据获取测试,在实际应用中,主要用于如智慧园区、智慧工地大屏的左上角或图表实时数据的读取,当然实时数据主要来源于现场,这涉及到物联网开发,有时间我会在写一个,如何从现场读取数据到后端的测试。现在我需要在Unity中,给我的Canvas添加一个天气,使其每次启动的时候读取一次
easymock为例进行测试。(之前一直使用的是 fastmock,但fastmock要离我们而去了.)

所以此次用easymock来测试。
EasyMock 是一个用于 Java 单元测试的模拟(Mock)框架,能够通过简单的方法为给定的接口或类生成 Mock 对象。 它允许开发者在测试中模拟复杂的依赖关系,使测试过程更加简洁、独立。
使用 EasyMock 的基本步骤包括:
-
创建 Mock 对象:使用
EasyMock.createMock()方法为要模拟的接口或类生成 Mock 对象。 -
设定 Mock 对象的预期行为和输出:在测试中,定义当 Mock 对象的方法被调用时应返回的值或抛出的异常。
-
将 Mock 对象切换到 Replay 状态:通过调用
EasyMock.replay()方法,将 Mock 对象切换到 Replay 状态,以便在测试中使用。 -
调用 Mock 对象方法进行单元测试:在测试中调用被测方法,Mock 对象将按照预先设定的行为响应。
-
对 Mock 对象的行为进行验证:使用
EasyMock.verify()方法,检查 Mock 对象的预期方法是否被正确调用。通过以上步骤,EasyMock 能够有效地模拟对象行为,帮助开发者在单元测试中隔离待测代码与其依赖的其他组件。 百度智能云+3CSDN博客+3百度智能云+3
进入easymock后,新建一个项目。
URL随便写,这个不重要,主要用于分类。选择一下Method类型,添加一下描述信息 。
我的测试数据如下:

现在我需要在Unity中,给我的Canvas添加一个天气,使其每次启动的时候读取一次服务器端的天气信息进行更新。先上代码,完整代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static NewBehaviourScript;
using UnityEngine.Networking;
using UnityEngine.UI;
public class NewBehaviourScript : MonoBehaviour
{
public Text weather;
// 用来接收天气数据的类实例
WeatherData weatherData = new WeatherData();
// Start is called before the first frame update
void Start()
{
StartCoroutine(getWeatherData());
}
// Update is called once per frame
void Update()
{
}
[System.Serializable]
public class WeatherData
{
public string wendu; // 温度
public string shidu; // 湿度
public string tianqi; // 天气状况
public string fengxiang; // 风向
}
// ---------- 解析Json数据的协程 ----------
IEnumerator getWeatherData()
{
// 指定远程请求的URL,这里是FastMock的一个测试链接
string url = "https://mock.presstime.cn/mock/67d8da61bbeaf93de4b683ec/example/myapi/weather";
// 使用UnityWebRequest进行GET请求
using (UnityWebRequest unityWebRequest = UnityWebRequest.Get(url))
{
// 等待请求响应
yield return unityWebRequest.SendWebRequest();
// 判断请求是否出现连接错误
if (unityWebRequest.result == UnityWebRequest.Result.ConnectionError)
{
Debug.Log("连接失败");
Debug.Log(unityWebRequest.error);
}
else
{
// 解析Json,将返回数据映射到 WeatherData 对象中
weatherData = JsonUtility.FromJson<WeatherData>(unityWebRequest.downloadHandler.text);
// 更新UI文本,将获取的天气信息显示出来
weather.text = "天气:" + weatherData.tianqi
+ " 湿度:" + weatherData.shidu
+ " 温度:" + weatherData.wendu
+ " 风向:" + weatherData.fengxiang;
}
}
}
}
首先,我先定义了一个 天气 类,包含了 天气、湿度、温度 和 风向信息。注意:此处的 [System.Serializable] 一定要加上,否则会解析Json数据失败。
[System.Serializable]
public class WeatherData
{
public string wendu; // 温度
public string shidu; // 湿度
public string tianqi; // 天气状况
public string fengxiang; // 风向
}
getWeatherData方法的模块比较固定,string url中的 url 即直接从 easymock 中复制即可,在这个地方。

拿到后就可读取 数据库中的信息,并以 WeatherData 类的形式返回。
最后我要在Unity上显示的数据为:
weather.text = "天气:" + weatherData.tianqi+ " 湿度:" + weatherData.shidu+ " 温度:" + weatherData.wendu+ " 风向:" + weatherData.fengxiang;
运行一下试试,结果如下:
运行前:

运行后:

仅此而已。同理,实际项目中,前端通过阿里云等服务器去获取数据的形式也是类似如此,均通过读取API的形式去获取。少数情况下会用到直连数据库的形式(MySQL),因为直连需要输入数据库的 账号 和 密码,会直接暴露数据库安全。如果你对连接数据库有兴趣可以看另一篇文章:(二)BIM-Unity 搭建数字孪生-Unity 连接 MySQL_unity 连接 mysql工具-CSDN博客。
至此,完成了一个简单的天气数据获取测试,在实际应用中,主要用于如智慧园区、智慧工地大屏的左上角或图表实时数据的读取,当然实时数据主要来源于现场,这涉及到物联网开发,有时间我会在写一个,如何从现场读取数据到后端的测试。
更多推荐


所有评论(0)