2018-05-22 11:28:34 luoyikun 阅读数 1209
  • AssetBundle框架设计_框架篇视频课程

    本课程总体分为两大部分:理论篇与架构篇 AssetBundle架构篇:      1: 讲解Unity原生AssetBundle不适用工程化实战开发的原因与解决方案。      2: 详述AssetBundle框架设计原理图,以及核心设计理念。      3: Untiy编辑器界面全自动化创建AssetBundle与打包理念与代码实现。      4: 关于单一AssetBundle包的综合加载与管理以及相应测试实现。      5: AssetBundle整体管理。           本模块包含*.Manifest清单文件读取、AB包之间复杂依赖关系管理、整体场景化自动打包与加载管理流程、项目辅助全局定义与路径管理等 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    235 人正在学习 去看看 刘国柱
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class ChangeMat : MonoBehaviour {


    [MenuItem("Tools/ChangeNewMat")]
    static void ChangeNewMat()
    {
        GameObject obj = Selection.activeGameObject;
        foreach (Renderer it in obj.transform.GetComponentsInChildren<Renderer>())
        {
            Material mat = AssetDatabase.LoadAssetAtPath<Material>("Assets/ViveJx/Materials/JianXiuBall.mat");
            Material[] bufMat = new Material[it.sharedMaterials.Length];
            for (int i = 0; i < it.sharedMaterials.Length; i++)
            {
                bufMat[i] = mat;
            }
            it.sharedMaterials = bufMat;
        }
    }
}

Note that like all arrays returned by Unity, this returns a copy of materials array. If you want to change some materials in it, get the value, change an entry and set materials back.
要改变材质数组,得重新赋值一个数组

2015-01-20 21:44:54 Gao_Liu_Yun 阅读数 1238
  • AssetBundle框架设计_框架篇视频课程

    本课程总体分为两大部分:理论篇与架构篇 AssetBundle架构篇:      1: 讲解Unity原生AssetBundle不适用工程化实战开发的原因与解决方案。      2: 详述AssetBundle框架设计原理图,以及核心设计理念。      3: Untiy编辑器界面全自动化创建AssetBundle与打包理念与代码实现。      4: 关于单一AssetBundle包的综合加载与管理以及相应测试实现。      5: AssetBundle整体管理。           本模块包含*.Manifest清单文件读取、AB包之间复杂依赖关系管理、整体场景化自动打包与加载管理流程、项目辅助全局定义与路径管理等 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    235 人正在学习 去看看 刘国柱

Mono Develop脚本编辑器介绍


    Unity3D目前支持三种语言的脚本,包括c#JavaScriptBoo,在一个游戏中开发者可以使用一种或者同时使用多种语言来实现脚本的控制。

三种不同的语言其实效率是相当的,最后都会编译成Unity3D内置的中间代码。目前国内用c#的占大多数。


注意:


1、项目运行过程中的修改不回保存。

2、脚本只能依附于对象或由其他脚本用才能运行。

3、一个脚本可以放在多个游戏对象上面,是多个实例。

4、一个脚本的多个实例和其他脚本之间互补干扰。


脚本编辑器的介绍:


1、脚本在Project中的显示名称不要加cs,类名要和cs名称一致,所有类继承自MOnoBehaviour


2、项目工程分层设计:


Scenes:存放场景    Scripts:存放脚本   Resources:存放资源包   Pesfabs:预设体

Textures:贴图       Materials:材质(主要为.mat文件)

Audios:声音       Models:模型(存放FBX等文件)


如图所示:



3、初始化不要放到构造函数中,而是放到Start()方法中。


4、放到游戏对象中的脚本(实例化)可以在Inspector中修改属性,get/set写法属性不被识别,直接public字段就能当属性用,不写修饰符就是私有private


VS编辑器:


1、更改默认的开发工具,由MonoDev-->VS

2、具体更改步骤:

   Edit-->Preference-->Extennal Tools-->External Tools-->External script Editor

   Edit-->preferences-->Extemal Tools-->Extemal Script Editor-->D:\Program Files\Microsoft Visual Studio 12.0\Common7\IDE-->devenv.exe-->关闭


如图所示:



更多精彩请点击 http://www.gopedu.com/

