又到了入学季,谈谈软件研发的团队建设

半个月前,蛮牛游戏专栏作家群中有一个“很好说话的李总”,提了一个问题:

“一个问题:程序员是文臣还是武将?”

答案众说纷纭,但是回答“武将”的居多,我意同之。

原因有三:

  1. 程序员绝大多数性格比较直,规范性和纪律性和军人类似。
  2. 程序员的工作属于开创性的,不是0就是1.
  3. 程序员情商普遍较低,相对文档工作者。当然,做为IT从业人员的你,可能会有你的不同见解,仁者见仁智者见智嘛。
    既然是武将,那么在研发团队中,团队建设就非常重要了,如:

    忙时打仗,闲时练兵。 

    以我个人做为《程序员》、《团队leader》、《GCDN社区版主》、《程序员》的“奇葩”经验分享一下我对研发团队建设的归纳总结:

      团队建设,不仅仅是吃吃喝喝、游山玩水,而是值得leader挖空心思聚焦的头等大事。
      团队建设,不是闲时的“温饱思淫欲”,而是长治久安的“国策”。
      团队建设,是团队规范化,万众一心,较高执行力的必备条件。

    我过去几年的团队建设经验,无怪乎这几点。

     

    一个团队团队忙忙碌碌,无论是研发过程还是市场过程,如果在一定的时间周期内(以年为单位),总体负荷高,平均绩效低,则八成问题是在团队建设上,如新手多、沟通问题、协调不畅、项目返工等等:忙中有盲也

    image  又到了入学季,谈谈软件研发的团队建设 image thumb

    研发团队的首要目标是把任务和指标层层分解,然后再高效率的完成交付。

    然,在具体的执行过程中,由于时序问题、资源普遍缺少问题、经验不足问题、配合问题等等会导致这样、那样的问题,这些问题日积月累,逐渐会尾大不掉,则很有可能会成为团队的灾难:人才流失频繁、人与人隔阂、应付差事。

    这些不良结果统称为团队的情绪管理范畴。这张PPT是多年前在北京,参加总公司组织由IBM讲师的Team Leader的培训教材(部分摘录):

    image  又到了入学季,谈谈软件研发的团队建设 image thumb1

     

    那么,研发团队的团队建设应该如何做呢? 这里有一个Checklist,可供参考(规范和形式需要因地制宜的裁剪)

    • 周内定期的FreeTalk:业务经验分享和技术探索培训
    • 坦诚的沟通:三个满意和三个不满意,从谏如流。
    • 定期的例会制度:周会、月会
    • 日构建持续集成系统、里程碑管理
    • 项目管理工具:bug、任务分解
    • IM工具:如QQ群、飞信群、微信群
    • 需求评审制度、需求变更流程
    • 合理的加班调节、合理的薪酬变更
    • 后勤保障:个人加班餐、打车报销等
    • 杂七杂八:聚餐、吃串喝酒、外出旅游等
    • 我很想再加一条:敏捷开发,可是抱歉,研究了很久,但是未能成功实践之。

    当然,没有做过多年的一线IT研发(含技术类和文档类工种),很难算清这笔研发成本帐:

     

    “要想着为公司挣钱,而不是考虑为公司省钱。”

    image  又到了入学季,谈谈软件研发的团队建设 image thumb2

     

    参考:《开学季:学校是学校,学习是学习

    Unity3D项目实战笔记(4):Unity3D接入Android SDK

    Unity3D做手游,强于UI和业务逻辑处理;但一些与手机相关的操作,需要依赖Android系统API,且不用提一些第三方厂家的SDK接入了–原理上是大同小异。

     

    开发一个Unity3D的插件,以下是步骤:

    1. 在Eclipse中新建Android Application,并选择 as libray(这样可以生成jar包而不是apk文件)
    2. jar包的最小Android SDK选择为14(即Android 4.0以上系统);且Package一定要和Unity.Identity一致。(猜测是为了方便Unity打包的时候进行合并工作)
    3. 然后在Package视图选择Build–导入Unity3D的classes.jar包(Unity安装目录下自带的)
    4. 修改默认Activity,继承为UnityPlayerActivity;并删除OnCreate中SetContentView函数。
    5. 写供Unity3D调用的的public函数。如Max、Vibrate、ShowMessage2等。
    6. (地址在本文下面,可参见我demo)
    7. export为jar包 (jar包生成放到Plugins\Android\bin\下面),
    8. 拷贝AndroidManfest.xml、res文件夹到 Plugins\Android下面
    9. Unity新建Android.cs文件,并写接入脚本(脚本文件可随便起)
    10. Unity打包apk 真机测试–PC下运行需要写条件编译,Android的方法调用会报错的。

    以防万一,rar打开jar包看路径是否是Package的顺序。

     

    Unity3D调用Android public函数

    • AndroidJavaClass
    • AndroidJavaObject
    • AndroidJavaProxy

    系统提供了这3个函数,且都有源码demo,直接查询Unity3D官方手册即可。

     

    Android回调Unity3D

    方式1:UnityPlayer.UnitySendMessage("Android","onReceiveByUnitySendMessage", data);

    参数 “Android”:Unity3D的GameObject名字

    参数“onReceiveByUnitySendMessage”: GameObject下面一个public函数,带string传入参数

    参数 data: string类型的数据,会传入到onReceiveByUnitySendMessage函数中。

    方式2:Android的interface

    在Android中实现一个interface; 然后在Unity3D中实现这个interface的子类;Unity调用Android的时候传递子类实例过去,则Android可以回调之。

    package com.xifarm.unity3dPlugins;

    public interface ExDataListener {

    public void onReceive(String data);

    }

     

    public class ExDataListenerCallback : AndroidJavaProxy

    {

    private AndroidTest mMain= null;

    public ExDataListenerCallback(AndroidTest main)

    : base("com.xifarm.unity3dPlugins.ExDataListener")

    {

        mMain = main;

    }

    public void onReceive(String data)

    {

    mMain.onReceive(data);

    }

    }

     

    最后,在接入某个特定的Android SDK,如微信、移动MM,请务必牢记:

    1. 熟悉官方的网站
    2. 熟悉官方的SDK
    3. 熟悉官方的文档
    4. 熟悉官方的示例
    5. 熟悉官方的支持

    尤其在上网找资料前(特别是百度),官方的资源基本可以解决90%的问题,无他,做为官方,这帮人是最专业,也是最系统的对待自己产品的—-这个是我在担任GCDN版主的感悟。

     

    本文的源码在Git上:http://git.oschina.net/xifarm/Unity3DPlugins

    Unity3D项目实战笔记(3):Android系统的AndroidManifest.xml && Activity

    在接入Android SDK的时候,了解了Android多线程后, 我们来了解一下AndroidManifest.xml 和Activitiy.

    在Android开发中,无main函数,这个让C\C++\C#程序员不太适应,但是Android提供了Main的入口的,这个就是配置AndroidManifest.xml。

     

    • AndroidManifest.xml

      权威的AndroidManifest.xml请直接看Google官方文档,非常详细和及时。

    image  Unity3D项目实战笔记(3):Android系统的AndroidManifest.xml && Activity image thumb

     

    其中在开发Android SDk接入,需要配置 android:configChanges–keyboard|keyboardHidden|screenSize|orientation。 即当屏幕翻转等变化后,Activity不会“死掉”,会调用Activity.onConfigurationChanged() 方法.

    另外,jar包中的activity,都是需要在AndroidManifest.xml声明的。

    其中这个属性比较重要  android:launchMode(Activity加载模式)

    在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。这需要为Activity配置特定的加载模式,而不是使用默认的加载模式

    Activity有四种加载模式:

    • standard (默认)
    • singleTop
    • singleTask
    • singleInstance

    standard:就是intent将发送给新的实例,所以每次跳转都会生成新的activity。

    singleTop:也是发送新的实例,但不同standard的一点是,在请求的Activity正好位于栈顶时(配置成singleTop的Activity),不会构造新的实例

    singleTask:和后面的singleInstance都只创建一个实例,当intent到来,需要创建设置为singleTask的Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。

    singleInstance:

    首先说明一下task这个概念,Task可以认为是一个栈,可放入多个Activity。比如启动一个应用,那么Android就创建了一个Task,然后启动这个应用的入口Activity,那在它的界面上调用其他的Activity也只是在这个task里面。

    • Activity

      Activity概念,可以简述为用户可见的一个大视图的主布局框架,在Android中,每次只能看到一个Activity,两个Activity切换会采用Task任务栈方式调度。

      Activity的生命周期

    image  Unity3D项目实战笔记(3):Android系统的AndroidManifest.xml && Activity image thumb1

      奇怪的是Android屏幕旋转,也是需要销毁Activity的,故需要预先存储、加载数据的。
      为了实现outlook左右布局,左侧导航+右侧切换视图效果,需要用到FrageMentActivity子类。
        最后,在Activity之间通信,有2种办法:
        显示Intent

      //显示方式声明Intent,直接启动SecondActivity

      Intent it = new Intent(MainActivity.this,SecondActivity.class);

      //启动Activity

      startActivity(it);

        隐式Intent

      // 实例化Intent

      Intent it = new Intent();

      //设置Intent的Action属性

      it.setAction("com.android.activity.MY_ACTION");

      // 启动Activity

      startActivity(it);

      隐式Intent之所以设置Action后,即可找到可能的Activity,是因为Activity的intent-filter属性对外公开了其可以处理的Action。如系统默认的拨打电话、播放音乐等Activity等。

      image  Unity3D项目实战笔记(3):Android系统的AndroidManifest.xml && Activity image thumb2

      Unity3D项目实战笔记(2):Android系统的多线程

      书到用时方恨少!

      《Android编程权威指南》去年翻了半个月,仅仅看了前几章。

      产出是: 自己搭建了Android的开发环境、照着书写了几个Hello World的App,并发布到Android真机上、而最有纪念意义的就是产出了3篇博客:

      随后一年,这本Android开发的宝典落了一层灰!

      最近,手游项目中要用到Android SDK接入的技能,才恍然发现需要补补Android的基础知识,随即翻看了3篇博客,而后打开尘封已久的宝典,又“挑灯夜战”:晚上下班后,匆匆扒两口饭就翻书学习、记笔记;第二天在工作中用于实践。 自我感觉,挺好的。

      有目的的学习,威力无穷也!

      本文就Android多线程进行笔记整理之。

      Android系统中,主线程(UI线程)不能访问网络,如果违规这么干,则app会很有可能Crash的,我遇到了多次,故多线程是必须要掌握的一项Android技能。

       

      Android的多线程分3个:
      • 短时间运行的 AsyncTask

        AsyncTask可定义在主线程内,是一种最简单的Android多线程实现方法,可在AsyncTask内调用UI主线程函数。

      可通过如下代码定义AsyncTask,其中@Override的函数是AsyncTask预定义好的,直接重载即可。

      public class aaa extends AsyncTask<P1, P2, P3>  //P1是Input参数,P2是更新用,P3是Output参数

      {

          @Override P3 doInBackground(P1) //子线程的核心逻辑函数

          @Override OnPostExecute(P3);   //线程处理完毕后收尾函数,可访问主线程

          @Override OnProgressUpdate(P2); //可访问主线程,一般用于如更新ProgressBar状态等

      }

       

      取消AsyncTask用Cancel(bool)

       

      在主线程中,启动线程用这行代码:

      new aaa().Execute().

      • 专用后台线程 HandlerThread

        HandlerThread是Android系统提供的主要后台线程, 相对简单的AsyncTask,HandlerThread涉及到了Message、Looper、Handler、Queue概念。

        Looper扮演着一个Handler和消息队列之间通讯桥梁的角色。程序组件首先通过Handler把消息传递给Looper,Looper把消息放入队列。 Looper也把消息队列里的消息广播给所有的Handler,Handler接受到消息后调用handleMessage进行处理。

      Looper.myLooper();获得当前的Looper

      Looper.getMainLooper () 获得UI线程的Lopper

       

      • 简单的线程 runOnUiThread(Runnable)

      activity.runOnUiThread(new Runnable()

      {
      @Override public void run()

      { // TODO Auto-generated method stub

      int i = 30; textView.setText(""+i+" s");

      } } });

      荣获2015微软.NET MVP称号!

      引子

      2015.7.2 早晨上班,得知获得微软2015年 .NET MVP.

      确确实实的,小小激动了一个上午!

      • 终于可以使用正版Visual Studio 软件了
      • 终于可以使用正版Office软件了
      • 终于可以使用正版Windows 操作系统了。
        12天后,从微软美国总部快递到西安的MVP证书和奖杯到了:

      image  荣获2015微软.NET MVP称号! image thumb1

       

      image  荣获2015微软.NET MVP称号! image thumb2

      而此刻,距离我离开市场团队,重返研发团队,刚1个月。

       

      故,些许心得和感想,一并成文:

            记得刚入行做.net开发,那个时候MVP的含金量很高,对找工作具有非常关键的加分项。故,很多年,我个人一直对MVP非常的敬仰,没有想到多年后,我竟然申请通过了。周围一个朋友(原来也是资深.NET, 目前转行做Android了,他说“没有想到,我身边也有1个MVP啊,哈哈。”)。— 可惜的是,目前的环境下,找工作,MVP貌似已经过气了 微笑  荣获2015微软.NET MVP称号! wlEmoticon smile

       

      以往做.net开发的点点滴滴,请参见前年写过3篇总结的博客:

      我新的工作,虽然不是专门开发微软平台的技术,但也会使用微软的Visual Studio 2013开发工具, C#.NET编程语言,故,微软相关的技术,依旧会占我日常约50%比重。

        新的工作,和以前的业务截然不同,但是软件开发的流程和理念是可以复用的,如同《士兵突击》里面说的,对于一个士兵而言,“上膛、瞄准、射击”,这些深入骨髓的东西,是不会忘的,唯一不同的是当年新入行,周围80年的人多; 而如今,85后已经担当主力,紧随其后的90后已经崭露头角了。
          下面就最近几个月非技术的一些思考,分享出来:

         

        团队分拨

        在IT团队,无论大小,按照日程工作对内、对外的主要沟通方式、工作地点等,可分服务团队和研发团队。

        image  荣获2015微软.NET MVP称号! image thumb3

        • 服务团队:含市场、销售、运营、服务、工程岗位,主要是对外沟通,必要时候需要定点驻守用户现场。
        • 研发团队:含软件开发、需求、测试、美工等岗位,主要是对内沟通,一般集中在总部办公。
          我过去的工作经历,大部分经验是在研发团队养成的,故内部沟通多一些,而对非研发的团队了解的少一些,有时候交流中不够耐心,对服务岗位颇有不解。而去年在市场、服务团队工作1年多,结合实战经验–和用户直接沟通多次后才发现,服务团队,更要有胸怀和忍耐力. 一个曾经在服务的同事自嘲—“用户虐我千百遍,我待用户如初恋”。  服务团队工作性质,可见一斑。
          研发团队中,尤以软件开发团队的程序员最桀骜难驯,年纪轻轻的,年薪10万的比比皆是,且业内猎头虎视眈眈,故靠谱的程序员很难管理和沟通,不过,也有一些法则能够“无冕则王”—只要你技能过硬、勇担重任,则往往威望会升的很快。

          研发的流程

          研发团队的多个工种,虽然日常工作共处一地,但是细细说来,也破费笔墨的。

          对软件角色而言,输入是美术提供的素材、需求的文档、以及自己的技能灵感。产出则比较简单,一个可运行的软件,文档是辅助产出。

          对需求角色而言,输入是用户的需求,(有时候是甲方的合同和规范),主要产出物为需求文档,

          image  荣获2015微软.NET MVP称号! image thumb4

           

           

          下面这个流程是我依据实际项目裁剪的,少了很多环节。

          其中最最重要的是使得项目干系人沟通、沟通、沟通,从而为产出一个可运行的软件万众一心。

           

          image  荣获2015微软.NET MVP称号! image thumb5

           

          可能对2、3个人的小作坊而言,流程不是很重要;但是要开个大店,想往大的做,越早的梳理流程,且日积月累,这个将来会增值的。

           

          记得早期刚入行那会,3~5个人开发,原型产品是国外知名的软件,我们就“山寨”之,照猫画虎,开始一个阶段忙的很,后来大部分时间不忙,就穷开心的搞框架、重构代码,如Chat视图,我记得我自己都手刃了7个不同的版本,学到了非常多的设计、框架的知识,影响至今。个人技能虽然增加了不少,但对组织而言,却很少有组织财富,因为那个时候大家的共识—对小团队而言,流程这玩意很鸡肋。

          而后,团队规模急速扩大了3倍,但是,文档模板没有,流程没有—准确的说,包括我在内的大部分人很“土包子”,不懂这些是何物。 故15个人做项目,还不如5个人做的好,做得挺不爽的:忙中有盲也。

          其后3年,公司关门了。

           

          研发的纪律

          image  荣获2015微软.NET MVP称号! image thumb6

           

          作为一名老程序员,再熟悉不过程序员的秉性了:看别人代码希望有详细的注释、自己写代码很少写注释。

          研发中的每项纪律,拿出来说事,都显得吹毛求疵一般,但是往往“千里之堤毁于蚁穴”—编码规范、研发流程、checklist等的忽视,导致基本问题日积月累,尾大不掉。

           

          最爱看的一部电影:《角斗士》带兵的一句重要的纪律是—“Hold the line, stay with me”.

          极为简洁,但很实用

          image  荣获2015微软.NET MVP称号! image thumb7

           

          附录:什么是微软MVP?

          MVP(Most Valuable Professionals,最有价值专家)是指具备一种或多种微软技术专业知识,并且积极参与在线或离线的社群活动,经常与其他专业人士分享知识和专业技能,受人尊敬、信任,而且平易近人的专家。微软对上述专家在技术社群专业贡献的一种正式认同。

          image  荣获2015微软.NET MVP称号! image thumb8

          MVP正是这样一群拥有丰富知识和实际经验并乐于分享所学知识的微软技术专家。他们不是微软的员工,但是非常乐于通过在线或离线社区的方式帮助技术人士。

          在全球90多个国家拥有接近4000多位最有价值专家,而中国大概有250位,这个是以一年为任期的人数,包括成功连任的和新当选的MVP人数,也称为活跃MVP人数,一年有4次申请MVP的机会,所以平均下来,在中国每一期MVP人数大概为50人左右(包括连任的新当选的)。

          10年微软MVP路(如何成为一个MVP?)

           

          为什么本次我能获得MVP?

          本次能获得MVP,充分肯定了技术积累+市场运作==好的产出

          Unity3D项目实战笔记(1):prefab的插件方式

          大家好,从这篇开始,Unity3D新的系列博客开始了:《Unity3D项目实战笔记》。

          主要就项目中用到的技术和难点整理为博客笔记。欢迎大家拍砖。

           

          对于软件项目,解耦合的插件架构设计很重要:

          一是方便多人协同工作,以提高沟通能力,减少单兵种作战的孤独。

          二是为了里程碑的产出,以使得软件有节奏的进行构建。

          三是为了维护方便。

          同理,Unity3D项目也有自己内置的“插件”来进行解耦合设计。它就是prefab东东—我在开始自学Unity3D的时候,并未对prefab深以为然,仅仅看到NGUI大量提供了prefab的图集和控件;而在实战项目中,我们也用到大量的prefab。

          此处省去制作prefab的若干字,有兴趣的读者,可看看2年前雨松的博客:《研究院之预设的使用细节(五十一)。

          prefab动态加载

          在编辑器中,拖入prefab即可加载到场景中。而在实际使用的时候,动态加载是更常用的功能–需要把把prefab放到Resources文件夹下(多深的文件夹都可以的)

          prefab = (GameObject)UnityEngine.Object.Instantiate(Resources.Load("ball")); 

          这样的话,在开发阶段,可个人负责一个prefab的UI界面、代码逻辑,然后再按照目录存放好prefab。还是动态加载的方式,还是挺方便的。

          prefab动态定位

          实现了动态加载prefab后,有一个刚需问题就是动态的定位了。例如

          image  Unity3D项目实战笔记(1):prefab的插件方式 image thumb

          a.prefab被加载到了A的子节点下面,要使得a显示b点位置,一个办法是把a挂接到B下; 另外一个办法是用transform提供的2个方法,转换局部坐标为世界坐标,实现动态定位。

                  //
                  // Summary:
                  //     Transforms position from local space to world space.
                  public Vector3 TransformPoint(Vector3 position);

           

                  //
                  // Summary:
                  //     Transforms position from world space to local space. The opposite of Transform.TransformPoint.
                  public Vector3 InverseTransformPoint(Vector3 position);

          如:

          Vector3 pos = A.transform.TransformPoint(a.localPostion);

          b.localpostion = B.transform.InverseTransformPoint(pos);

          动态定位非常容易的。

           

          prefab注意事项

          !!! prefab要注意勤保存文件,如制作一个prefab花了30分钟,那么正常关闭unity3d,不妨喝水休息一下,我最近连续2周,已经丢了超过3个prefab—-Unity3D的一个bug,当不正常关闭Unity3D后,就会导致正在编辑的prefab不可用(unity3D在调试过程中,偶尔会死机,导致通过进程杀掉它)

          C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》

          在上篇博客中,简单整理了一下Unity Native 2D功能:《C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D》. 本文开始学习2D商用比较广泛的2D Toolkit插件.

          2D Toolkit插件在2D中的地位,犹如UI中NGUI对Unity GUI一样:虽然官方原生的2D还不错,但这是最近1年新版本才有的功能,2年前Unity 2D的王道还是得用插件的,故《2D Toolkit》就成了目前商业不错的选择。

          在上周刚开始看的时候,就给自己提了3个问题 (1周后,自己给自己尝试做了回答):

          1. 2D Toolkit是类似NGUI的东西吗?

            答:是的,类似NGUI;2D toolkit是第三方插件,广泛用于2D的游戏开发;其还包括了UI,可不用NGUI就能进行不错的UI开发。

          2. 对比Unity Native 2D,2D Toolkit是否优势已经丧失;或者是类似UGUI和NGUI关系?

            答:这个目前不得知。 粗浅的看,Unity Native 2D比较简单,开发起来便捷,毕竟和Unity无缝集成的,且原生,另外还省钱;但是2D Toolkit都演变到2.5.2版本了,商用应该比较成熟,如其tk2dCamera简直无敌了–能自适应各种屏幕、大大节约了编码。

          3. 2D Toolkit能够和Unity Native 2D同存否?

          答:目前不知道。应该可以吧,2D toolkit已经于2015.5.24 发布2.5.2版本,声明支持Unity 5了。

           

          2D ToolKit简历

          2D ToolKit是第三方2D插件,能处理图集打包(Atlas Package)、精灵渲染(Sprite)、2D动画(Sprite Animator)、2D UI,目前中文资料少得可怜。

          2D Toolkit简称为TK2D,其功能据说是2D下最强大的,assetstore的下载点评竟然超过1200个,这个数据非常惊人,要知道售价价格要75美金呢。其插件提供了C#代码,源码之内,了无秘密。

          TK2D的厂家是Unikron Software Ltd,官方网站为http://unikronsoftware.com

          TK2D在assetstore的”编辑器扩充/2D与图片管理”分类下,排名第一

          image  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 image thumb34

          我摘录了部分官方官网assetStore点评:

          low draw calls

          pixel perfect camera:Unity 4.6 pro sprite package

          get a response with 24 hours

          manages multiple resolutions of sprite images (1x, 2x, 4x)

          Very nice package

          greatly sped up my animating process.

          really streamlined my workflow.

          organise all your sprites how you like in collections.

          It’s fast at updating and rendering too.– opitimization

          The best support、comunity

          other:spline、NGUI

          其点评大多集中在以下几个方便

          • 降低了DC
          • 正版的售后服务好
          • 图集打包很爽
          • 2D下效率高

          正文开始–本文就官方教程《Whack a Mole》进行小结:

          注:因为官方问答截图、文字描写清楚,我这里为节约大家时间,不会写的很细,请先预览一下官方教程。

          官方提供的Whack a Mole 材质下载地址

           

          步骤1:了解官方文档对TK2D做的系统概括:

          1. Tk2D在编辑期间生成脚本–Assets目录
          2. Tk2D运行脚本生成对象–场景

          image  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 image thumb35

              上面这张图包含了TK2D的7个知识点 (术语) 的6个(除了Tilemaps外)
            • Sprite Collections: 精灵(2D下的图片)集合,用于组织图片,一般同z轴值的放在一起,效率高。
            • Sprites:精灵,任何需要在Scene显示的均需要精灵组件,目前包含4种Sprite

            image  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 image thumb36

            • Static Sprite Batcher:静态化精灵–不参与碰撞的,可明显减少DC
            • Sprite Animations:动画精灵
            • Fonts:字体
            • Text Meshes:显示文本
            • Tilemaps

                  步骤2:tk2d camera 自动布局的摄像机

                  删除新建Unity 2D工程的Main Camera,添加tk2dCamera,并设置tag为“Main Camera”。

                image  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 image thumb37

                    修改tk2dCamera参数如下:

                  image  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 image thumb38

                1. Native Resolution :1024*768
                2. Projection:Orthographic
                3. Type:Pixels Per Meter
                4. Pixels Per Meter:1
                5. Origin:Bottom Left
                    例如:

                  pixel per meter – so 100×100 world units = 100×100 pixels from the bottom left

                      tk2dCamera实际上是对Unity的Camera进行了扩展,这里有详细的对比说明和tip技巧。

                        步骤3:精灵集合(Sprite Collections)、精灵(Sprite )、静态精灵批处理(Static Sprite Batcher)

                      要使用图片,则需要首先添加Sprite Collections,它有3个作用:

                      1 把图片组织管理起来–如果你有上百个图片就会发现它的价值。

                      2 同z轴的组织起来,方便Unity引擎优化降低DC

                      3 自动进行图集打包–减少图片占用空间
                        为什么要用Sprite Collection? 我认为比Unity Native 2D的默认能生成精灵而言,多了2个步骤。

                      img/spritecollection.png  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 spritecollection

                          要添加精灵,需要先Check out–如我这里使用Perforce源码管理。

                        image  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 image thumb39

                            添加精灵很简单,选择、拖放即可:

                          img/spritecollection_drag.png  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 spritecollection drag

                              针对当前Sprite Collection,进行Settings,然后一定要记得Commit:

                            image  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 image thumb40

                                注意:这里的Size和Pixels Per Meter,需要和上面的tk2DCamera保障一致。
                                  Settings最下面有Platforms的设置,这个我没有看明白:

                                image  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 image thumb41

                                    网上搜了一段代码,好像是为了适应不同屏幕的全局设置:

                                  image  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 image thumb42

                                      点击Commit后,就生成1了文件夹,包含3个文件:*.prefab 、*.png、*.mat。

                                    image  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 image thumb43

                                        使用Sprite就简单多了,添加Tk2D Sprite对象或者添加TK2D Sprite组件,选择Collection和Sprite即可:

                                      image  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 image thumb44

                                          如果有n个Sprite,需要组织管理起来,默认会想到空的对象(EGO), 如果不参与碰撞等动态监测,可使用Static Sprite Batcher。 选择需要静态化的Sprite,拖放为Batcher的子物体,在Inspator视图点击Commit,即可完成处理。
                                            有2点神奇之处:

                                            1 原来n个Sprite变为1个了,即仅仅是Static Sprite Batcher可见,其子物体消失了(点击Edit即可编辑)

                                            2 明显的减少了DC。

                                          image  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 image thumb45image  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 image thumb46

                                          步骤4: 代码实现 Clipped Sprite

                                              Clipped Sprite是Sprite的一种,可动态实现隐藏、可见。
                                              image  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 image thumb47
                                                  通过动态设置Clipped Sprite的ClipRect的y值(y值范围0.0~1.0f之间)
                                                  同时调整其localPostion的y轴,可模拟图片的隐藏、显示效果。
                                                另外,这个思想也挺有趣的,使用n个return null代替waitforSecond.

                                              private IEnumerator WaitForHit()
                                                      {
                                                          float time = 0.0f;

                                                          while (!whacked && time < timeLimit)
                                                          {
                                                              time += Time.deltaTime;
                                                              yield return null;
                                                          }
                                                      }

                                                步骤5:精灵动画(Sprite Animation)

                                              Sprite Animation也是基于Sprite Collection的。

                                            img/clip_settings.png  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 clip settings

                                           

                                          显示动画,需要用Sprite With Animator组件,下面这张图一览无余:

                                          img/animated_sprite_inspector.png  C#程序员整理的Unity 3D笔记(二十):2D Toolkit之官方教程《Whack a Mole》 animated sprite inspector

                                           

                                          本文的整理到这里就结束了,完整的请参阅官方教程–《Whack a Mole

                                           

                                          注,本文使用的开发环境:

                                          • Unity 4.6.3
                                          • 2D toolkit 2.4.0

                                          《源创会.西安》 再次回归,赞!

                                          免责声明:

                                          本文是个人随笔,官方的报道请点击链接《西安源创会高清无码图文报道 —— 妹纸无处不在!

                                           

                                          期盼很久很久的源创会,昨天在西安如期举行。 我很高兴,也非常乐意志愿其中。之所以有这个期盼,是缘于我2014年7月23日注册的账号,当时是为了“抢夺”开源中国.西安圈子管理员(因为我当时负责运营公司的在开源中国的一个大号),@红薯说 管理员不能交给公司来打理,故我就迅猛的注册了个人账号,参与到西安圈子管理员的“竞争”中。

                                          image  《源创会.西安》 再次回归,赞! image thumb18

                                          实际上,我个人不是开源技术的重度爱好者,也不是开源技术的布道者,只所以有兴趣,是因为 在开源社区,觉得 @红薯、@永和 @阿娇OSC 很有趣:好玩、草根–没有国内***社区们高高在上的架子,愿意和粉丝们交朋友、互动聊天,如此而已。我个人开源社区账号,仅有14个积分,大多是转载个人博客、公司博客文章赚的,故在西安开源圈子,我不是那么的德高望重。

                                           

                                          下面说一点近一年,和开源社区.西安有关的小事:

                                          自打“上任”开源中国.西安圈管理员后,能够使得西安再次举行一次源创会,完成这个西安全体OSCer们的共同心愿,一直在忙乎。

                                          要知道:

                                          • 西安是红薯老人家初恋的城市–他的大学四年是在西工大渡过的。
                                          • 西安是开源中国最早一批参与线下活动的城市《【高清图】OSC源创会(西安)图文总结
                                          • 西安是红薯担任升降国旗的舵手的发迹城市。

                                          红薯原话:俺老人家当年就在此处充当护旗手,每周一上午和周五下午负责升降国旗。

                                          image  《源创会.西安》 再次回归,赞! image thumb19

                                           

                                          但是,多种原因,在重要的2013年、2014 年源创会在国内一线大城市如火如荼举行的时候,西安被静悄悄的“遗忘”了,西安圈子前管理员也去深圳创业了,甚至西安圈子也一度没有管理员。

                                          另外,2014年初时的西安圈子,人刚满1000;我们隔壁的成都都已经近2000成员了。

                                          image  《源创会.西安》 再次回归,赞! image thumb21

                                           

                                          在这个空档期间,我很荣幸的接过了老一辈管理员的删贴大权。

                                          故,新官上任三把火,火急火燎的召开首次组阁聚会、组织活动、开源会议等等。

                                           

                                          第一把火:开源网友见面会.大唐西市某咖啡厅

                                          image  《源创会.西安》 再次回归,赞! image thumb22

                                          组建了一个QQ群,有事没事扯扯淡,谈谈理想、妹子啥的。后来多亏这个QQ群,聚集起了第一批星星之火。所幸,参与的小伙伴很支持,如虽然才3个线上报名的,也如期举行了活动(实到约7个人,聊了2个小时,主要是破冰和工作介绍等轻松话题)。

                                          现在依稀记得讨论的2个要点:

                                          • 最低纲领:约3个月,举行一次技术活动,见面交流交流。
                                          • 最高纲领:争取2015年 源创会 重返 西安。

                                          当时是,@红薯 老人家还很费解呢:

                                          image  《源创会.西安》 再次回归,赞! image thumb23

                                           

                                            下面是支持的声音:

                                          image  《源创会.西安》 再次回归,赞! image thumb24

                                           

                                          image  《源创会.西安》 再次回归,赞! image thumb25

                                          西安开源圈子,御用签到师–王丹女神。

                                           

                                          第二把火:强强联手-组织活动

                                          image  《源创会.西安》 再次回归,赞! image thumb26

                                          组织活动三要素:场地、讲师、茶歇。

                                          • 因为我在葡萄城,故申请了公司1F 高、大、上的场地。
                                          • 因为我是InfoQ编辑,故联合InfoQ线下品牌QCon。 InfoQ同时也提供了讲师和茶歇费用。
                                          • 因为我是OpenParty西安组织者其一,故联合了OpenParty组织者和社区人气,一起策划了本次活动。(备注:西安OpenParty是西安成立了约6年+的一个程序员公益线下技术沙龙,不定期举行技术分享)

                                          但因为活动主要是由OSChina发起报名的,故参加活动的超过60%是开源社区的小伙伴,也有很多朋友认为这是一次开源技术活动,那就算吧。在此次活动中,我担任主持人,且第一次公开了开源中国.西安圈子管理员的角色。

                                          在除工作外的超过90人的场合公开亮相,我还真的紧张了:语无伦次、脊背发汗、战战兢兢的。

                                           

                                          第三把火:华为开源技术开放日

                                          image  《源创会.西安》 再次回归,赞! image thumb27

                                          华为开源的战略,对国内开源圈,具有极为重要的信号:开源大势,挡者亡,顺者昌!

                                          且以华为在西安的布局,对西安开源圈子也非常重要,故2015年伊始,华为的广卫兄就强势入驻西安圈子管理员,连我都没有被事先通知,史称“开源双*”— 这个惊喜的确够劲!

                                          image  《源创会.西安》 再次回归,赞! image thumb28

                                          参加活动的当天,报名人很多,但是天气很糟糕,还担心人不来呢。 结果人满满的(80人+),讲师干货多多的,首次出现了活动现场,零食、点心竟然剩余了这么多。。。

                                          本次活动:场地由华为提供、茶歇由华为找合作伙伴提供、话题由华为开源战略规划的研究员们提供–这些人不是一般研究研究就算了,都是在业界很有影响力的大牛们。

                                          华为在西安的影响力,可见一斑。


                                          通过这3次有组织、有预谋的活动参与,某种意义使得开源中国的高层逐渐重视起西安社区力量了。

                                          故,在2014年底,无意间当我翻到2015年源创会行程安排的时候:源创会.西安 2015.5.23号

                                          我第一时间告诉了开源西安的小伙伴们,大家顿时高兴坏了—-We  do it


                                          下面以个人视角,记录一些昨天活动的花絮:

                                          OSC特色一:女神当“女汉子”用

                                          image  《源创会.西安》 再次回归,赞! image thumb29

                                          这张图来源于 @阿娇@OSC 的朋友圈,我这里说花絮的是那天早晨,2个妹子的故事:

                                          5.23号上午10点,我如约去OSC下榻的宾馆接客,去拉礼品、X展架等包裹。到了宾馆门口,我电话阿娇–素未蒙面,但是电话、邮件次数较多。阿娇和文洁已经在宾馆门口等待多时了,初次见到漂亮的妹子,我还是很惊讶了,其本人比照片上好看多了。我说,不会吧,就你们2个女神负责搬东西? 阿娇爽朗的说,习惯啦,一向是我们。

                                          话音刚落,高跟鞋噔噔地就开工了:从搬包裹、布置会场,女神们真的当女汉子用了。

                                          赞一个吧。

                                           

                                          OSC特色2:美女编辑当“保洁”用

                                          image  《源创会.西安》 再次回归,赞! image thumb30

                                          @叶秀兰 我在OSC认识比较早了,她负责开源新闻编辑、博客审阅、开源软件校对等文案工作;本次也是初次见面,其轻巧玲珑的身影,在会务组织、签到中发挥了主人翁的作用。

                                          昨天,我和她配合较多一项工作–负责披萨的善后工作,其拖地、扫地这些家务活的手法娴熟、技艺高超,好像不是第一次干这些工作。 秀兰话不太多,只是专心的做好的本职工作,并尽可能的帮助团队前进。

                                          我为我的同行—女编辑,点赞。

                                           

                                          OSC特色3:明星代言人–红薯

                                          image  《源创会.西安》 再次回归,赞! image thumb31

                                          我不知道大家是否有同感,在国内技术社区,能够这么平易近人的和一个社区创始人愉快的合影、免费的m、调侃社区江湖、拿起樱桃、杏子肆无忌惮的大嚼吞咽,社区创始人们除了 @红薯, 再无他人能够如此坦诚。 要知道,开源中国已经很大了,其2008年8月就成立了,目前已经是一家超过40人互联网+ 科技公司,

                                          开源中国社区注册用户超过130万– 红薯亲口说。

                                          哪一天,开源中国上市了,这,也不是不可能的事情。但是,@红薯还是这么的拼,这么的卖萌,不为其他,就图OSCer开心。   

                                          小小的遗憾:本来前一天在朋友圈看到 @红薯 感冒了,合影一次倒贴10元,兴冲冲的大早跑过去;没有想到,红薯的感冒竟然好了很多,故,合影还是原价–100元/人次。  (呵呵,开个玩笑,合影免费,且可免费m)

                                           

                                          OSC特色4:高颜值的COO-永和大王

                                          image  《源创会.西安》 再次回归,赞! image thumb32

                                          广东人,我的印象中,颜值一般。

                                          因为我大学和工作中有2个广东.茂名的朋友,他们2个黑黑的皮肤,我自认为,我比较白。 当见到 @永和 真人,我才知道,我和广大 OSC一样,被蒙了,哪里是 @红薯 最帅,明明是永和嘛!  不知道 @红薯 看到这里,会不会一怒就把我西安圈子删贴的权限给取消了,微笑  《源创会.西安》 再次回归,赞! wlEmoticon smile

                                          @永和 负责的事情对外多一些。我去年下半年,代表公司和开源中国业务沟通,90%是和他本人电话、邮件沟通合作的。 

                                          恭喜永和升级,当爹了,小公主是个美女。

                                          @永和 心里想着OSCer,看到我在帮忙布置签到会场,就悄悄对我说,“我一会主持会议,你有何诉求我能再帮你的。” 我说不用了,本次公司未参与商务合作,因为我个人帮点小忙,竟然线上给公司logo链接,线下让通过X展架宣传,真的谢谢 @永和 的用心良苦。

                                           

                                          好,广告时间到。

                                           

                                          公司宣传的X展架–文字最多、头像最多、人气最旺!

                                          image  《源创会.西安》 再次回归,赞! image thumb33

                                          这个X展架是2个月前,为了配合公司的大学生程序设计大赛,紧急赶制出来的–还没有从流水线上下来,HR部门就要用。 这次设计,一反常态,突出人文情怀和企业文化—X展架中的人物拍照,是公司年度例行的team photo,具有非常重要的纪念意义。 在本次活动中,相对其他云、互联网公司的展架,是唯一一个基地在西安的公司,故比较受西安开源社区的瞩目,我大西安竟然有本地公司参与。


                                          关于我个人:

                                          我不是社会活动家,我是一个严肃、职业的软件工程师;因为热心在团队中布道,故很早就开始在研发team中负责带队、项目管理; 自从2013年从研发团队退役后,从事了市场、社区工作 (博客宣传、活动策划、市场推广等), 加之外企工作比较轻松, 故有了大把大把的业余时间,我个人也没有特殊嗜好,故有时间就会游玩于西安大大小小的IT技术圈子 —– 分享技术、组织活动、连接朋友。

                                          (在生人面前比较腼腆,不会露出爱吹牛本色,一般会默默的倾听)  微笑  《源创会.西安》 再次回归,赞! wlEmoticon smile

                                          5篇非技术的博客,和我有关的:

                                          预告:2015.6 《王者归来》

                                          用了近2年的时间思考,我做了严谨的论证:重操旧业,回归研发团队。

                                          在我职业人生的第二个10年伊始,选择了一个新的行业,以归零的心态,从程序员做起。

                                          我用过的源码管理工具们(SCM)

                                          源码管理工具是什么? 这个问题对研发中的兄弟姐妹而语,是天天使用,用来吃饭的东西嘛:

                                          代码管理、协作开发、代码合并、代码分支、代码标签、代码比较、版本化工具。。。。。。

                                          故,源码管理工具有很多产品(svn, cvs, hg, git 等),其功能类似,各有特色。

                                          结合个人所使用过的SCM,我简单小结一下:

                                            1. 他是一种文件管理系统
                                            2. 他是研发团队交流的重要契约
                                            3. 他是队员彼此信任的核心之一
                                            4. 他是你取得进步的见证者之一
                                            5. 他是你觉得不孤独的利器之一
                                            6. 下面就我个人使用的源码管理工具列举一下,有些流水账,各位请继续忍忍:

                                          • VSS:2005年

                                          • 我最早使用的一个源码管理工具,VSS全程是Visual SourceSafe,其属于微软的一款产品。但是刚从一名工人自学编程,进入研发团队,还觉得挺难的:团队协作、checkIn、CheckOut等概念,那个时候,还不太理解做这些事情到底是为什么。

                                            VSS最大的一个特点就是可以和开发环境Visual Studio进行无缝结合,我记得2005年我用的Visual Studio 是2005版本, .Net 1.1框架。 网上找了个图片,记忆中的VSS的界面大概是这个样子的,中规中矩的WindowForm风格:

                                          image  我用过的源码管理工具们(SCM) image thumb7

                                           

                                          • TFS:2006年

                                          • 团队发展到一个新的阶段,人多了起来,需要提 bug,需要提 需求, 需要分配任务,这个时候为了复用已有的VS技能,故升级到了VS完美结合的TFS(Team Foundation Server,这个也是微软出品的)。其功能强大:完整的软件生命周期工具、支持敏捷开发、可配置自定义查询、可定制Daily Builder等功能。

                                          截图如下,我现在还记得TFS有一个很重要的特性是有lock功能,只能独占编辑。当时公司的SCM在内网搭建,外网无法访问,我们出差去保定,只能手工选择文件为可编辑,修改完毕后,等回公司后,再花1天时间合并、提交代码。

                                          image  我用过的源码管理工具们(SCM) image thumb8

                                           

                                          • SVN:2009年

                                          • SVN(Subversion) ,是一个开源软件,崛起的速度很快,好像是 CVS(Concurrent Version System)的替代和升级版本。SVN起来的一个很重要原因是自由软件开发的协作网如SourceForge.net提供了SVN的访问方式。很大程度上,我对SVN熟悉是从一个乌龟的logo开始的:

                                          image  我用过的源码管理工具们(SCM) image thumb9

                                           

                                          SVN截图如下,完美的和Windows文件系统集成,SVN会非常方便进行源码管理:更新、提交很方便;其处理代码冲突也非常方便编辑。

                                          image  我用过的源码管理工具们(SCM) image thumb10

                                           

                                          • Git:2014年

                                          自打离开研发队伍后,业余玩点代码,没有源码托管的可真难受啊。

                                          又懒得自己搭建源码服务器,开始尝试了微软的TFS Online,但是,网速那个慢,无法忍受。当看到国内Git免费托管盛行,就学习了Git方式(我用的是非命令行的,还是乌龟的tortoisegit)。所幸,Git到处有,国外著名的是Github(任意多个public的代码库,private收费)和bitbucket (免费提供1个private和任意多个public的代码库)。国内的如https://gitcafe.com/, 以及我最近1年在使用的http://git.oschina.net/–速度快、private免费、可团队协作等。

                                          目测,Git因为是目前最火的、最流行的源码管理工具了吧。

                                          git这么火,不仅仅是其免费、开源;还源于其血统和传奇:Linux创始人Linux Torvalds 花了短短几天写出来的,据说;自那以后,Linux就在Git下进行源码管理,加之,基于Linux的Android火的厉害。

                                          image  我用过的源码管理工具们(SCM) image thumb11  image  我用过的源码管理工具们(SCM) image thumb12

                                           

                                          • Perforce:2015年

                                          • 头次听说Perforce源码管理工具,是看《游戏引擎框架》这本书,听说在游戏行业,用的很多,当时并未走心。第二次听说是li口头告之的, 大名鼎鼎的EA用的就是这个产品,但是还没有反应上来是啥–误以为是performance,用于测软件性能的工具,呵呵。

                                            回家查询了一下,原来Perforce不是默默无名之辈,其是Unity默认支持的文件管理系统之一,使用免费、开源的P4Connect即可在Unity中提及、获取代码。同时Perforce也提供了VS的插件P4VS:P4VS – Perforce Plugin for Visual Studio

                                          花了约1.5天,看了一下官方文档和网友整理的博客《[SCM]软件配置管理》;自己下载Perforce工具–20人以下是免费的,动手在Windows 7上搭建了Perforce服务器。

                                          配置Perforce服务:

                                          image  我用过的源码管理工具们(SCM) image thumb13

                                          在Project视图使用菜单:

                                          image  我用过的源码管理工具们(SCM) image thumb14

                                          不过,有时候,偶尔会有这样的错误,比较恼火:

                                          image  我用过的源码管理工具们(SCM) image thumb15

                                          昨晚处理一个问题:

                                          Client ‘roger.wang_codepiao-PC_5688’ can only be used from host ‘codepiao-PC’.

                                          本地建立workspace,不要指定host:

                                          image  我用过的源码管理工具们(SCM) image thumb16

                                           

                                          对源码管理工具,没有太多个人的喜好,都是团队的协同工具之一。

                                          总之,在概念和操作上大同小异,熟练掌握即可。 对研发而言,天天会用到,无他,唯手熟尔。

                                          如当熟练掌握一种源码管理工具,再要学习新的,1、2天就能上手了。如下图是SVN和Perforce的对比图:

                                          image  我用过的源码管理工具们(SCM) image thumb17

                                           

                                           

                                          同类型的几篇博客链接:

                                          C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D

                                          最早接触Unity是从4.1版本开始,故那个时候只知道Unity 3D,无Unity 2D。近一段时间,通过学习,了解到Unity 2D也是蛮火的。如在最新的Unity 5版本中,新建项目可以选择2D、3D的,且该选项较以往版本更加醒目:仿佛告诉世人Unity不仅仅是3D的,Unity Native 2D也是不错的选择。

                                          image  C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D image thumb

                                          下面就使用过程中,Unity Native 2D一些特有的features整理出来:

                                          1 Unity 2D新建工程不一样

                                          看了一下官方的说明,发现实际上新建项目选择2D、3D不是决定项目的唯一,因为2D、3D还可以工程创建完成后,在Editor下也可以重新选择的。

                                          新建2D项目,和3D项目大约有下面几个区别:

                                          区别1:摄像机投影默认为Orthographic(正交)

                                          image  C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D image4 thumb

                                          区别2:场景视图,默认为2D方式

                                          image  C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D image7 thumb

                                          区别3:Edit—Project Settings—Editor 中默认Mode为2D

                                          image  C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D image10 thumb

                                          区别4:导入(添加)图片资源时,2D的Texture Type为Sprite(2D and UI)

                                          image  C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D image13 thumb

                                          新建工程时候选择2D、3D模式,目前就找到就这4种区别。

                                           

                                          2 Unity 2D特有组件

                                          Unity 2D自从4.3—>4.6—>5.0,增加很多2D组件: 我们发现Unity 5集中提供了15中Physics 2D组件,说明2D、3D的一个重要的区别就是在Physics上。

                                          image  C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D image thumb1

                                          其中,Polygon Collider 2D组件非常棒,它提供了集成可视化调节碰撞盒子,按住Shift键可以添加碰撞点、按住Ctrl键可以删除碰撞点–对不规则Sprite尤为有用

                                          image  C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D image thumb2

                                           

                                          另外,有一个重要的2D组件是Sprite Render,这个是2D下非常重要的组件。

                                          image  C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D image thumb3

                                          Sprite Render是用来对Sprite(精灵)进行渲染的组件,它有2个重要属性:

                                          • Sorting Layer:由小到大排序进行渲染和呈现,大的会遮住小的。
                                          • Order In Layer:同层中渲染的优先级,数字越大渲染优先级越高。

                                          注意,在Unity 2D中,一般不使用Z轴坐标,默认为0.

                                          同样的功能,也可以在3D中使用Z轴由大到小来实现Order–但是相比,没有2D下的Sorting Layer直观。 在Sorting Layer下,你可以预定Soring Layer,这样便于team 协作:

                                          image  C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D image thumb4

                                           

                                          3 Unity 2D 其他

                                          2D的射线检测,3D检测是空间检测,2D则简单一些。

                                          image  C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D image23 thumb

                                          Physics2D.LinecastAll

                                          public static RaycastHit2D[] LinecastAll(Vector2 start, Vector2 end, int layerMask = DefaultRaycastLayers, float minDepth = -Mathf.Infinity, float maxDepth = Mathf.Infinity);

                                          Physics.Linecast

                                          public static bool Linecast(Vector3 start, Vector3 end, int layerMask = DefaultRaycastLayers);

                                          Physics2D.OverlapPointAll

                                          public static Collider2D[] OverlapPointAll(Vector2 point, int layerMask = DefaultRaycastLayers, float minDepth = -Mathf.Infinity, float maxDepth = Mathf.Infinity);

                                           

                                          Sprite.pixelsPerUnit = 100:1(默认100像素=1单位)

                                          image  C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D image thumb5

                                           

                                          4 Unity 2D动画–Animator动画状态机,Animation动画编辑器

                                          image  C#程序员整理的Unity 3D笔记(十九):Unity 3D的Native 2D image thumb6

                                          通过拖动多个Sprite即可自动生成Animation帧动画,在动态调节Sample率后,可观察到动画实时效果,非常简单。

                                           

                                          参考文献: