3D语音天气球(源代码分享)——通过天气服务动态创建3D球
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持!
开篇废话:
这个项目准备分四部分介绍:
一:创建可旋转的“3D球”:3D语音天气球(源代码分享)——创建可旋转的3D球
二:通过天气服务,从网络获取时实天气信息并动态生成“3D球”:3D语音天气球(源代码分享)——通过天气服务动态创建3D球
三:Android语音服务和Unity的消息传递:3D语音天气球(源代码分享)——在Unity中使用Android语音服务
四:Unity3D端和Android端的结合:3D语音天气球(源代码分享)——完结篇
关于项目的具体介绍和3D球的创建请看上面第一篇文章(重要)
今天主要解说怎样通过获取实时的天气信息去动态的创建3D球。效果图例如以下:
左边是Unity做出后在电脑上执行效果图(本节须要实现的效果)
右边是Unity结合Android和语音控制之后在手机执行的效果图(全部都介绍完后的终于效果):
cityCode=101010100&weatherType=0
{"weatherinfo":{"city":"天津","cityid":"101030100","temp1":"-6℃","temp2":"4℃","weather":"晴","img1":"n0.gif","img2":"d0.gif","ptime":"18:00"}}
{"weatherinfo":{"city":"北京","city_en":"beijing","date_y":"2014年12月16日","date":"十月廿五","week":"星期二","fchh":"18","cityid":"101010100","temp1":"-6℃~5℃","temp2":"-7℃~4℃","temp3":"-5℃~3℃","temp4":"-5℃~1℃","temp5":"-7℃~3℃","temp6":"-6℃~5℃","tempF1":"21.2℉~41℉","tempF2":"19.4℉~39.2℉","tempF3":"23℉~37.4℉","tempF4":"23℉~33.8℉","tempF5":"19.4℉~37.4℉","tempF6":"21.2℉~41℉","weather1":"晴","weather2":"晴转多云","weather3":"多云","weather4":"晴","weather5":"晴","weather6":"晴","img1":"0","img2":"99","img3":"0","img4":"1","img5":"1","img6":"99","img7":"0","img8":"99","img9":"0","img10":"99","img11":"0","img12":"99","img_single":"0","img_title1":"晴","img_title2":"晴","img_title3":"晴","img_title4":"多云","img_title5":"多云","img_title6":"多云","img_title7":"晴","img_title8":"晴","img_title9":"晴","img_title10":"晴","img_title11":"晴","img_title12":"晴","img_title_single":"晴","wind1":"北风3-4级转微风","wind2":"微风","wind3":"微风转北风4-5级","wind4":"北风3-4级","wind5":"微风","wind6":"微风","fx1":"北风","fx2":"微风","fl1":"3-4级转小于3级","fl2":"小于3级","fl3":"小于3级转4-5级","fl4":"3-4级","fl5":"小于3级","fl6":"小于3级","index":"较冷","index_d":"建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。","index48":"","index48_d":"","index_uv":"中等","index48_uv":"","index_xc":"较适宜","index_tr":"适宜","index_co":"较舒适","st1":"4","st2":"-6","st3":"4","st4":"-5","st5":"3","st6":"-4","index_cl":"适宜","index_ls":"基本适宜","index_ag":"极不易发"}}
大家能够看到返回的数据是Json格式的,如今的任务就是解析这些返回的数据来给我们的城市对象赋值。
public void parseJson(string result)
{
JsonData jd = JsonMapper.ToObject(result);
JsonData jdResult = jd["weatherinfo"]; this.name = (string)jdResult["city"];
this.temperature = (string)jdResult["temp1"];
this.temperature2 = (string)jdResult["temp2"];
setTempture (temperature, temperature2);
this.weather = (string)jdResult ["weather"];
this.img1 = (string)jdResult ["img1"];
this.img2 = (string)jdResult ["img2"];
}
img1,img2表示当前天气的图片。图片须要提前从中国天气网下载。
public void parseJson(string result)
{
JsonData jd = JsonMapper.ToObject(result);
JsonData jdResult = jd["weatherinfo"]; this.name = (string)jdResult["city"];
this.date_y = (string)jdResult["date_y"];
this.date = (string)jdResult["date"];
this.week = (string)jdResult["week"];
this.temperature = (string)jdResult["temp1"];
this.weather = (string)jdResult ["weather1"];
this.wind = (string)jdResult ["wind1"];
this.fl = (string)jdResult ["fl1"];
this.index = (string)jdResult ["index"];
this.index_uv = (string)jdResult ["index_uv"];
this.index_xc = (string)jdResult ["index_xc"];
this.index_tr = (string)jdResult ["index_tr"];
this.index_co = (string)jdResult ["index_co"];
this.index_cl = (string)jdResult ["index_cl"];
this.index_ls = (string)jdResult ["index_ls"];
this.index_ag = (string)jdResult ["index_ag"];
}
如今能够依据它来动态生成我们的3D球了。
作为參数则没有这个限制。
上篇文章已经具体介绍了怎样在大球中生成平均分布的小球。接下来的任务就是为生成的小球gameobject设置各种属性:
// 获取天气信息
public void getWeather(City city, GameObject text)
{
// 依据城市id得到获取天气服务的url
string url = "http://www.weather.com.cn/data/cityinfo/" + city.getCityID() +".html";
// 通过url来给小球赋值
StartCoroutine(GET(url,city,text));
}
返回类型为IEnumerator的协同方法,来解析天气结果并为小球赋值:
IEnumerator GET(string url, City city, GameObject text)
{
WWW www = new WWW (url);
yield return www; //GET请求失败
if (www.error != null)
{
Debug.Log ("error is :" + www.error);
}
//GET请求成功
else
{
//Debug.Log(www.text);
// 解析天气信息,给对象赋值
city.parseJson (www.text);
// 依据当前city对象中的属性给小球复制
TextMesh tm = (TextMesh)text.GetComponent<TextMesh> ();
ChangeColor changeColor = text.GetComponent<ChangeColor>(); // 推断当前对象是城市还是省份来分别赋值
if (isCity) {
tm.text = city.getName ();
changeColor.name = city.getName();
changeColor.id = city.getCityID();
changeColor.tempture = city.getTempture();
}
else
{
tm.text = city.getProName();
changeColor.name = city.getProName();
changeColor.tempture = city.getTempture();
} // 设置当前颜色
tm.color = city.getWeatherColor(); // 依据城市和省份的不同来推断是否设置图片
foreach (Transform child in text.transform) { if (isCity) {
if (child.tag == "pic1") {
//Debug.Log(getPicPath(city.getImg1()));
Texture2D pic = (Texture2D)Resources.Load(Util.getPicPath(city.getImg1()));
child.renderer.material.shader = Shader.Find ("Unlit/Transparent");
child.renderer.material.mainTexture = (Texture)pic; }
else if (child.tag == "pic2")
{
//Debug.Log(getPicPath(city.getImg2()));
Texture2D pic = (Texture2D)Resources.Load(Util.getPicPath(city.getImg2()));
child.renderer.material.shader = Shader.Find ("Unlit/Transparent");
child.renderer.material.mainTexture = (Texture)pic;
}
else
{
TextMesh tm2 = (TextMesh)child.GetComponent<TextMesh> ();
tm2.text = city.getDetailsName ();
tm2.color = city.getWeatherColor();
}
}
else
{
child.active = false;
}
}
// 设置小球大小
text.transform.localScale = city.getSize();
text.GetComponent<ChangeColor>().oldScale = text.transform.localScale;
}
}
显示单个城市具体天气信息的方法和上面大同小异,这里我就只是多介绍了。
。。
3D语音天气球(源代码分享)——通过天气服务动态创建3D球的更多相关文章
- 3D语音天气球(源码分享)——通过天气服务动态创建3D球
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 这个项目准备分四部分介绍: 一:创建可旋转的"3D球":3 ...
- 3D语音天气球(源码分享)——完结篇
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 由于这篇文章是本系列最后一篇,有必要进行简单的回顾和思路整理. 这个程序是由两 ...
- 3D语音天气球(源码分享)——在Unity中使用Android语音服务
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 这个项目准备分四部分介绍: 一:创建可旋转的"3D球":3 ...
- 3D语音天气球(源码分享)——创建可旋转的3D球
开篇废话: 在9月份时参加了一个网站的比赛,比赛的题目是需要使用第三方平台提供的服务做出创意的作品. 于是我选择使用语音服务,天气服务,Unity3D,Android来制作一个3D语音天气预报,我给它 ...
- 【案例分享】使用ActiveReports报表工具,在.NET MVC模式下动态创建报表
提起报表,大家会觉得即熟悉又陌生,好像常常在工作中使用,又似乎无法准确描述报表.今天我们来一起了解一下什么是报表,报表的结构.构成元素,以及为什么需要报表. 什么是报表 简单的说:报表就是通过表格.图 ...
- 使用three.js创建3D机房模型-分享一
序:前段时间公司一次研讨会上,一市场部同事展现了同行业其他公司的3D机房,我司领导觉得这个可以研究研究,为了节约成本,我们在网上大量检索,最后找到一位前辈的博文[TWaver的技术博客],在那篇博文的 ...
- 使用Jquery+EasyUI进行框架项目开发案例解说之中的一个---员工管理源代码分享
使用Jquery+EasyUI 进行框架项目开发案例解说之中的一个 员工管理源代码分享 在開始解说之前,我们先来看一下什么是Jquery EasyUI?jQuery EasyUI是一组基于jQuery ...
- STM32F051 IAP源代码分享
STM32F051 IAP源代码分享 假设不懂IAP的请自己主动脑补或者怒戳这里 http://www.openedv.com/posts/list/11494.htm 然后STM32F051的IAP ...
- 使用Jquery+EasyUI 进行框架项目开发案例解说之二---用户管理源代码分享
使用Jquery+EasyUI 进行框架项目开发案例解说之二 用户管理源代码分享 在上一篇文章<使用Jquery+EasyUI进行框架项目开发案例解说之中的一个---员工管理源代码分享> ...
随机推荐
- SpringMVC使用POST方法传递数据,却出现Request method 'GET' not supported?
转自:https://segmentfault.com/q/1010000011245770 问题:没有使用get获取当前页面解决方案: @RequestMapping(value = " ...
- A Reusable Aspect for Memory Allocation Checking
The checking logic would be refactored into an aspect file, as follows: after(void * s) : (call($ ma ...
- fsockopen get,post 封装 (转)
function http_request($url, $method = 'GET', $postfields = NULL, $headers = array()) { $parse = pa ...
- C# 如何实现WinForm程序自重启(重新启动自己)
重启的时间间隔方法 private void Restart() { Thread thtmp = new Thread(new ParameterizedThreadStart(run)); obj ...
- [2月1号] 努比亚全机型ROM贴 最全最新NubiaUI5.0 ROOT 极速体验
前言 感谢在开发过程中mandfx和dgtl198312予以的帮助!本帖将整理所有Nubia手机的最新刷机包,还有少数机型未制作刷机包,需要的机油可以联系我制作recovery以及刷机包加群23722 ...
- js 事件冒泡、事件捕获、stopPropagation、preventDefault
转自:http://www.jb51.net/article/42492.htm (1)冒泡型事件:事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发. IE 5.5: ...
- java编程题(一)
[程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题 p ...
- 在MFC中使用Cstring
此文介绍了关于MFC使用CString的资料,可一参考一下. 转自于VC知识库:http://www.vckbase.com/index.php/wv/829 通过阅读本文你可以学习如何有效地使用 C ...
- token session cookie
token 登录握手与身份验证: cookie.session 记录会话状态 兼有 token的功能: cookie session 功能更强大. 所有这些都是为了便捷和密码安全考虑.
- .Net Core 中X509Certificate2 私钥保存为 pem 的方法
在自己签发CA证书和颁发X509证书时,私钥通过下面的方法保存为PEM 相关代码可以已经提交在了 https://github.com/q2g/q2g-helper-pem-nuget/pull/13 ...