版本 |
作者 |
参与者 |
完成日期 |
备注 |
UnityAPI_GameObject_V01_1.0 |
严立钻 |
|
2020.05.19 |
|
|
|
|
|
|
立钻哥哥: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/
#GameObject游戏对象 |
#GameObject游戏对象++A1、Description描述++B2、Variables变量++C3、Public Function共有函数++D4、Message消息 |
#A1、Description描述 |
立钻哥哥:Base class for all entities in Unity scenes; |
#B2、Variables变量 |
++B2、Variables变量++++B2.1、activeInHierarchy++++B2.2、activeSelf++++B2.3、isStatic++++B2.4、layer++++B2.5、scene++++B2.6、tag++++B2.7、transform++++B2.8、YanlzXREngine.GameObject.Variables |
++B2.1、activeInHierarchy |
bool activeInHierarchy; |
++++场景中的激活对象是否激活?
++++如果GameObject.activeSelf属性以及所有它的父级已启动:可以知道一个游戏物体在游戏中是否是激活的;
++B2.2、activeSelf |
bool activeSelf; |
++++该游戏对象的局部激活状态(只读);
++++返回该游戏对象的局部激活状态,设置是使用GameObject.SetActive;注意游戏对象可以是不激活的,因为父对象没有激活,即使它返回True;这个状态将被用在当所有父对象都是激活的;使用GameObject.activeInHierarchy来检测游戏对象在场景中实际是否是激活的;
++B2.3、isStatic |
bool isStatic; |
++++如果一个游戏对象是静态仅在编辑器API指定;
++++如果任意对象设置为静态标识返回true;
++++可参考:GameObjectUtility.SetStaticEditorFlags;
++B2.4、layer |
int layer; |
++++游戏对象所在的层,层的范围是在[0...31]之间;
++++层可以用于摄像机的选择性渲染或者忽略光线投射;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{ void MyTestFunc(){ gameObject.layer = 2; } } //立钻哥哥:public class YanlzGameObject{} |
++B2.5、scene |
public SceneManagement.Scene scene; |
++++场景物体(Scene that the GameObject is part of.);
++B2.6、tag |
string tag; |
++++这个游戏对象的标签;
++++标签可以用于标识游戏对象;标签必须在使用之前在标签管理器里面先声明;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{ void MyTestFunc(){ gameObject.tag = “YanlzPlayer”; } } //立钻哥哥:public class YanlzGameObject{} |
++B2.7、transform |
Transform transform; |
++++附加于这个游戏对象上的变换(如果没有则为空);
using UnityEngine using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{ public GameObject other;
void MyTestFunc(){ other.transform.Translate(1, 1, 1); } //立钻哥哥:void MyTestFunc(){}
} //立钻哥哥:public class YanlzGameObject{} |
#C3、Constructors构造器 |
++C3、Constructors构造器++++C3.1、GameObject++++C3.2、YanlzXREngine.GameObject.Constructors |
++C3.1、GameObject |
GameObject(string name);GameObject();GameObject(string name, params Type[] components); |
++++创建一个新的游戏物体,命名为name;
++++一个变换组件(Transform)总是被添加到游戏对象;
++++创建一个游戏对象并且附加指定的组件;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{ public GameObject player;
void MyTestFunc(){ //player = new GameObject(); player = new GameObject(“YanlzPlayer”);
player.AddComponent(“Rigidbody”); player.AddComponent(“BoxCollider”); } //立钻哥哥:void MyTestFunc(){}
} //立钻哥哥:public class YanlzGameObject : MonoBehaviour{} |
#D4、Functions函数 |
++D4、Functions函数++++D4.1、AddComponent++++D4.2、BroadcastMessage++++D4.3、CompareTag++++D4.4、GetComponent++++D4.5、GetComponentInChildren++++D4.6、GetComponentInParent++++D4.7、GetComponents++++D4.8、GetComponentsInChildren++++D4.9、GetComponentsinParent++++D4.10、SampleAnimation++++D4.11、SendMessage++++D4.12、SendMessageUpwards++++D4.13、SetActive++++D4.14、YanlzXREngine.GameObject.Functions |
++D4.1、AddComponent |
Component AddComponent(string className);Component AddComponent(Type componentType);T AddComponent(); |
++++添加一个名称为className的组件到游戏对象;
++++用这个函数改变运行中的物体的行为;可以用传递脚本名称的方法,把程序脚本加载给游戏内物体;
++++有些组件也需要同一个游戏物体有其他组件;当然这个函数会自动添加那些需要的组件,比如当添加一个HingeJoint组件,这个函数会自动添加一个Rigidbody组件;
++++给游戏物体添加一个名称为componentType的组件类;C#用户可以使用泛型版本;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{ public SphereCollider sc;
void MyTestFunc(){ //sc = gameObject.AddComponent<SphereCollider>(); sc = gameObject.AddComponent(“SphereCollider”) as SphereCollider; } //立钻哥哥:void MyTestFunc(){}
} //立钻哥哥:public class YanlzGameObject{} |
++D4.2、BroadcastMessage |
void BroadcastMessage(string methodName, object parameter=null, SendMessageOptions options=SendMessageOptions.RequireReceiver); |
++++对此游戏对象及其子对象的所有MonoBehaviour中调用名称为methodName的方法;
++++接受消息的方法可以通过不要参数的方法来选择忽略参数;当选项被设置为SendMessageOptions.RequireReceiver时,如果消息没有被任何一个组件处理,则会打印一个错误;
using UnityEngine; using System.Collections;
public class YanlzGameObject : MonoBehaviour{
void MyApplyDamage(float damage){ Debug.Log(damage); } //立钻哥哥:void MyApplyDamage(){}
void MyTestFunc(){ gameObject.BroadcastMessage(“MyApplyDamage”, 5.0F); } //立钻哥哥:void MyTestFunc(){}
} //立钻哥哥:public class YanlzGameObject{} |
++D4.3、CompareTag |
bool CompareTag(string tag); |
++++[tag]:比较的标签;
++++此游戏对象是否被标记为tag标签?
using UnityEngine; using System.Collections;
public class YanlzGameObject : MonoBehaviour{
void OnTriggerEnter(Collider other){ if(other.gameObject.CompareTag(“YanlzPlayer”)){ Destroy(other.gameObject); } } //立钻哥哥:void OnTriggerEnter(){}
} //立钻哥哥:public class YanlzGameObject{} |
++D4.4、GetComponent |
Component GetComponent(Type type);T GetComponent();Component GetComponent(string type); |
++++[type]:检索组件的类型;
++++如果这个游戏对象附件了一个类型为type的组件,则返回该组件,否则为空;
++++GetComponent是访问别的组件的原始方法;通过这个函数可以访问内置组件或脚本;
++++由于性能原因,最好使用Type的GetComponent,而不是用字符串;不过有时可能无法得到Type,可以通过名字而不是Type来访问组件;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{ public HingeJoint hinge;
void MyTestFunc(){ //hinge = gameObject.GetComponent(“HingeJoint”) as HingeJoint; hinge = gameObject.GetComponent<HingeJoint>();
hinge.useSpring = false; } //立钻哥哥:void MyTestFunc(){}
} //立钻哥哥:public class YanlzGameObject{} |
++D4.5、GetComponentInChildren |
Component GetComponentInChildren(Type type);T GetComponentInChildren(); |
++++[type]:检索组件的类型;
++++返回此游戏对象或者它的所有子对象上(深度优先)的类型为type的组件;
++++只返回激活的组件;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{ public HingeJoint hinge;
void MyTestFunc(){ hinge = gameObject.GetComponentInChildren<HingeJoint>(); hinge.useSpring = false; } //立钻哥哥:void MyTestFunc(){}
} //立钻哥哥:public class YanlzGameObject{} |
++D4.6、GetComponentInParent |
Component GetComponentInParent(Type type);T GetComponentInParent(); |
++++[type]:查找组件的类型;
++++从父对象查找组件;
++++向上递归直到找到一个有效的组件,否则返回空;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{ public HingeJoint hinge;
void MyTestFunc(){ hinge = gameObject.GetComponentInParent<HingeJoint>(); hinge.useSpring = false; } //立钻哥哥:void MyTestFunc(){}
} //立钻哥哥:public class YanlzGameObject{} |
++D4.7、GetComponents |
Component[] GetComponents(Type type);T[] GetComponents(); |
++++[type]:检索组件的类型;
++++返回该游戏对象所有type类型的组件类表;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{ public HingeJoint[] hingeJoints;
void MyTestFunc(){ hingeJoints = gameObject.GetComponents<HingeJoint>(); foreach(HingeJoint joint in hingeJoints){ joint.useSpring = false; } } //立钻哥哥:void MyTestFunc(){}
} //立钻哥哥:public class YanlzGameObject{} |
++D4.8、GetComponentsInChildren |
Component[] GetComponentsInChildren(Type type, bool includeInactive=false);T[] GetComponentsInChildren(bool includeInactive);T[] GetComponentsInChildren(); |
++++[type]:检索组件的类型;
++++[includeInactive]:在查找集里面应该包括非激活的组件吗?
++++返回此游戏对象与其子对象所有type类型的组件;
++++搜索组件进行递归子对象,所以它包括子对象的子对象等;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{ public HingeJoint[] hingeJoints;
void MyTestFunc(){ hingeJoints = gameObject.GetComponentsInChildren<HingeJoint>(); foreach(HingeJoint joint in hingeJoints){ joint.useSpring = false; } } //立钻哥哥:void MyTestFunc(){}
} //立钻哥哥:public class YanlzGameObject{} |
++D4.9、GetComponentsInParent |
Component[] GetComponentsInParent(Type type, bool includeInactive=false);T[] GetComponentsInParent(bool includeInactive);T[] GetComponentsInParent(); |
++++[type]:检索组件的类型;
++++[includeInactive]:在查找集里面应该包括非激活的组件吗?
++++返回此游戏对象与其父对象所有type类型的组件;
++++搜索组件进行递归父对象,所以它包含父对象的父对象等;
using UnityEngine; using System.Collections;
public class YanlzGameObject : MonoBehaviour{ public HingeJoint[] hingeJoints;
void MyTestFunc(){ hingeJoints = gameObject.GetComponentsInParent(typeof(HingeJoint)); foreach(HingeJoint joint in hingeJoints){ joint.useSpring = false; } } //立钻哥哥:void MyTestFunc(){}
} //立钻哥哥:public class YanlzGameObject{} |
++D4.10、SampleAnimation |
void SampleAnimation(AnimationClip animation, float time); |
++++用于任何动画剪辑在给定的时间采样动画;
++++处于性能考量,推荐使用动画界面;这个用于在给定的time来采样animation;任何动画的组件属性的剪辑将被替换为采样的值;大多数可以使用Animation.Play替代;当需要在一个无序的帧或基于特定的输入时,SampleAnimation最有用;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{ public AnimationClip clip;
void Update(){ gameObject.SampleAnimation(clip, clip.length - Time.time); } //立钻哥哥:void Update(){}
} //立钻哥哥:public class YanlzGameObject{} |
++D4.11、SendMessage |
void SendMessage(string methodName, object value=null, SendMessageOptions options=SendMessageOptions.RequireReceiver); |
++++[methodName]:调用的方法名;
++++[value]:可选参数,被调用的方法传递的值;
++++[options]:如果目标对象方法不存在,应该引发错误吗?
++++在此游戏对象所有MonoBehaviour上调用名称为methodName的方法;
++++接收消息的方法可以通过不要参数的方法来选择忽略参数;当选项被设置为SendMessageOptions.RequireReceiver时,如果消息没有被任何一个组件处理,则会打印一个错误;
++++注意:消息不会发送到非激活的对象上(如:哪些在编辑器或者通过SetActive已经关闭的对象);
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{
void MyApplyDamage(float damage){ Debug.Log(damage); } //立钻哥哥:void MyApplyDamage(){}
void MyTestFunc(){ gameObject.SendMessage(“MyApplyDamage”, 5.0F); } //立钻哥哥:void MyTestFunc(){}
} //立钻哥哥:public class YanlzGameObject{} |
++D4.12、SendMessageUpwards |
void SendMessageUpwards(string methodName, object value=null, SendMessageOptions options=SendMessageOptions.RequireReceiver); |
++++[methodName]:调用的方法名;
++++[value]:可选参数,被调用的方法传递的值;
++++[options]:如果目标对象方法不存在,应该引发错误吗?
++++调用此游戏对象及其behaviour的父对象上所有MonoBehaviour名为methodName的方法;
++++接收消息的方法可以通过不要参数的方法来选择忽略参数,当选项被设置为SendMessageOptions.RequireReceiver时,如果消息没有被任何一个组件处理,则会打印一个错误;
++++注意:消息不会发送到非激活的对象上(如:那些在编辑器或者通过SetActive已经关闭的对象);
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{
void MyApplyDamage(float damage){ Debug.Log(damage); } //立钻哥哥:void MyApplyDamage(){}
void MyTestFunc(){ gameObject.SendMessageUpwards(“MyApplyDamage”, 5.0F); } //立钻哥哥:void MyTestFunc(){}
} //立钻哥哥:public class YanlzGameObject{} |
++D4.13、SetActive |
void SetActive(bool value); |
++++激活/停用此游戏对象;
++++注意:一个游戏对象可以是非活动状态,因为它的父对象不是激活的,这种情况下,调用SetActive()仍不能激活它,但仅能设置此游戏对象的局部状态,可以使用GameObject.activeSelf来检查;此状态用于当所有父对象都是激活状态;
#E5、Static Functions静态函数 |
++E5、Static Functions静态函数++++D5.1、CreatePrimitive++++D5.2、Find++++D5.3、FindGameObjectsWithTag++++D5.4、FindWithTag++++D5.5、YanlzXREngine.GameObject.StaticFunctions |
++D5.1、CreatePrimitive |
static GameObject CreatePrimitive(PrimitiveType type); |
++++[type]:要创建的原型对象的类型;
++++创建一个带有原型网络渲染器和适当的碰撞器的游戏对象;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{
void Start(){ GameObject plane = GameObject.CreatePrimitive(PrimitiveType.Plane);
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube); cube.transform.position = new Vector3(0, 0.5F, 0);
GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere); sphere.transform.position = new Vector3(0, 1.5F, 0);
GameObject capsule = GameObject.CreatePrimitive(PrimitiveType.Capsule); capsule.transform.position = new Vector3(2, 1, 0);
GameObject cylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder); cylinder.transform.position = new Vecto3r(-2, 1, 0);
} //立钻哥哥:void Start(){}
} //立钻哥哥:public class YanlzGameObject{} |
++D5.2、Find |
static GameObject Find(string name); |
++++找到并返回一个名字为name的游戏物体;
++++如果以name为名字的游戏物体没有被找到,则返回空;如果name中包含’/’字符,这个名称将被视作一个hierarchy中的路径名;这个函数只返回活动的游戏物体;
++++除非迫不得已,建议不要在每一帧中使用这个函数;可以在开始的时候用一个成员变量来缓存结果或者使用GameObject.FindWithTag函数;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{ public GameObject hand;
void MyTestFunc(){ hand = GameObject.Find(“MyHand”); hand = GameObject.Find(“/MyHand”); hand = GameObject.Find(“/Monster/Arm/MyHand”); hand = GameObject.Find(“Monster/Arm/MyHand”); } //立钻哥哥:void MyTestFunc(){}
} //立钻哥哥:public class YanlzGameObject{}
|
//立钻哥哥:在Start()里查找MyHand物体,并在每帧旋转它 using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{ private GameObject hand;
void Start(){ hand = GameObject.Find(“/Monster/Arm/MyHand”); } //立钻哥哥:void Start(){}
void Update(){ hand.transform.Rotate(0, 100 * Time.deltaTime, 0); } //立钻哥哥:void Update(){}
} //立钻哥哥:public class YanlzGameObject{} |
++D5.3、FindGameObjectsWithTag |
static GameObject[] FindGameObjectsWithTag(string tag); |
++++[tag]:用于搜索对象标签的名称;
++++返回具体tag标签的激活的游戏对象列表,如果没有找到则为空;
++++标签必须在使用之前到标签管理器里面声明;如果标签不存在或为空字符串或传递null作为标签,将抛出Unity异常;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{ public GameObject respawnPrefab; public Object respawns;
void Start(){ if(respawns == null){ respawns = GameObject.FindGameObjectsWithTag(“MyRespawn”); }
foreach(Object respawn in respawns){ Instantiate(respawnPrefab, respawn.transform.position, respawn.transform.rotation) as GameObject; } } //立钻哥哥:void Start(){}
} //立钻哥哥:public class YanlzGameObject{}
|
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{
GameObject MyFindClosestEnemy(){ GameObject[] gos; gos = GameObject.FindGameObjectsWithTag(“MyEnemy”);
GameObject closest; float distance = Mathf.Infinity; Vector3 position = transform.position;
foreach(GameObject go in gos){ Vector3 diff = go.transform.position - position; float curDistance = diff.sqrMagnitude;
if(curDistance < distance){ closest = go; distance = curDistance; } } //立钻哥哥:foreach(){}
return closest; } //立钻哥哥:GameObject MyFindClosestEnemy(){}
void MyTestFunc(){ Debug.Log(MyFindClosestEnemy().name); } //立钻哥哥:void MyTestFunc(){}
} //立钻哥哥:public class YanlzGameObject{}
|
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{
void Start(){ GameObject[] gos; gos = GameObject.FindGameObjectsWithTag(“MyFred”);
if(gos.Length == 0){ Debug.Log(“立钻哥哥:No game objects are tagged with MyFred.”); } } //立钻哥哥:void Start(){}
} //立钻哥哥:public class YanlzGameObject{} |
++D5.4、FindWithTag |
static GameObject FindWithTag(string tag); |
++++[tag]:要搜索的标签;
++++返回标记为tag的一个游戏对象,如果没有找到对象则为空;
++++标签必须在使用之前到标签管理器里面声明;如果标签不存在或为空字符串或传递null作为标签,将抛出Unity异常;
using UnityEngine; using System.Collections; using YanlzXREngine;
public class YanlzGameObject : MonoBehaviour{ public GameObject respawnPrefab; public GameObject respawn;
void Start(){ if(respawn == null){ respawn = GameObject.FindWithTag(“MyRespawn”); }
Instantiate(respawnPrefab, respawn.transform.position, respawn.transform.rotation) as GameObject; } //立钻哥哥:void Start(){}
} //立钻哥哥:public class YanlzGameObject{} |
#F6、立钻哥哥对GameObject游戏物体的拓展 |
++++【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--_--