2018-10-23 16:52:11 realzuile 阅读数 5360
  • AssetBundle框架设计_框架篇视频课程

    本课程总体分为两大部分:理论篇与架构篇 AssetBundle架构篇:      1: 讲解Unity原生AssetBundle不适用工程化实战开发的原因与解决方案。      2: 详述AssetBundle框架设计原理图,以及核心设计理念。      3: Untiy编辑器界面全自动化创建AssetBundle与打包理念与代码实现。      4: 关于单一AssetBundle包的综合加载与管理以及相应测试实现。      5: AssetBundle整体管理。           本模块包含*.Manifest清单文件读取、AB包之间复杂依赖关系管理、整体场景化自动打包与加载管理流程、项目辅助全局定义与路径管理等 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    235 人正在学习 去看看 刘国柱

1.没有将vs设置为默认脚本编辑器

2.通过步骤1后设置使用VS2012做脚本编辑,但每次还是启动Monodevelop,可能原因一:没有将unity与vs关联起来

https://marketplace.visualstudio.com/items?itemName=SebastienLebreton.VisualStudio2015ToolsforUnity
你下载对应的vs版本的Tool for Unity,安装后,打开后就可以正常使用vs打开脚本了,亲测(我自己的是用vs2015的,所以这里放2015的Tool for Unity)

要是不是2015版本的vs,那么

在搜索到结果中,找到自己版本的Tool for Unity,点击打开,在弹出的窗口中点击“Download”按钮,就可以下载对于版本的Tool for Unity了,接着安装就可以了

原因2:vs出问题了,无法与unity关联

将vs修复下;既然怒控制面板->程序->程序和功能->vs->更改->修复

 

 

2016-02-29 10:32:01 qinyuanpei 阅读数 6172
  • AssetBundle框架设计_框架篇视频课程

    本课程总体分为两大部分:理论篇与架构篇 AssetBundle架构篇:      1: 讲解Unity原生AssetBundle不适用工程化实战开发的原因与解决方案。      2: 详述AssetBundle框架设计原理图,以及核心设计理念。      3: Untiy编辑器界面全自动化创建AssetBundle与打包理念与代码实现。      4: 关于单一AssetBundle包的综合加载与管理以及相应测试实现。      5: AssetBundle整体管理。           本模块包含*.Manifest清单文件读取、AB包之间复杂依赖关系管理、整体场景化自动打包与加载管理流程、项目辅助全局定义与路径管理等 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    235 人正在学习 去看看 刘国柱

  最近在学习Shader时感觉Shader语言参数众多、语法诡异,如果每次都从头开始写Shader一定是一件痛苦的事情。如果可以在本地定义好一组标准的Shader模板,这样当我们需要实现某些效果类似的Shader时,就可以在这个Shader模板的基础上进行修改。因为Shader文件是一个文本文件,所以我们可以非常容易地创建这样一个模板,在这个模板中我们可以进一步完善相关的参数注释,这样就不用每次写Shader的时候都需要查文档了,从这个角度出发,就进入了这篇文章的正题:扩展Unity3D编辑器的脚本模板。

按图索骥,模板在哪里?

  Unity3D默认的脚本模版位于/Editor/Data/Resources/ScriptTemplates/目录下,注意该目录相对Unity3D的安装目录而言,在这个目录中我们可以找到Unity3D中脚本模板的某些蛛丝马迹,首先,脚本模板是一个简单的文本文件,这个文本文件中预先填充了内容,我们在编辑器中创建模脚本或者Shader的时候实际上是读取这些文件然后在写入项目中的指定路径的。其次,这些模板文件中#SCRIPTNAME#或者#NAME#这样的标记,当我们在编辑器中创建文件的时候,这个标记会被替换成指定的文件名。比如Unity3D中继承自MonoBehaviour的脚本,有一个非常重要的特性是文件名必须和类名保持一致,这固然是Unity3D引擎的一个设定,可是在这里亦可以找到一个可以称得上理由的理由。我们注意到这些模板的文件名中都有一个独一无二的数字,比如C#脚本的模板中的数字是81、Shader模板中的数字是83,这些数字是什么呢,博主这里将其称为来自星星的黑科技。

来自星星的黑科技

  作为一个经常捣鼓Unity3D编辑器的人,如果说你不知道MenuItem、EditorWindow、ScriptableWizard这些黑科技,那么说明你不是一个喜欢折腾和探索的人。从Unity3D的API文档中,我们知道MenuItem的原型为:

MenuItem(string itemName,bool isValidateFunction,int priority) 

