Unity小游戏算法分析与实现(Unity+XR+游戏开发+算法+MVC+斗地主+耳轮跳+见缝插针+王者荣耀+绝地求生+立钻哥哥+==)
《Unity小游戏算法分析与实现》
《Unity小游戏算法分析与实现》 |
版本 |
作者 |
参与者 |
完成日期 |
备注 |
Unity2017_GameDemo_V01_1.0 |
严立钻 |
|
2019.02.24 |
|
|
|
|
|
|
##《Unity小游戏算法分析与实现》发布说明:
++++“Unity小游戏算法分析与实现”:是对“Unity小游戏算法分析与实现”的一个了解,Unity的应用很广,选择小游戏为切入点是因为麻雀虽小五脏俱全;当然到目前为止,中心主题是“XR游戏开发”,所以在选择Unity引擎后,对于游戏的相关了解是另一个重要的领域,当然我们最终目标是实现XR(VR、AR、MR)开发,这里只是借鉴小游戏开发思路和算法,快速提升游戏开发与设计水平;
++++“Unity小游戏算法分析与实现”:定位在一个科普类知识,让大家熟悉一下Unity经典小游戏中的算法分析与实现!
##《Unity小游戏算法分析与实现》目录
#第一篇:Unity小游戏介绍篇
#第二篇:Unity小游戏实战篇
#第三篇:Unity中XR游戏实战篇
#第四篇:Unity中游戏进阶篇
#第五篇:立钻哥哥对Unity游戏开发的拓展
#推广:【XR游戏开发QQ群:784477094】
#第一篇:Unity小游戏介绍篇
#第一篇:Unity小游戏介绍篇 |
#第一篇:Unity小游戏介绍篇
++++立钻哥哥:Unity小游戏,一个是Unity,一个是小游戏,这就是知识点;一个是为什么选择Unity:该引擎是目前世界范围内使用最广泛的游戏开发与虚拟现实开发平台之一;一个是小游戏:借鉴经典小游戏开发思路和算法,快速提升游戏开发与设计水平;
++++A.1、Unity引擎认知
++++A.2、经典小游戏认知
++++A.3、立钻哥哥对Unity中小游戏的拓展
##A.1、Unity引擎认知
##A.1、Unity引擎认知 |
++A.1、Unity引擎认知
++++立钻哥哥:Unity引擎的认知,对于Unity的介绍非常多,已经有很多专题介绍过了;
++++这里比较推荐一个专题就是:“Unity企业内训”,这个虽然不是针对程序员开发者进阶篇,但是已经足以让我们认知Unity世界了;
++++Unity企业内训分类:https://blog.****.net/vrunsoftyanlz/article/category/8037810
++++Unity企业内训(目录):https://blog.****.net/VRunSoftYanlz/article/details/82634668
++++第1讲:Unity中C#基础:https://blog.****.net/VRunSoftYanlz/article/details/82634733
++++第2讲:Unity引擎基础:https://blog.****.net/VRunSoftYanlz/article/details/82861180
++++第3讲:Unity组件开发:https://blog.****.net/VRunSoftYanlz/article/details/82927699
++++第4讲:Unity物理系统:https://blog.****.net/VRunSoftYanlz/article/details/83479776
++++第5讲:UGUI:https://blog.****.net/VRunSoftYanlz/article/details/83963811
++++第6讲:Unity动画系统:https://blog.****.net/VRunSoftYanlz/article/details/84207696
++A.1.1、熟悉Unity引擎的操作
++++立钻哥哥:Unity是一个让用户轻松创建各种类型游戏和虚拟现实等互动内容的多平台综合型开发工具;Unity游戏引擎提供的功能日益完善,从单机游戏到网络游戏,从PC到移动设备,从游戏到VR、AR和体感游戏,其可扩展性、易用性、性价比等方面都吸引着越来越多的开发者投身到使用Unity游戏开发中;
++A.1.2、Unity游戏引擎的下载和安装
++++立钻哥哥:引擎下载:https://unity3d.com/cn/get-unity/download/archive?_ga=2.57718698.1613897683.1551012011-303951547.1551012011
++++立钻哥哥Unity学习空间: http://blog.****.net/VRunSoftYanlz/
++++Unity圣典用户手册:http://www.ceeger.com/Manual/
++++Unity官网: https://unity3d.com/cn/
++++Unity引擎下载:https://unity3d.com/cn/get-unity/download/archive?_ga=2.57718698.1613897683.1551012011-303951547.1551012011
++A.1.3、Unity中定义的重要概念
++++立钻哥哥:要掌握Unity引擎的用法,对一些概念是必须清楚的,不然就没法继续认知和交流学习了;
++++[资源(Assets)]:在Unity游戏的制作开发过程中,需要用到各种各样的资源,这些资源包括模型、贴图、声音、程序脚本等;在Unity中,可以把资源(Assets)比喻成游戏制作过程中的原材料,通过原材料的不同组合和利用,便形成了一个游戏产品;
++++[工程(Project)]:在Unity中,工程就是一个游戏项目;这个工程包括了该游戏场景所需要的各种资源,还有关卡、场景和游戏对象等;
++++[场景(Scenes)]:场景可以想象成一个游戏界面,或者一个游戏关卡;
++++[游戏对象(GameObject)]:游戏对象是组成游戏场景必不可少的对象;
++++[组件(Component)]:组件是Unity中用于控制游戏对象属性的集合;每一个组件包括了游戏对象的某种特定的功能属性;
++++[脚本(Scripts)]:互动性是游戏的最基本特征之一,而程序脚本是实现可互动性的最有利的工具;在编写游戏脚本的时候,不用关心Unity的底层原理,只要调用Unity的API,就可以完成出色的游戏产品;
++++[预制体(Prefabs)]:Unity提供的一种保存可反复利用设置好属性和行为的一种机制;Prefab可以在不同的地方不同的场景重复使用这些保存了的设置;
##A.2、经典小游戏认知
##A.2、经典小游戏认知 |
++A.2、经典小游戏认知
++++立钻哥哥:对于小游戏的总结,先前也有“U3D小项目参考”,这里汇总了一些Unity小案例,也是一个不错的参考;那为什么,还需要再增加一个经典小游戏的认知呢? 好吧,那就跟着立钻哥哥来看看到底有什么不同吧!(提示:增加了思路和算法分析,还有... ...)
++++U3D小项目参考:https://blog.****.net/VRunSoftYanlz/article/details/80141811
++经典小游戏拓展
++++立钻哥哥:在这篇博客中,我们将借鉴经典小游戏开发思路和算法,快速提升游戏开发与设计水平;
++++增加的经典小游戏有:打地鼠、俄罗斯方块、打砖块、三消、翻牌子、连连看、拼图、推箱子、炸弹人、华容道、横版跑酷、扫雷、贪吃蛇、五子棋、跳棋、吃豆人、斗地主、坦克大战、王者荣耀、绝地求生等;
++++还会推广实战至VR领域,为什么?(我们最终的目的是“XR游戏开发”,这是主战场,一个充满机遇的主题)
++++为此,我们还组建了一个XR游戏开发QQ群(784477094),欢迎加入,讨论学习;
#第二篇:Unity小游戏实战篇
#第二篇:Unity小游戏实战篇 |
#第二篇:Unity小游戏实战篇
++++立钻哥哥:借鉴经典小游戏开发思路和算法,快速提升游戏开发与设计水平;
++++B.1、MVC框架(提升等级案例)
++++B.2、打地鼠
++++B.3、俄罗斯方块
++++B.4、打砖块
++++B.5、三消
++++B.6、翻牌子
++++B.7、连连看
++++B.8、拼图
++++B.9、推箱子
++++B.10、炸弹人
++++B.11、华容道
++++B.12、横版跑酷
++++B.13、扫雷
++++B.14、贪吃蛇
++++B.15、五子棋
++++B.16、跳棋
++++B.17、吃豆人
++++B.18、斗地主
++++B.19、坦克大战
++++B.20、塔防
++++B.21、秘密行动
++++B.22、耳轮跳
++++B.23、飞机大战
++++B.24、见缝插针
++++B.25、切水果
###B.1、MVC框架(提升等级案例)
###B.1、MVC框架(提升等级案例) |
++B.1、MVC框架(提升等级案例)
++++立钻哥哥:MVC(Model View Controller),是模型(Model)-视图(View)-控制器(Controller)的缩写,一种软件设计典范:用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑;不同的开发人员可同时开发视图、控制器逻辑和业务逻辑;
++++[Model(模型)]:表示应用程序核心;是应用程序中用于处理应用程序数据逻辑的部分;
++++[View(视图)]:显示数据;是应用程序中处理数据显示的部分;
++++[Controller(控制器)]:处理输入;是应用程序中处理用户交互的部分;
++++B.1.1、[PlayerMsgContrller.cs]
++++B.1.2、[PlayerMsgView.cs]
++++B.1.3、[PlayerScript.cs]
###B.1.1、[PlayerMsgContrller.cs]
###B.1.1、[PlayerMsgContrller.cs] |
++B.1.1、[PlayerMsgContrller.cs]
++++立钻哥哥:/YanlzMVCDemo/Assets/MVCDemo/PlayerMsgController.cs
using System.Collections; using System.Collections.Generic; using UnityEngine;
//立钻哥哥:Controller层 public class PlayerMsgController : MonoBehaviour{ public static PlayerMsgController controller; private int levelUpValue = 20;
void Awake(){ controller = this; }
void Start(){ PlayerScript.GetMod().PlayerLevel = 1; PlayerScript.GetMod().PlayerExperience = 0; PlayerScript.GetMod().PlayerFullExperience = 100; PlayerScript.GetMod().GoldNum = 0; }
//立钻哥哥:提升经验按钮点击事件 public void OnExperienceUpButtonClick(){ PlayerScript.GetMod().PlayerExperience += levelUpValue;
if(PlayerScript.GetMod().PlayerExperience >= PlayerScript.GetMod().PlayerFullExperience){ PlayerScript.GetMod().PlayerLevel += 1; PlayerScript.GetMod().PlayerFullExperience += 200 * PlayerScript.GetMod().PlayerLevel; levelUpValue += 20;
if(PlayerScript.GetMod().PlayerLevel % 3 == 0){ PlayerScript.GetMod().GoldNum += 100 * PlayerScript.GetMod().PlayerLevel; } } //立钻哥哥:if(){} } //立钻哥哥:public void OnExperienceUpButtonClick(){}
} //立钻哥哥:public class PlayerMsgController:MonoBehaviour{} |
###B.1.2、[PlayerMsgView.cs]
###B.1.2、[PlayerMsgView.cs] |
++B.1.2、[PlayerMsgView.cs]
++++立钻哥哥:/YanlzMVCDemo/Assets/MVCDemo/PlayerMsgView.cs
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;
//立钻哥哥:UI视图层 public class PlayMsgView : MonoBehaviour{ public Text playerLevel; public Text playerExperience; public Text goldNum; public Button experienceUpButton;
void Start(){ //立钻哥哥:委托事件绑定 PlayerScript.GetMod().OnLevelChange += SetLevel; PlayerScript.GetMod().OnExperienceChange += SetExperience; PlayerScript.GetMod().OnFullExperienceChange += SetFullExperience; PlayerScript.GetMod().OnGlodNumChange += SetGoldNum;
//立钻哥哥:View绑定按钮控制功能(添加观察者) experienceUpButton.onClick.AddListener(PlayerMsgController.controller.OnExperienceUpButtonClick); } //立钻哥哥:void Start(){}
//立钻哥哥:修改UILevel值 public void SetLevel(int level){ playerLevel.text = level.ToString(); }
//立钻哥哥:修改UI经验值 public void SetExperience(int experience){ //立钻哥哥:将字符串以“/”拆开 string[] str = playerExperience.text.Split(new char[]{‘/’}); }
public void SetFullExperience(int fullExperience){ string[] str = playerExperience.text.Split(new char[]{‘/’}); playerExperience.text = str[] + “/” + fullExperience; }
public void SetGoldNum(int goldn){ goldNum.text = goldn.ToString(); }
} //立钻哥哥:public class PlayMsgView:MonoBehaviour{} |
###B.1.3、[PlayerScript.cs]
###B.1.3、[PlayerScript.cs] |
++B.1.3、[PlayerScript.cs]
++++立钻哥哥:/YanlzMVCDemo/Assets/MVCDemo/PlayerScript.cs
using System.Collections; using System.Collections.Generic; using UnityEngine;
//立钻哥哥:模型委托(当用户信息发生变化时执行) public delegate void OnValueChange(int val);
public class PlayerScript{ private int playerLevel; //玩家等级 private int playerExperience; //玩家经验 private int playerFullExperience; //玩家升级经验 private int goldNum; //金币数量
//立钻哥哥:声明委托对象 public OnValueChange OnLevelChange; //当等级发生变化时,触发的事件 public OnValueChange OnExperienceChange; //当经验发生变化时,触发的事件 public OnValueChange OnFullExperienceChange; //当升级经验发生变化时 public OnValueChange OnGoldNumChange; //当金币数量发生变化时
private static PlayerScript mod; //单例 public static PlayerScript GetMod(){ if(null == mod){ mod = new PlayerScript(); }
return mod; }
private PlayerScript(){}
//立钻哥哥:玩家等级属性 public int PlayerLevel{ get{ return playerLevel; } set{ playerLevel = value; if(OnLevelChange != null){ //立钻哥哥:如果委托对象不为空 OnLevelChange(playerLevel); //执行委托 } } }
//立钻哥哥:玩家经验属性 public int PlayerExperience{ get{ return playerExperience; } set{ playerExperience = value; if(OnExperienceChange != null){ OnExperienceChange(playerExperience); } } }
//立钻哥哥:玩家升级经验属性 public int PlayerFullExperience{ get{ return playerFullExperience; } set{ playerFullExperience = value; if(OnFullExperienceChange != null){ OnFullExperienceChange(playerFullExperience); } } }
//立钻哥哥:金币数量属性 public int GoldNum{ get{ return goldNum; } set{ goldNum = value; if(OnGoldNumChange != null){ OnGoldNumChange(goldNum); } } }
} //立钻哥哥:public class PlayerScript{} |
##B.2、打地鼠
##B.2、打地鼠 |
++B.2、打地鼠
++++立钻哥哥:《打地鼠》这款游戏能够提高人体大脑和身体的协调能力,增强臂力,锻炼身体,深受大众的喜欢;
++++B.2.1、游戏认知
++++B.2.2、游戏开发
++++B.2.3、立钻哥哥对打地鼠的拓展
###B.2.1、游戏认知
###B.2.1、游戏认知 |
++B.2.1、游戏认知
++++立钻哥哥:《打地鼠》(原名:Whac-A-Mole),在游戏中,玩家在规定时间内,敲打一只只从地洞里冒出头的地鼠,从而获得游戏胜利;
++++地鼠随机出现在洞口,玩家要在它出现的时候击中它,击中加分,反之地鼠会自动消失,时间耗尽则游戏结束;随着游戏时间的减少,老鼠出现的频率越来越高,存在的时间也越来越短,游戏难度逐步上升;
###B.2.2、游戏开发
###B.2.2、游戏开发 |
++B.2.2、游戏开发
++++立钻哥哥:《打地鼠》主要的业务逻辑有:洞口的排列;地鼠出现频率;单个地鼠设置;游戏时间和分数;
++++[洞口的排列]:利用一个3*3的二维数组或者一个一维数组来表示地图中的9个洞口;
++++[地鼠出现频率]:利用改变随机数的取值范围来控制地鼠出现的频率和个数;
++++[单个地鼠设置]:在地鼠上设置鼠标监听以及计时器;
++++[游戏时间和分数]:利用整型变量记录游戏时长以及分数;
++++2.2.1、YanlzMole_Beaten.cs
++++2.2.2、YanlzMole_ChangeCursor.cs
++++2.2.3、YanlzMole_GameControl.cs
++++2.2.4、YanlzMole_Gophers.cs
++++2.2.5、YanlzMole_Restart.cs
++2.2.1、YanlzMole_Beaten.cs
++++立钻哥哥:WhacAMole\Assets\YanlzDemo\YanlzMole_Beaten.cs;
using System.Collections; using System.Collections.Generic; using UnityEngine;
//立钻哥哥:地鼠被击打以后调用该函数; public class YanlzMole_Beaten : MonoBehaviour{ public int id;
//立钻哥哥:在点击后3.5s销毁该地鼠,将洞口的isAppear值设置为false void Update(){ Destroy(gameObject, 0.35f); FindObjectOfType<YanlzMole_GameControl>().holes[id].isAppear = false; }
} //立钻哥哥:public class YanlzMole_Beaten:MonoBehaviour{} |
++2.2.2、YanlzMole_ChangeCursor.cs
++++立钻哥哥:WhacAMole\Assets\YanlzDemo\YanlzMole_ChangeCursor.cs;
using System.Collections; using UnityEngine;
//立钻哥哥:鼠标追踪 public class YanlzMole_ChangeCursor : MonoBehaviour{ public Texture2D UserCursor; public Texture2D UserClickCursor; private bool isClicked = false;
void Start(){ //立钻哥哥:在游戏界面内隐藏系统光标 Cursor.visible = false; }
//立钻哥哥:时时判断鼠标点击状态,便于切换图像 void Update(){ if(Input.GetMouseButton(0)){ isClicked = true; }else{ isClicked = false; } }
void OnGUI(){ //立钻哥哥:获取鼠标当前位置 Vector2 mouse_pos = Input.mousePosition;
//立钻哥哥:鼠标点击与否显示相应的图片 if(isClicked == false){ GUI.DrawTexture(new Rect(mouse_pos.x - 40f, Screen.height - mouse_pos.y - 60f, 100, 100), UserCursor); GUI.DrawTexture(new Rect(mouse_pos.x - 40f, Screen.height - mouse_pos.y - 60f, 100, 100), UserClickCursor); } }
} //立钻哥哥:public class YanlzMole_ChangeCursor:MonoBehaviour{} |
++2.2.3、YanlzMole_GameControl.cs
++++立钻哥哥:WhacAMole\Assets\YanlzDemo\YanlzMole_GameControl.cs;
using System.Collections; using System.Collections.Generic; using UnityEngine;
//立钻哥哥:游戏总控制脚本 public class YanlzMole_GameControl : MonoBehaviour{ public GameObject Gophers; public int PosX, PosY;
public TextMesh timeLabel; public float time = 30.0f; public int score = 0;
//立钻哥哥:设定一个地洞类,存储地洞的坐标以及是否出现的布尔值 public class Hole{ public bool isAppear; public int HoleX; public int HoleY; } //立钻哥哥:public class Hole{}
public Hole[] holes;
//立钻哥哥:Awake函数实际上比Start函数调用的更早 //在场景初始化的时候,将每个洞口的坐标值存入一维数组中,并将每一个洞口的isAppear值设定为false; // (-2, 0) (0, 0) (2, 0) // (-2, -1) (0, -1) (2, -1) // (-2, -2) (0, -2) (2, -2) void Awake(){ PosX = -2; PosY = -2;
holes = new Hole[9]; for(int i = 0; i < 3; i++){ for(int j = 0; j < 3; j++){ holes[i * 3 + j] = new Hole(); holes[i * 3 + j].HoleX = PosX; holes[i * 3 + j].HoleY = PosY; holes[i * 3 + j].isAppear = false;
PosY++; }
PosY = -2; PosX = PosX + 2; } } //立钻哥哥:void Awake(){}
//立钻哥哥:在游戏场景开始后延时调用canAppear函数,从第0秒开始,每隔十秒调用一次 void Start(){ InvokeRepeating(“CanAppear”, 0, 10); }
//立钻哥哥:游戏时间控制 void Update(){ //立钻哥哥:时间以秒的速度减少,并在timeLabel里显示当前剩余时间(一位小数) time -= Time.deltaTime; timeLabel.text = “Time: ” + time.ToString(“F1”);
//立钻哥哥:当时间耗尽,调用GameOver函数 if(time < 0){ GameOver(); } }
//立钻哥哥:从第0秒开始调用函数,每隔1秒调用一次 public void CanAppear(){ InvokeRepeating(“Appear”, 0, 1); }
//立钻哥哥:地鼠生成函数 public void Appear(){ //立钻哥哥:当前地洞可以生成地鼠的条件:isAppear = false; //随机生成i值选择洞口,直到符合条件的洞口被选中 int i = Random.Range(0, 9); while(holes[i].isAppear == true){ i = Random.Range(0, 9); }
//立钻哥哥:debug只是用来打印当前的坐标,便于观察,并不会影响游戏运行(可写可不写) Debug.Log(holes[i].HoleX + “,” + holes[i].HoleY);
//立钻哥哥:选定洞口以后,在洞口的坐标上生成地鼠,传递洞口id,将当前洞口的isAppear值改为true Instantiate(Gophers, new Vector3(holes[i].HoleX, holes[i].HoleY + 0.4F, -0.1F), Quaternion.identity); Gophers.GetComponent<YanlzMole_Gophers>().id = i; holes[i].isAppear = true; } //立钻哥哥:public void Appear(){}
//立钻哥哥:游戏结束函数 void GameOver(){ time = 0; timeLabel.text = “Time: 0”;
//立钻哥哥:将所有延时调用函数全部取消 CancelInvoke();
Debug.Log(“立钻哥哥:Game Over!”); }
} //立钻哥哥:public class YanlzMole_GameControl:MonoBehaviour{} |
++2.2.4、YanlzMole_Gophers.cs
++++立钻哥哥:WhacAMole\Assets\YanlzDemo\YanlzMole_Gophers.cs;
using UnityEngine;
//立钻哥哥:地鼠类 public class YanlzMole_Gophers : MonoBehaviour{ public GameObject beaten; public int id;
//立钻哥哥:地鼠出现后,如果未被点击,将在三秒后自动销毁,将相应洞口的isAppear值设置为false; void Update(){ Destroy(this.gameObject, 3.0f); FindObjectOfType<YanlzMole_GameControl>().holes[id].isAppear = false; }
//立钻哥哥:鼠标点击 void OnMouseDown(){ Debug.Log(“立钻哥哥:点击!”);
//立钻哥哥:在相同的位置生成一个被击打图像的地鼠 GameObject g; g = Instantiate(beaten, gameObject.transform.position, Quaternion.identity); g.GetComponent<YanlzMole_Beaten>().id = id;
//立钻哥哥:增加分数 FindObjectOfType<YanlzMole_GameControl>.score += 1; int scores = FindObjectOfType<YanlzMole_GameControl>().score; GameObject.Find(“Score”).gameObject.GetComponent<TextMesh>().text = “Score: ” + scores.ToString();
//立钻哥哥:在0.1s后摧毁当前生成的地鼠 Destroy(this.gameObject, 0.1f); } //立钻哥哥:void OnMouseDown(){}
} //立钻哥哥:public class YanlzMole_Gophers:MonoBehaviour{} |
++2.2.5、YanlzMole_Restart.cs
++++立钻哥哥:WhacAMole\Assets\YanlzDemo\YanlzMole_Restart.cs;
using UnityEngine; using UnityEditor.SceneManagement;
//立钻哥哥:重新开始比赛 public class YanlzMole_Restart : MonoBehaviour{ Debug.Log(“立钻哥哥:Restart!”);
EditorSceneManager.LoadScene(“YanlzMoleScene_mole”);
} //立钻哥哥:public class YanlzMole_Restart:MonoBehaviour{} |
###B.2.3、立钻哥哥对打地鼠的拓展
###B.2.3、立钻哥哥对打地鼠的拓展 |
++立钻哥哥推荐的拓展学习链接(Link_Url):
立钻哥哥推荐的拓展学习链接(Link_Url) |
++++立钻哥哥Unity 学习空间: http://blog.****.net/VRunSoftYanlz/
++++Unity5.x用户手册:https://blog.****.net/VRunSoftYanlz/article/details/81712741
++++Unity面试题ABC:https://blog.****.net/vrunsoftyanlz/article/details/78630687
++++Unity面试题D:https://blog.****.net/VRunSoftYanlz/article/details/78630838
++++Unity面试题E:https://blog.****.net/vrunsoftyanlz/article/details/78630913
++++Unity面试题F:https://blog.****.net/VRunSoftYanlz/article/details/78630945
++++Cocos2dx面试题:https://blog.****.net/VRunSoftYanlz/article/details/78630967
++++禅道[zentao]:https://blog.****.net/VRunSoftYanlz/article/details/83964057
++++框架知识点:https://blog.****.net/VRunSoftYanlz/article/details/80862879
++++游戏框架(UI框架夯实篇):https://blog.****.net/vrunsoftyanlz/article/details/80781140
++++游戏框架(初探篇):https://blog.****.net/VRunSoftYanlz/article/details/80630325
++++.Net框架设计:https://blog.****.net/VRunSoftYanlz/article/details/87401225
++++设计模式简单整理:https://blog.****.net/vrunsoftyanlz/article/details/79839641
++++专题:设计模式(精华篇):https://blog.****.net/VRunSoftYanlz/article/details/81322678
++++U3D小项目参考:https://blog.****.net/vrunsoftyanlz/article/details/80141811
++++Unity小游戏算法分析:https://blog.****.net/VRunSoftYanlz/article/details/87908365
++++Unity案例(Vehicle):https://blog.****.net/VRunSoftYanlz/article/details/82355876
++++UML类图:https://blog.****.net/vrunsoftyanlz/article/details/80289461
++++PowerDesigner简介:https://blog.****.net/VRunSoftYanlz/article/details/86500084
++++Unity知识点0001:https://blog.****.net/vrunsoftyanlz/article/details/80302012
++++Unity知识点0008:https://blog.****.net/VRunSoftYanlz/article/details/81153606
++++U3D_Shader编程(第一篇:快速入门篇):https://blog.****.net/vrunsoftyanlz/article/details/80372071
++++U3D_Shader编程(第二篇:基础夯实篇):https://blog.****.net/vrunsoftyanlz/article/details/80372628
++++Lua快速入门篇(Xlua拓展):https://blog.****.net/VRunSoftYanlz/article/details/81173818
++++Lua快速入门篇(XLua教程):https://blog.****.net/VRunSoftYanlz/article/details/81141502
++++Lua快速入门篇(基础概述):https://blog.****.net/VRunSoftYanlz/article/details/81041359
++++Unity引擎基础:https://blog.****.net/vrunsoftyanlz/article/details/78881685
++++Unity面向组件开发:https://blog.****.net/vrunsoftyanlz/article/details/78881752
++++Unity物理系统:https://blog.****.net/vrunsoftyanlz/article/details/78881879
++++Unity2D平台开发:https://blog.****.net/vrunsoftyanlz/article/details/78882034
++++UGUI基础:https://blog.****.net/vrunsoftyanlz/article/details/78884693
++++UGUI进阶:https://blog.****.net/vrunsoftyanlz/article/details/78884882
++++UGUI综合:https://blog.****.net/vrunsoftyanlz/article/details/78885013
++++Unity动画系统基础:https://blog.****.net/vrunsoftyanlz/article/details/78886068
++++Unity动画系统进阶:https://blog.****.net/vrunsoftyanlz/article/details/78886198
++++Navigation导航系统:https://blog.****.net/vrunsoftyanlz/article/details/78886281
++++Unity特效渲染:https://blog.****.net/vrunsoftyanlz/article/details/78886403
++++Unity数据存储:https://blog.****.net/vrunsoftyanlz/article/details/79251273
++++Unity中Sqlite数据库:https://blog.****.net/vrunsoftyanlz/article/details/79254162
++++WWW类和协程:https://blog.****.net/vrunsoftyanlz/article/details/79254559
++++Unity网络:https://blog.****.net/vrunsoftyanlz/article/details/79254902
++++Unity资源加密:https://blog.****.net/VRunSoftYanlz/article/details/87644514
++++PhotonServer简介:https://blog.****.net/VRunSoftYanlz/article/details/86652770
++++编写Photon游戏服务器:https://blog.****.net/VRunSoftYanlz/article/details/86682935
++++C#事件:https://blog.****.net/vrunsoftyanlz/article/details/78631267
++++C#委托:https://blog.****.net/vrunsoftyanlz/article/details/78631183
++++C#集合:https://blog.****.net/vrunsoftyanlz/article/details/78631175
++++C#泛型:https://blog.****.net/vrunsoftyanlz/article/details/78631141
++++C#接口:https://blog.****.net/vrunsoftyanlz/article/details/78631122
++++C#静态类:https://blog.****.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String类:https://blog.****.net/vrunsoftyanlz/article/details/78630945
++++C#数据类型:https://blog.****.net/vrunsoftyanlz/article/details/78630913
++++Unity3D默认的快捷键:https://blog.****.net/vrunsoftyanlz/article/details/78630838
++++游戏相关缩写:https://blog.****.net/vrunsoftyanlz/article/details/78630687
++++HTC_VIVE开发基础:https://blog.****.net/VRunSoftYanlz/article/details/81989970
++++Oculus杂谈:https://blog.****.net/VRunSoftYanlz/article/details/82469850
++++Oculus安装使用:https://blog.****.net/VRunSoftYanlz/article/details/82718982
++++SteamVR简介:https://blog.****.net/VRunSoftYanlz/article/details/86484254
++++SteamVR脚本功能分析:https://blog.****.net/VRunSoftYanlz/article/details/86531480
++++SteamVR2.0开发指南:https://blog.****.net/VRunSoftYanlz/article/details/86618187
++++SteamVR/Extras:https://blog.****.net/VRunSoftYanlz/article/details/86584108
++++SteamVR/Input:https://blog.****.net/VRunSoftYanlz/article/details/86601950
++++OpenXR简介:https://blog.****.net/VRunSoftYanlz/article/details/85726365
++++VRTK杂谈:https://blog.****.net/VRunSoftYanlz/article/details/82562993
++++VRTK快速入门(杂谈):https://blog.****.net/VRunSoftYanlz/article/details/82955267
++++VRTK官方示例(目录):https://blog.****.net/VRunSoftYanlz/article/details/82955410
++++VRTK代码结构(目录):https://blog.****.net/VRunSoftYanlz/article/details/82780085
++++VRTK(SceneResources):https://blog.****.net/VRunSoftYanlz/article/details/82795400
++++VRTK_ControllerEvents:https://blog.****.net/VRunSoftYanlz/article/details/83099512
++++VRTK_InteractTouch:https://blog.****.net/VRunSoftYanlz/article/details/83120220
++++UnityAPI.Rigidbody刚体:https://blog.****.net/VRunSoftYanlz/article/details/81784053
++++UnityAPI.Material材质:https://blog.****.net/VRunSoftYanlz/article/details/81814303
++++UnityAPI.Android安卓:https://blog.****.net/VRunSoftYanlz/article/details/81843193
++++UnityAPI.AndroidJNI安卓JNI:https://blog.****.net/VRunSoftYanlz/article/details/81879345
++++UnityAPI.Transform变换:https://blog.****.net/VRunSoftYanlz/article/details/81916293
++++UnityAPI.WheelCollider轮碰撞器:https://blog.****.net/VRunSoftYanlz/article/details/82356217
++++UnityAPI.Resources资源:https://blog.****.net/VRunSoftYanlz/article/details/83155518
++++JSON数据结构:https://blog.****.net/VRunSoftYanlz/article/details/82026644
++++CocosStudio快速入门:https://blog.****.net/VRunSoftYanlz/article/details/82356839
++++VR实验:以太网帧的构成:https://blog.****.net/VRunSoftYanlz/article/details/82598140
++++实验四:存储器扩展实验:https://blog.****.net/VRunSoftYanlz/article/details/87834434
++++FrameVR示例V0913:https://blog.****.net/VRunSoftYanlz/article/details/82808498
++++FrameVR示例V1003:https://blog.****.net/VRunSoftYanlz/article/details/83066516
++++SwitchMachineV1022:https://blog.****.net/VRunSoftYanlz/article/details/83280886
++++PlaySceneManagerV1022:https://blog.****.net/VRunSoftYanlz/article/details/83280886
++++Unity企业内训(目录):https://blog.****.net/VRunSoftYanlz/article/details/82634668
++++Unity企业内训(第1讲):https://blog.****.net/VRunSoftYanlz/article/details/82634733
++++Unity企业内训(第2讲):https://blog.****.net/VRunSoftYanlz/article/details/82861180
++++Unity企业内训(第3讲):https://blog.****.net/VRunSoftYanlz/article/details/82927699
++++Unity企业内训(第4讲):https://blog.****.net/VRunSoftYanlz/article/details/83479776
++++Unity企业内训(第5讲):https://blog.****.net/VRunSoftYanlz/article/details/83963811
++++Unity企业内训(第6讲):https://blog.****.net/VRunSoftYanlz/article/details/84207696
++++钻哥带您了解产品原型:https://blog.****.net/VRunSoftYanlz/article/details/87303828
++++插件<Obi Rope>:https://blog.****.net/VRunSoftYanlz/article/details/83963905
++++计算机组成原理(教材篇):https://blog.****.net/VRunSoftYanlz/article/details/82719129
++++立钻哥哥Unity 学习空间: http://blog.****.net/VRunSoftYanlz/
--_--VRunSoft:lovezuanzuan--_--