版本 |
作者 |
参与者 |
完成日期 |
备注 |
UnityAPI_WWW_V01_1.0 |
严立钻 |
|
2020.05.28 |
|
|
|
|
|
|
立钻哥哥:Unity是一个入门快、提高难的游戏引擎,想要提升能力,至少需要越过3道坎:API+Shader+综合能力;++1、API的积累:对API的合理利用不仅可以减轻自己的编码负担,而且往往可以提高程序的运行效率;这也是钻哥开始“Unity API”独立打造分类的初衷; ++2、Shader编程:想要做出一款精品游戏往往需要有高效的Shader的支持;Unity提供了一套改良的“Shader Lab”系统,优化了繁杂的“Open GL”编程; ++3、综合能力(技术+业务+管理):一款产品的制作除了功能编程外,往往会涉及很多其他领域,例如产品架构、UI交互设计、模型制作等,作为主要的编程人员,对其他相关领域的了解程序往往会影响到产品制作直至最后的产品体验; ++++立钻哥哥一直在推动【VR云游戏=Unity+SteamVR+云技术+5G+AI】,这个只是一个引子,抛砖引玉让大家对整个知识体系有一个明确的落地方向,宝宝们可以根据自己的兴趣方向进行拓展:比如Unity这里是指一种“3D游戏引擎”,也可拓展至“UE4、Cocos2dx”等游戏引擎;SteamVR是一种跨硬件解决方案,也可拓展至“VRTK”等第三方插件;“云技术+5G”是一种跨平台解决方案的核心技术,同样可拓展至其他平台解决方案;AI也是一种先进技术的举例,也可以拓展至任何一种前沿技术; |
++++【Unity API】分类:https://blog.csdn.net/vrunsoftyanlz/category_7637520.html
++++【Unity开发基础】分类:https://blog.csdn.net/vrunsoftyanlz/category_7309057.html
++++【Linux系统编程】分类:https://blog.csdn.net/vrunsoftyanlz/category_9694767.html
++++【C++C铸就生存利器】分类:https://blog.csdn.net/vrunsoftyanlz/category_9325802.html
++++【人工智能AI2026】分类:https://blog.csdn.net/vrunsoftyanlz/category_9212024.html
++++【立钻哥哥CSDN空间】:https://blog.csdn.net/VRunSoftYanlz/
#WWW万维网 |
#WWW万维网++A1、Description描述++B2、Variables变量++C3、Public Function共有函数++D4、Message消息 |
#A1、Description描述 |
++++这是一个检索URL内容的小工具模块;
++++通过连接WWW(url)在后台开始下载,并且返回一个新的WWW对象;
++++可以检查isDone属性来查看是否已经下载完成,或者yield自动等待下载物体,直到它被下载完成(不会影响游戏的其余部分);
++++如果从Web服务器上获取一些数据,例如高分列表或者调用主页,可以使用这个,也有一些功能可以使用从Web上下载的图片来创建一个纹理,或者下载或加载新的Web播放器数据文件;
++++WWW类可以用来发送GET和POST请求到服务器,WWW类默认使用GET方法,并且如果提供一个postData参数可用POST方法;
++++可参考“WWWForm”为postData参数构建可用的表单数据;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzWWW : MonoBehaviour{ public string myUrl = “http://i360game.com/images/yanlzforvr360.jpg”;
IEnumerator Start(){ WWW myW = new WWW(myUrl); yield return myW;
renderer.material.mainTexture = myW.texture;
} //立钻哥哥:IEnumerator Start(){}
} //立钻哥哥:public class YanlzComponent{} |
++++注意:URL传递到WWW类,必须是%编码;
++++注意:iPhone支持“http://”,“https://”和“file://”协议;“ftp://”协议的支持仅限于匿名下载;其他协议不被支持;
++++注意:当在Windows和Windows Store Apps使用文件协议来访问本地文件,需要使用“file:///”(带有三个斜线);
++++注意:当在当前的Web播放器构建安全沙箱防止访问内容没有托管服务器,在哪里Web播放器被托管;
立钻哥哥:The security sandbox present in web-player builds prevents you from accessing content not hosted the server where the webplayer is hosted. |
#B2、Variables变量 |
++B2、 Variables变量++++B2.1、assetBundle++++B2.2、audioClip++++B2.3、bytes++++B2.4、bytesDownloaded++++B2.5、error++++B2.6、isDone++++B2.7、movie++++B2.8、progress++++B2.9、text++++B2.10、texture++++B2.11、textureNonReadable++++B2.12、threadPriority++++B2.13、uploadProgress++++B2.14、url++++B2.15、YanlzXREngine.WWW.Variables |
++B2.1、assetBundle |
AssetBundle assetBundle; |
++++AssetBundle的数据流,可以包含项目文件夹中的任何类型资源;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzWWW : MonoBehaviour{ public string myUrl = “http://i360game.com/myserver/myBundle.unity3d”;
IEnumerator loadMyBundle(){ WWW myW = new WWW(myUrl); yield return myW;
Instantiate(myW.assetBundle.mainAsset);
} //立钻哥哥:IEnumerator loadMyBundle(){}
} //立钻哥哥:public class YanlzComponent{} |
++B2.2、audioClip |
AudioClip audioClip; |
++++从下载的数据,返回一个AudioClip(只读);
++++该数据必须是一个Ogg(Web/Standalones),MP3(phones, Flash),WAV,XM,IT,MOD,S3M格式的声音剪辑;在播放读取之前,该剪辑将被完全下载;使用GetAudioClip(bool threeD, bool stream)重载为音频流数据,而不是下载整个剪辑;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzWWW : MonoBehaviour{ public string myUrl = “http://i360game.com/myserver/...”;
void Start(){ WWW myW = new WWW(myUrl); audio.clip = myW.audioClip; } //立钻哥哥:void Start(){}
void Update(){ if(!audio.isPlaying && audio.clip.isReadyToPlay){ audio.Play(); } } //立钻哥哥:void Update(){}
} //立钻哥哥:public class YanlzComponent{} |
++B2.3、bytes |
byte[] bytes; |
++++以字节组的形式返回获取到的网络页面中的内容(只读);
++++如果物体资源没有被完全下载,将返回一个空的字节组;利用isDone或者yield查看下载的资源是否可用;
++B2.4、bytesDownloaded |
int bytesDownloaded; |
++++通过该WWW查询已下载的字节数(只读);
++++当从WWW源取内容时,返回已下载的字节数;
++B2.5、error |
string error; |
++++返回一个错误消息,在下载期间如果产生了一个错误的话(只读);
++++如果没有错误,error将返回null或空字符串(这是因为某些平台不允许空字符串为null值);推荐使用String.IsNullOrEmpty来检查错误,因为就取代了那两种错误;
++++如果该对象没有完成下载完数据,将会堵塞直到完成下载;使用isDone或者yield查看下载的数据是否可以使用;
++B2.6、isDone |
bool isDone; |
++++判断下载是否已经完成(只读)?
++++说明:不应该编写循环执行直到下载完成,使用协同程序代替;等待isDone的空循环将被阻止在网页中播放;
++B2.7、movie |
MovieTexture movie; |
++++从下载的数据,返回一个MovieTexture(只读);
++++数据必须为一个Ogg Theora格式影片;
++++即使影片仍没有下载完成,也立即返回,允许开始播放已经下载完成的部分;
using UnityEngine; using System.Collections; using YanlzXREngine;
[RequireComponent(typeof(GUITexture))] [RequireComponent(typeof(AudioSource))] public class YanlzWWW : MonoBehaviour{ string myUrl = “http://i360game.com/webplayers/Movie/yanlzSample.ogg”;
IEnumerator Start(){ //Start download WWW myW = new WWW(myUrl);
//Make sure the movie is ready to start before we start playing MovieTexture movieTexture = myW.movie; while(!movieTexture.isReadyToPlay){ yield return movieTexture; } //立钻哥哥:while(){}
//Initialize gui texture to be 1:1 resolution centered on screen guiTexture.texture = movieTexture; Rect temTex = guiTexture.pixelInset;
transform.localScale = new Vector3(0, 0, 0); transform.position = new Vector3(0.5f, 0.5f, 0);
temTex.xMin = -movieTexture.width / 2; temTex.xMax = movieTexture.width / 2; temTex.yMin = -movieTexture.height / 2; temTex.yMax = movieTexture.height / 2;
guiTexture.pixelInset = temTex;
//Assign clip to audio source //Sync playback with audio audio.clip = movieTexture.audioClip;
//Play both movie & sound movieTexture.Play(); audio.Play();
} //立钻哥哥:IEnumerator Start(){}
} //立钻哥哥:public class YanlzWWW{} |
++B2.8、progress |
float progress; |
++++下载进度有多少(只读)?
++++这是一个0到1的值,0表示任何数据都没有开始下载,1表示下载完毕;
++++在发送请求到服务器时,进度保持在0.0;当上传文件到Web服务器时,监控进度;
++B2.9、text |
string text; |
++++通过网页获取并以字符串的形式返回内容(只读);
++++如果资源下载的时候没有完全下载,将返回一个空的字符,使用isDone或者yield可以查看资源的完整性;
++++此函数要求网页内容是UTF-8或ASCII字符集;对于是其他字符或二进制数据,返回的字符串可能不正确;在这些情况下,使用bytes属性来获取原始字节数组;
++B2.10、texture |
Texture2D texture; |
++++从下载的数据返回一个Texture2D(只读);
++++数据必须是JPG或者PNG格式的图像;如果数据不是有效的图像,产生的纹理将是一个带问号的纹理;建议使用2的幂次大小的图像;任意大小的也可以工作但是加载的比较慢并会占用较多的内存;每个纹理属性的调用都会分配一个新的Texture2D;如果连续的下载纹理,必须使用LoadImageInfoTexture或销毁前面创建的纹理;
++++对于PNG文件,如果包含伽马信息,伽玛校正将应用到该纹理,显示的伽玛校正假定为2.0,如果文件没有包含伽马信息,将不会执行任何颜色校正;
++++JPG文件被加载为RGB24格式,PNG文件被加载为ARGB32格式,如果想DXT压缩下载的图像,使用LoadImageInfoTexture替代;
++++如果物体还没有完成数据的下载,它将返回一个虚拟图像,使用isDone或yield来查看数据是否可以用;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzWWW : MonoBehaviour{ public string myUrl = “http://i360game.com/ourcams/mypicture.jpg”;
IEnumerator Start(){ WWW myW = new WWW(myUrl); yield return myW;
renderer.material.mainTexture = myW.texture;
} //立钻哥哥:IEnumerator Start(){}
} //立钻哥哥:public class YanlzWWW{} |
++B2.11、textureNonReadable |
Texture2D textureNonReadable; |
++++从下载的数据返回一个非可读的Texture2D(只读);
++++同texture,但标记纹理不可读,有效地释放系统内存;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzWWW : MonoBehaviour{ public string myUrl = “http://i360game.com/ourcams/mypicture.jpg”;
IEnumerator Start(){ WWW myW = new WWW(myUrl); yield return myW;
//renderer.material.mainTexture = myW.texture; renderer.material.mainTexture = myW.textureNonReadable;
} //立钻哥哥:IEnumerator Start(){}
} //立钻哥哥:public class YanlzWWW{} |
++B2.12、threadPriority |
ThreadPriority threadPriority; |
++++AssetBundle解压缩线程的优先级;
++++当在背景下载资源包时,可以控制解压缩速度和影响帧速率两者进行权衡;当使用较低的优先级时,解压缩将需要更长的时间,但不会对帧速率上有很大的影响;默认值是ThreadPriority.Normal;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzWWW : MonoBehaviour{ public string myUrl = “http://i360game.com/myserver/myBundle.unity3d”;
IEnumerator Start(){ WWW myW = new WWW(myUrl); myW.threadPriority = ThreadPriority.Low;
yield return myW;
//Get the designated main asset and instantiate it. Instantiate(myW.assetBundle.mainAsset);
} //立钻哥哥:IEnumerator Start(){}
} //立钻哥哥:public class YanlzWWW{} |
++B2.13、uploadProgress |
float updateProgress; |
++++上传进度有多少(只读);
++++这是一个0到1的数值,0表示还没有任何数据被发送,1表示完全上传;
++++uploadProgress目前没有完全在Web播放器中实现,如果在Web播放器中使用它将在上传的时候返回0.5,上传完成后返回1.0;
++++由于所有的数据发送到服务器在接收数据之前完成,所以当progress大于0时,uploadProgress将总是1.0;
++B2.14、url |
string url; |
++++此WWW请求的URL(只读);
#C3、Constructors构造器 |
++C3、Constructors构造器++++C3.1、WWW++++C3.2、YanlzXREngine.WWW.Constructors |
++C3.1、WWW |
WWW(string url);WWW(string url, WWWForm form);WWW(string url, byte[] postData);WWW(string url, byte[] postData, Hashtable headers); |
++++[url]:要下载的地址;必须是%编码;
++++[form]:一个WWWForm实例,包含post表单数据;
++++[postData]:一个被发送到URL,数据的字节数组;
++++[headers]:自定义哈希表头来发送请求;
++++返回WWW类型,一个新的WWW对象;当它被下载,其结果可以从返回的对象中获取;
++++用给定的URL创建一个WWW请求;
++++(WWW(sring url);):这个函数创建和发送一个GET请求,流将自动开始下载响应;
++++(WWW(string url, WWWForm form);):这个函数创建和发送一个POST关于表单数据包含一个WWWForm参数的请求;这是与调用new WWW(url, form.data, form.headers)相同的;流将自动开始下载响应;
++++(WWW(string url, byte[] postData)):这个函数创建和发送一个POST关于元素post数据包含在postData的请求;流将自动开始下载响应;如果需要post在一个自定义格式的原始postData到服务器,使用这个版本;
++++(WWW(string url, byte[] postData, Hashtable headers);):这个函数创建和发送一个POST关于原始post数据包含在postData并且在哈希表头自定义请求headers的请求;流将自动开始下载响应;如果需要post在一个自定义格式的原始postData到服务器或如果需要提供自定义请求表头,使用这个版本;
++++流创建之后,必须等待它完成,然后可以访问已下载的数据;作为一个方面的流可以被中断,因此可以容易的告诉Unity等待下载完成;
++++注意:URL必须是%编码的;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzWWW : MonoBehaviour{ public string myUrl = “http://i360game.com/ourcams/yanlzpicture.jpd”;
IEnumerator Start(){ WWW myW = new WWW(myUrl); yield return myW;
renderer.material.mainTexture = myW.texture;
} //立钻哥哥:IEnumerator Start(){}
} //立钻哥哥:public class YanlzWWW{} |
#D4、Functions函数 |
++D4、Functions函数++++D4.1、GetAudioClip++++D4.2、LoadImageIntoTexture++++D4.3、LoadUnityWeb++++D4.4、YanlzXREngine.WWW.Functions |
++D4.1、GetAudioClip |
AudioClip GetAudioClip(bool threeD);AudioClip GetAudioClip(bool threeD, bool stream);AudioClip GetAudioClip(bool threeD, bool stream, AudioType audioType); |
++++[threeD]:使用这个参数指定剪辑可以是2D或3D音频剪辑;.audioClip属性默认为3D;
++++[stream]:设置剪辑是否在准备播放之前完成下载(false)或流可以即使只有部分剪辑下载也可以开始播放(true),后者将禁用在剪辑上寻址;(带有.time和/或.timeSample);
++++[audioType]:下载的音频类型,如果不设置,Unity将尝试从URL定义类型;
++++从下载数据,返回一个AudioClip(只读);
++++数据必须是Ogg(Web/Standalones),MP3(Phones)或WAV的音频剪辑;注意:XM,IT,MOD或S3M也可以是流读取,但这些不支持实时播放,因为所有的数据都必须在播放开始之前下载完成,所以这些音轨格式在赋给音频源或者播放之前必须AudioClip.isReadyToPlay变为true;
++D4.2、LoadImageIntoTexture |
void LoadImageIntoTexture(Texture2D tex); |
++++利用一个从下载数据中的图像来替换现有Texture2D;
++++这些数据必须是jpg或者png格式的图像,如果数据不是有效的图像,所生成的纹理将是一个问号小图像,这推荐使用的每个图像的大小应该是2的n次幂大小;任何大小尺寸的图像也能被进行加载,但是载入速度会稍微慢些并且占用的内存将会更多;
++++对于PNG文件,伽玛校正应用到纹理如果PNG文件包含伽玛信息;伽玛校正显示被假定为2.0;如果文件不包含伽玛信息,没有色彩校正将被执行;
++++这个函数用下载图像数据替换纹理内容,所以纹理的大小和格式可能会改变结构的内容;JPG文件加载为RGB24格式,PNG文件加载为ARGB32格式;如果在调用之前纹理格式的加载图像是DXT1或DXT5,那么加载的图像将被DXT压缩(DXT1为JPG图像和DXT5位PNG图像);
++++如果该图片数据还没有被下载完毕,所对应对象的纹理将保持不变,可以使用isDone或者yield去查看数据是否可用;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzWWW : MonoBehaviour{ public string myUrl = “http://i360game.com/ourcams/yanlzpicture.jpd”;
IEnumerator Start(){ //Continuously get the latest webcam shot from outside “Friday’s” in Times Square and DXT compress them at runtime
//Create a texture in DXT1 format renderer.material.mainTexture = new Texture2D(4, 4, TextureFormat.DXT1, false); while(true){ //Start a download of the given URL WWW myW = new WWW(myUrl);
//wait until the download is done yield return myW;
//assign the downloaded image to the main texture of the object myW.LoadImageIntoTexture(renderer.material.mainTexture as Texture2D);
} //立钻哥哥:while(){}
} //立钻哥哥:IEnumerator Start(){}
} //立钻哥哥:public class YanlzWWW{} |
++D4.3、LoadUnityWeb |
void LoadUnityWeb(); |
++++加载新的Web播放器数据文件;
++++加载的unity3d文件的第一个关卡将自动被加载,所有来自前一个.unity3d文件的物体、脚本和静态变量将被卸载;可以使用PlayerPrefab类在两个会话间移动信息;
++++这个函数只能在Web播放器中使用;
++++如果对象尚未完成下载,unity3d文件将不会被加载;使用isDone或yield查看数据是否可用;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzWWW : MonoBehaviour{ public string myUrl = “http://i360game.com/webplayers/yanlztestscene.unity3d”;
IEnumerator Start(){ //Start streaming the data file WWW myStream = new WWW(myUrl);
//Yield until stream is done. yield return myStream;
//Load it! myStream.LoadUnityWeb();
} //立钻哥哥:IEnumerator Start(){}
} //立钻哥哥:public class YanlzWWW{} |
#E5、Static Functions静态函数 |
++E5、Static Functions静态函数++++D5.1、EscapeURL++++D5.2、LoadFromCacheOrDownload++++D5.3、UnEscapeURL++++D5.4、YanlzXREngine.WWW.StaticFunctions |
++D5.1、EscapeURL |
static string EscapeURL = “../string_strong_s_/strong_Encoding_strong_e_/strong_System.Text.Encoding.UTF8”; |
++++[s]:要编码的字符串;
++++[e]:使用的编码字符集;
++++转义字符串中的字符;
++++在URL中有些字符串有特殊的意思;如果需要在URL包含这些参数字符,必须用转义符表示它们;在由用户提供的任何文本作为URL参数传递文本之前,建议使用这个函数;这将确保恶意用户不能操作URL的内容来攻击网络服务器;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzWWW : MonoBehaviour{
void Start(){ string escName = WWW.EscapeURL(“Fish & Chips”); } //立钻哥哥:void Start(){}
} //立钻哥哥:public class YanlzWWW{} |
++D5.2、LoadFromCacheOrDownload |
static WWW LoadFromCacheOrDownload(string url, int version, uint crc = 0); |
++++[url]:如果资源包在缓存不存在,那么从URL来下载AssetBundle;必须是’%’转义的;
++++[version]:AssetBundle的版本;如果已下载的带有相同参数的版本,该文件仅从硬盘加载;通过应用程序递增版本号,能强制缓存从URL下载一个新的AssetBundle拷贝;
++++[crc]:可选,未压缩内容的CRC-32校验;如果为非零,则内容会在加载之前比较校验值,如果不匹配给出错误;可以用这个来避免从下载或用户在硬盘的缓存文件篡改导致数据损坏;如果CRC不匹配,Unity将尝试重新下载数据,如果CRC在服务器不匹配将会报错;查看返回的错误字符串,查看正确的CRC值用于AssetBundle;
++++[返回值]:WWW是WWW的实例,一旦加载或下载操作完成,可以用来访问数据;
++++从缓存加载带有指定版本号的AssetBundle;如果AssetBundle不在当前缓存,它将自动下载并储存在缓存,以便以后从本地存储检索;
++++LoadFromCacheOrDownload()必须用来替代“new WWW(url)”,为了利用缓存功能;
++++缓存的AssetBundle通过文件名和版本号唯一标识;URL上的全部域名和路径信息被缓存忽略;由于缓存的资源包由文件名识别而不是完整的URL,在资源包下载之后,可以在任何时候更改目录;这些通常用于游戏推出新版本,确保文件是没有被浏览器或CDN错误的缓存;对于WebPlayer应用程序是使用共享缓存,缓存增加了独特的识别相同的命名资源的信息以防止应用程序之间的命名冲突;
++++如果缓存文件夹没有剩余空间来缓存增加的文件,LoadFromCacheOrDownload将从缓存中迭代删除最近最少使用资源包,直到有足够的空间可用来存储新的资源包;如果剩余空间是不可能的(因为硬盘满了,或当前缓存文件都在使用),LoadFromCacheOrDownload()将绕过缓存并下载文件流到内存就像“new WWW()”调用;
++++这个函数仅用于访问AssetBundles;不会有其他类型或内容被缓存;
++++注意:URL必须是’%’转义的;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzWWW : MonoBehaviour{ public string myUrl = “http://i360game.com/myserver/myassetBundle.unity3d”;
IEnumerator Start(){ var myW = WWW.LoadFromCacheOrDownload(myUrl, 5);
yield return myW;
if(!string.IsNullOrEmpty(myW.error)){ Debug.Log(myW.error); yield break } //立钻哥哥:if(){}
var myLoadedAssetBundle = myW.assetBundle; var asset = myLoadedAssetBundle.mainAsset; } //立钻哥哥:IEnumerator Start(){}
} //立钻哥哥:public class YanlzWWW{} |
++D5.3、UnEscapeURL |
static string UnEscapeURL = “../string_s_Encoding_e_System.Text.Encoding.UTF8”; |
++++[s]:转义后的字符串;
++++[e]:文本使用的编码字符集;
++++将URL的转义字符恢复正常的文本;
++++在URL中有些字符串有特殊的意思;如果需要在URL包含这些参数字符,必须用转义符表示它们;这个函数需要字符串包含转义符并转换它们恢复到正常的文本;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzWWW : MonoBehaviour{
void Start(){
//string escName = WWW.EscapeURL(“Fish & Chips”); string plainName = WWW.UnEscapeURL(“Fish+%26+Chips”);
} //立钻哥哥:void Start(){}
} //立钻哥哥:public class YanlzWWW{} |
#F6、立钻哥哥对WWW类的拓展 |
++++【Unity API】分类:https://blog.csdn.net/vrunsoftyanlz/category_7637520.html
++++【Unity开发基础】分类:https://blog.csdn.net/vrunsoftyanlz/category_7309057.html
++++【Linux系统编程】分类:https://blog.csdn.net/vrunsoftyanlz/category_9694767.html
++++【C++C铸就生存利器】分类:https://blog.csdn.net/vrunsoftyanlz/category_9325802.html
++++【人工智能AI2026】分类:https://blog.csdn.net/vrunsoftyanlz/category_9212024.html
++++【立钻哥哥CSDN空间】:https://blog.csdn.net/VRunSoftYanlz/
立钻哥哥推荐的拓展学习链接(Link_Url) |
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
++++虚拟现实VR资讯: https://blog.csdn.net/VRunSoftYanlz/article/details/89165846
++++HTC_VIVE开发基础:https://blog.csdn.net/VRunSoftYanlz/article/details/81989970
++++Oculus杂谈:https://blog.csdn.net/VRunSoftYanlz/article/details/82469850
++++Oculus安装使用:https://blog.csdn.net/VRunSoftYanlz/article/details/82718982
++++Unity+SteamVR=>VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88809370
++++Unity减少VR晕眩症:https://blog.csdn.net/VRunSoftYanlz/article/details/89115518
++++SteamVR简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86484254
++++SteamVR脚本功能分析:https://blog.csdn.net/VRunSoftYanlz/article/details/86531480
++++SteamVR2.0开发指南:https://blog.csdn.net/VRunSoftYanlz/article/details/86618187
++++SteamVR2.2.0开发指南:https://blog.csdn.net/VRunSoftYanlz/article/details/88784527
++++SteamVR2.2.0快速入门:https://blog.csdn.net/VRunSoftYanlz/article/details/88833579
++++SteamVR2.2.0交互系统:https://blog.csdn.net/VRunSoftYanlz/article/details/89199778
++++SteamVR2.2.0传送机制:https://blog.csdn.net/VRunSoftYanlz/article/details/89390866
++++SteamVR2.2.0教程(一):https://blog.csdn.net/VRunSoftYanlz/article/details/89324067
++++SteamVR2.2.0教程(二):https://blog.csdn.net/VRunSoftYanlz/article/details/89894097
++++SteamVR_Skeleton_Poser:https://blog.csdn.net/VRunSoftYanlz/article/details/89931725
++++SteamVR实战之PMCore:https://blog.csdn.net/VRunSoftYanlz/article/details/89463658
++++SteamVR/Extras:https://blog.csdn.net/VRunSoftYanlz/article/details/86584108
++++SteamVR/Input:https://blog.csdn.net/VRunSoftYanlz/article/details/86601950
++++OpenXR简介:https://blog.csdn.net/VRunSoftYanlz/article/details/85726365
++++VRTK杂谈:https://blog.csdn.net/VRunSoftYanlz/article/details/82562993
++++VRTK快速入门(杂谈):https://blog.csdn.net/VRunSoftYanlz/article/details/82955267
++++VRTK官方示例(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82955410
++++VRTK代码结构(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82780085
++++VRTK(SceneResources):https://blog.csdn.net/VRunSoftYanlz/article/details/82795400
++++VRTK_ControllerEvents:https://blog.csdn.net/VRunSoftYanlz/article/details/83099512
++++VRTK_InteractTouch:https://blog.csdn.net/VRunSoftYanlz/article/details/83120220
++++虚拟现实行业应用:https://blog.csdn.net/VRunSoftYanlz/article/details/88360157
++++Steam平台上的VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88960085
++++Steam平台热销VR:https://blog.csdn.net/VRunSoftYanlz/article/details/89007741
++++VR实验:以太网帧的构成:https://blog.csdn.net/VRunSoftYanlz/article/details/82598140
++++实验四:存储器扩展实验:https://blog.csdn.net/VRunSoftYanlz/article/details/87834434
++++FrameVR示例V0913:https://blog.csdn.net/VRunSoftYanlz/article/details/82808498
++++FrameVR示例V1003:https://blog.csdn.net/VRunSoftYanlz/article/details/83066516
++++SwitchMachineV1022:https://blog.csdn.net/VRunSoftYanlz/article/details/83280886
++++PlaySceneManagerV1022:https://blog.csdn.net/VRunSoftYanlz/article/details/83280886
++++Unity5.x用户手册:https://blog.csdn.net/VRunSoftYanlz/article/details/81712741
++++Unity面试题ABC:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++Unity面试题D:https://blog.csdn.net/VRunSoftYanlz/article/details/78630838
++++Unity面试题E:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity面试题F:https://blog.csdn.net/VRunSoftYanlz/article/details/78630945
++++Cocos2dx面试题:https://blog.csdn.net/VRunSoftYanlz/article/details/78630967
++++禅道[zentao]:https://blog.csdn.net/VRunSoftYanlz/article/details/83964057
++++Lua快速入门篇(Xlua拓展):https://blog.csdn.net/VRunSoftYanlz/article/details/81173818
++++Lua快速入门篇(XLua教程):https://blog.csdn.net/VRunSoftYanlz/article/details/81141502
++++Lua快速入门篇(基础概述):https://blog.csdn.net/VRunSoftYanlz/article/details/81041359
++++框架知识点:https://blog.csdn.net/VRunSoftYanlz/article/details/80862879
++++游戏框架(UI框架夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80781140
++++游戏框架(初探篇):https://blog.csdn.net/VRunSoftYanlz/article/details/80630325
++++.Net框架设计:https://blog.csdn.net/VRunSoftYanlz/article/details/87401225
++++从零开始学架构:https://blog.csdn.net/VRunSoftYanlz/article/details/88095895
++++设计模式简单整理:https://blog.csdn.net/vrunsoftyanlz/article/details/79839641
++++专题:设计模式(精华篇):https://blog.csdn.net/VRunSoftYanlz/article/details/81322678
++++U3D小项目参考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811
++++Unity小游戏算法分析:https://blog.csdn.net/VRunSoftYanlz/article/details/87908365
++++Unity案例(Vehicle):https://blog.csdn.net/VRunSoftYanlz/article/details/82355876
++++UML类图:https://blog.csdn.net/vrunsoftyanlz/article/details/80289461
++++PowerDesigner简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86500084
++++Unity知识点0001:https://blog.csdn.net/vrunsoftyanlz/article/details/80302012
++++Unity知识点0008:https://blog.csdn.net/VRunSoftYanlz/article/details/81153606
++++U3D_Shader编程(第一篇:快速入门篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372071
++++U3D_Shader编程(第二篇:基础夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372628
++++Unity引擎基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78881685
++++Unity面向组件开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78881752
++++Unity物理系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78881879
++++Unity2D平台开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78882034
++++UGUI基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78884693
++++UGUI进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78884882
++++UGUI综合:https://blog.csdn.net/vrunsoftyanlz/article/details/78885013
++++Unity动画系统基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78886068
++++Unity动画系统进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78886198
++++Navigation导航系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78886281
++++Unity特效渲染:https://blog.csdn.net/vrunsoftyanlz/article/details/78886403
++++Unity数据存储:https://blog.csdn.net/vrunsoftyanlz/article/details/79251273
++++Unity中Sqlite数据库:https://blog.csdn.net/vrunsoftyanlz/article/details/79254162
++++WWW类和协程:https://blog.csdn.net/vrunsoftyanlz/article/details/79254559
++++Unity网络:https://blog.csdn.net/vrunsoftyanlz/article/details/79254902
++++Unity资源加密:https://blog.csdn.net/VRunSoftYanlz/article/details/87644514
++++PhotonServer简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86652770
++++编写Photon游戏服务器:https://blog.csdn.net/VRunSoftYanlz/article/details/86682935
++++C#事件:https://blog.csdn.net/vrunsoftyanlz/article/details/78631267
++++C#委托:https://blog.csdn.net/vrunsoftyanlz/article/details/78631183
++++C#集合:https://blog.csdn.net/vrunsoftyanlz/article/details/78631175
++++C#泛型:https://blog.csdn.net/vrunsoftyanlz/article/details/78631141
++++C#接口:https://blog.csdn.net/vrunsoftyanlz/article/details/78631122
++++C#静态类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630945
++++C#数据类型:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity3D默认的快捷键:https://blog.csdn.net/vrunsoftyanlz/article/details/78630838
++++游戏相关缩写:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++UnityAPI.Rigidbody刚体:https://blog.csdn.net/VRunSoftYanlz/article/details/81784053
++++UnityAPI.Material材质:https://blog.csdn.net/VRunSoftYanlz/article/details/81814303
++++UnityAPI.Android安卓:https://blog.csdn.net/VRunSoftYanlz/article/details/81843193
++++UnityAPI.AndroidJNI安卓JNI:https://blog.csdn.net/VRunSoftYanlz/article/details/81879345
++++UnityAPI.Transform变换:https://blog.csdn.net/VRunSoftYanlz/article/details/81916293
++++UnityAPI.WheelCollider轮碰撞器:https://blog.csdn.net/VRunSoftYanlz/article/details/82356217
++++UnityAPI.Resources资源:https://blog.csdn.net/VRunSoftYanlz/article/details/83155518
++++JSON数据结构:https://blog.csdn.net/VRunSoftYanlz/article/details/82026644
++++CocosStudio快速入门:https://blog.csdn.net/VRunSoftYanlz/article/details/82356839
++++Unity企业内训(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82634668
++++Unity企业内训(第1讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82634733
++++Unity企业内训(第2讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82861180
++++Unity企业内训(第3讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82927699
++++Unity企业内训(第4讲):https://blog.csdn.net/VRunSoftYanlz/article/details/83479776
++++Unity企业内训(第5讲):https://blog.csdn.net/VRunSoftYanlz/article/details/83963811
++++Unity企业内训(第6讲):https://blog.csdn.net/VRunSoftYanlz/article/details/84207696
++++钻哥带您了解产品原型:https://blog.csdn.net/VRunSoftYanlz/article/details/87303828
++++插件
++++计算机组成原理(教材篇):https://blog.csdn.net/VRunSoftYanlz/article/details/82719129
++++5G接入:云计算和雾计算:https://blog.csdn.net/VRunSoftYanlz/article/details/88372718
++++云计算通俗讲义:https://blog.csdn.net/VRunSoftYanlz/article/details/88652803
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz
--_--VRunSoft:lovezuanzuan--_--