我知道我们通常使用MenuItem常常使用的是它的第一个参数,即定义一个菜单项的名称,我们可以使用”/”这样的分隔符来表示菜单的层级,MenuItem需要配合一个静态方法来使用,可以理解为当我们点击当前定义的菜单后就会去执行静态方法中的代码,因此MenuItem常常可以帮助我们做些编辑器扩展开发的工作。好了,第二个参数作为一个验证的标志,如果该标志为true,意味着我们定义的静态方法是一个验证方法在执行静态方法前会首先对方法进行验证,这个我们暂且不管,因为今天我们这个来自星星的黑科技主要和第三个参数有关,第三个参数表示一个优先级,它表示菜单项在菜单栏中的展示顺序,优先级大的菜单项会展示在优先级小的菜单项下面,由此我们就明白了了模板文件名中的类似81、83这样的数字的真实含义,注意到模板文件的排列顺序和编辑器中的菜单项顺序是一样的,我们做一个尝试,编写下面的代码:

[MenuItem("Assets/Create/Lua Scripts", false, 85)]
static void CreateLuaScripts()
{

}

[MenuItem("Assets/Create/固定功能着色器", false, 86)]
static void CreateFixedFunctionShader()
{

}

[MenuItem("Assets/Create/表面着色器", false, 87)]
static void CreateSurfaceShader()
{

}

[MenuItem("Assets/Create/可编程着色器", false, 88)]
static void CreateVertexAndFragmentShader()
{

}

注意到我们按照已知的优先级继续写了四个方法,现在我们在编辑器中可以发现默认的菜单栏发生了变化:

黑科技让菜单栏发生了变化

我们可以看到我们编写的这四个菜单都生效了,虽然它们暂时什么都做不了,但顺着这个方向去探索,我们是可以实现最初的梦想的。现在我们来思考如何根据模板来创建文件,这个对我们来说简直太简单了,通过StreamReader来读取模板,然后再用StreamWriter来生成文件就可以了。可是这样创建的文件的文件名是固定的,在创建文件的时候我们没法修改,而且即使修改了文件内定义的名字并不会改变啊。所以我们需要一个更好的解决方案。Unity3D提供了一个UnityEditor.ProjectWindowCallback的命名空间,在这个空间中提供了一个称为EndNameEditAction的类,我们只需要继承这个类就可以完成这个任务。这个类需要重写Action的方法,我们知道创建一个文件的完整步骤是创建文件然后使其高亮显示,因此这部分代码实现如下:

/// <summary>
/// 定义一个创建资源的Action类并实现其Action方法
/// </summary>
class CreateAssetAction : EndNameEditAction
{

    public override void Action(int instanceId, string pathName, string resourceFile)
    {
        //创建资源
        Object obj = CreateAssetFormTemplate(pathName, resourceFile);
        //高亮显示该资源
        ProjectWindowUtil.ShowCreatedAsset(obj);
    }

    internal static Object CreateAssetFormTemplate(string pathName, string resourceFile)
    {

        //获取要创建资源的绝对路径
        string fullName = Path.GetFullPath(pathName);
        //读取本地模版文件
        StreamReader reader = new StreamReader(resourceFile);
        string content = reader.ReadToEnd();
        reader.Close();

        //获取资源的文件名
        string fileName = Path.GetFileNameWithoutExtension(pathName);
        //替换默认的文件名
        content = content.Replace("#NAME", fileName);

        //写入新文件
        StreamWriter writer = new StreamWriter(fullName, false, System.Text.Encoding.UTF8);
        writer.Write(content);
        writer.Close();

        //刷新本地资源
        AssetDatabase.ImportAsset(pathName);
        AssetDatabase.Refresh();

        return AssetDatabase.LoadAssetAtPath(pathName, typeof(Object));
    }
}

这部分代码相对来说比较简单,就是读取本地模板文件然后生成新文件,在生成新文件的时候会将#NAME替换成实际的文件名,这样我们就完成了文件资源的创建。现在的问题是如何在创建文件的时候获取实际的路径,这部分代码实现如下:

private static string GetSelectedPath()
{
    //默认路径为Assets
    string selectedPath = "Assets";

    //获取选中的资源
    Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.Assets);

    //遍历选中的资源以返回路径
    foreach (Object obj in selection)
    {
        selectedPath = AssetDatabase.GetAssetPath(obj);
        if (!string.IsNullOrEmpty(selectedPath) && File.Exists(selectedPath))
        {
            selectedPath = Path.GetDirectoryName(selectedPath);
            break;
        }
    }

    return selectedPath;
}

现在解决了创建资源的问题,我们接下来只要调用ProjectWindowUtil的StartNameEditingIfProjectWindowExists方法即可,该方法需要传入一个继承自EndNameEditAction的类的实例、目标文件路径和模板文件的路径。例如要创建一个Lua脚本可以这样实现:

[MenuItem("Assets/Create/Lua Scripts", false, 85)]
static void CreateLuaScripts()
{
    ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0,
        ScriptableObject.CreateInstance<CreateAssetAction>(),
        GetSelectedPath() + "/NewLuaScript.lua", null,
        "Assets/Editor/Template/85-Lua-NewLuaScript.lua.txt");
}

小结

  现在有了这个黑科技以后,我们可以创建更多的模板来扩展编辑器的功能,比如对Shader而言,我们可以创建些基础性的Shader模板,然后每次需要写Shader的时候直接从模板库中选择一个功能类似的Shader然后在此基础上进行修改,这样比从头开始写一个新的Shader应该会轻松不少,这段时间学习Shader,感觉进程缓慢离图形学高手遥遥无期,行了,这篇博客就是这样了。

效果演示

2017-04-10 01:55:17 Mogoson 阅读数 893
  • AssetBundle框架设计_框架篇视频课程

    本课程总体分为两大部分:理论篇与架构篇 AssetBundle架构篇:      1: 讲解Unity原生AssetBundle不适用工程化实战开发的原因与解决方案。      2: 详述AssetBundle框架设计原理图,以及核心设计理念。      3: Untiy编辑器界面全自动化创建AssetBundle与打包理念与代码实现。      4: 关于单一AssetBundle包的综合加载与管理以及相应测试实现。      5: AssetBundle整体管理。           本模块包含*.Manifest清单文件读取、AB包之间复杂依赖关系管理、整体场景化自动打包与加载管理流程、项目辅助全局定义与路径管理等 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    235 人正在学习 去看看 刘国柱

Script Template Toolkit

概述

Unity3D 脚本模板快速编辑,保存。脚本文件添加头注释,自动标注创建日期以及版权时间。

问题

  • 在使用Unity3D创建脚本文件时,希望Unity3D编辑器自动按照个人喜好预定义的模板来创建各类脚本文件,例如添加文件头注释等需求。
  • 希望在脚本头注释中自动标注脚本创建日期,以及根据创建日期标注版权时间(例如:2017-2018)。

条件

  • 实际上,Unity3D将各类脚本文件模板放在了安装目录下(例如:Unity 5.4.1f1\Editor\Data\Resources\ScriptTemplates)。
  • 在Unity3D提供的API中,可以通过AssetModificationProcessor类的OnWillCreateAsset方法捕获Unity3D编辑器创建Asset(包括脚本文件)事件。

方案

编辑

  • 编写Unity3D扩展编辑器代码,通过继承EditorWindow绘制自定义编辑器窗口来编辑/保存Unity3D的各类脚本文件模板(文本文件)。
  • 预定义标注字符串,“#CREATETIME#”标注创建日 期,
    “#COPYRIGHTTIME#”标注版权时间声明,在编辑模板时,在需要插入创建日期的地方使用“#CREATETIME#”标注即可,插入版权时间同理。
  • 使用预定义标注字符串编辑个人喜好风格的脚本文件模板。

创建

  • 在Unity3D编辑器的Project面板通过鼠标右键菜单创建脚本文件(例如:C#)时,Unity3D引擎会将相应的模板文件里边的内容全部拷贝到新建的文件中,且自动将“#SCRIPTNAME#”替换为新建文件时输入的文件名。但是,“#CREATETIME#”,“#COPYRIGHTTIME#”是我们自定义的标注字符串,Unity3D引擎不会识别,也不会将其替换成我们预期的内容。
  • 编写扩展编辑器代码,继承AssetModificationProcessor类并实现其OnWillCreateAsset(string assetPath)方法以捕获Unity3D编辑器创建Asset(包括脚本文件)事件以及处理我们自定义的标注字符串。
  • 捕获到创建Asset事件,检查文件扩展名,如果是.cs或.js或.shader或.compute则说明创建的是脚本文件,也就是说Unity3D引擎会按照相应的模板(例如C#,我们之前已经将其编辑成个人喜好风格的文本)来创建。(扩展编辑器代码)读取新建文件的内容,将
    “#CREATETIME#”替换成当前日期,将“#COPYRIGHTTIME#”替换成当前年份-下个年份。

实现

扩展编辑器

  • ScriptTemplateEditor.cs 读取/编辑/保存 Unity3D各类脚本模板文件。
  • ScriptTemplateModifier.cs 捕获创建事件,替换预定义标注字符串为其具体含义的内容。

脚本模板示例

  • Template 文件夹下存放各类脚本模板文件的示例,以供读者编写自己风格的模板时参考。

源码

源码托管地址

没有更多推荐了,返回首页