unity3d 订阅
Unity是游戏引擎开发商 [1-2]  ,实时3D互动内容创作和运营平台 [3]  。 [2]  包括游戏开发、美术、建筑、汽车设计、影视制作在内的创作者运用Unity实现。 [2]  Unity提供一整套软件解决方案,可用于创作、运营和变现实时互动的2D和3D内容 [2]  ,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 [2]  2019年使用Unity制作的游戏和体验已在全球范围内覆盖将近30亿台设备 [4]  ,月均下载量超过30亿次 [5]  。并且其在2019年的安装量已超过370亿次。 [4]  全平台(包括PC/主机/移动设备)游戏中有一半都是基于Unity创作的。 [5]  Unity提供易用实时平台,开发者可以在平台上构建各种AR和VR互动体验 [5]  ,全球超过60%的AR和VR内容都用Unity制作。 [5]  2020年5月9日,Unity宣布收购加拿大技术服务公司Finger Food,拓展工业应用版图。 [6] 展开全文
Unity是游戏引擎开发商 [1-2]  ,实时3D互动内容创作和运营平台 [3]  。 [2]  包括游戏开发、美术、建筑、汽车设计、影视制作在内的创作者运用Unity实现。 [2]  Unity提供一整套软件解决方案,可用于创作、运营和变现实时互动的2D和3D内容 [2]  ,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。 [2]  2019年使用Unity制作的游戏和体验已在全球范围内覆盖将近30亿台设备 [4]  ,月均下载量超过30亿次 [5]  。并且其在2019年的安装量已超过370亿次。 [4]  全平台(包括PC/主机/移动设备)游戏中有一半都是基于Unity创作的。 [5]  Unity提供易用实时平台,开发者可以在平台上构建各种AR和VR互动体验 [5]  ,全球超过60%的AR和VR内容都用Unity制作。 [5]  2020年5月9日,Unity宣布收购加拿大技术服务公司Finger Food,拓展工业应用版图。 [6]
信息
开发公司
Unity Technologies
类    别
创作引擎、开发工具 [2]
员工数
约3500名 [2]
CEO
John Riccitiello [7]
别    名
U3D、Unity3D
属    性
软件公司 [2]
成立时间
2004年 [4]
支持维度
2D、3D、VR、AR、MR [2]
外文名
Unity
编程语言
C# [2]
Unity基本介绍
Unity3D(7张) Unity [8]  引擎使开发者能够为超过20个平台创作和优化内容 [5]  ,包括iOS、安卓、Windows [2]  、Mac OS、索尼PS4、任天堂Switch [2]  、微软Xbox One、谷歌Stadia、微软Hololens、谷歌AR Core、苹果AR Kit、商汤SenseAR等等 [2]  。公司超过1400人规模的研发团队让Unity的技术跟随合作伙伴迭代 [5]  ,确保在最新的版本和平台上提供优化支持服务。 [5]  Unity还提供运营服务来帮助创作者 [2]  ,包括:Unity Ads广告服务、Unity游戏云一站式联网游戏服务、Vivox游戏语音服务、Multiplay海外服务器托管服务 [2]  、Unity内容分发平台(UDP)、Unity Asset Store资源商店 [2]  、Unity云构建等。 [2]  Unity在中国、比利时、芬兰、加拿大、法国、新加坡、德国等16个国家拥有44个办公室 [5]  ,创作者分布在全球190个国家和地区。 [5] 
收起全文
精华内容
参与话题
问答
  • Unity3D】自学之路2.0

    万次阅读 多人点赞 2018-07-09 16:56:35
    一、前言 原文主要讲的是如何从零基础入门,然后一步一步进阶的文章,包括很多学习资料,学习的网址,研究方向等,内容还是比较全面的。大家多多支持一些克森大神,关注一下他的公众号。这篇文章就将原文的内容...

    推荐阅读

    Note:

    因上一期 《Unity3D自学之路》 系列教程资源比较旧(2018.7.9)
    很多资源图片资源失效

    故更新 《Unity3D自学之路2.0》2020.3.11 船新版本
    在新的一年,大家一起加油

    JulyOctober2019AprilJulyOctober20201.0版本 2.0版本 版本版本更新

    旧版本:
    2018.7.9-《Unity3D自学之路1.0》

    新版本介绍:
    2020.3.11-《Unity3D自学之路2.0》
    保留上一版本总体不变的基础上,更新图片、资源的链接

    正文

    Unity自学之路之零基础篇

    目标

    掌握面向过程(C语言)的基本概念和基础操作。

    如题所示,这是一篇是针对那么一点编程基础都没有的人的。

    推荐郝斌老师的C语言基础视频,郝斌老师也是自学过来的。因此他讲的课也是比较适合自学的朋友。
    网上有很多资源,我建议大家可以边看郝斌老师的视频边跟着网站和书来。在这里给朋友们推荐一个网站,慕课网,因为它图文说明,且还可以操作。

    在这里插入图片描述
    总之就是多操作,把能看到的代码都用编辑器自己实现一遍。对了,编辑器我也为大家准备好了,因为大伙们是零基础嘛,所以我给大家配套的是小巧的编辑器 一 Dev-C++。

    C语言视频教程网盘资源链接:
    链接: https://pan.baidu.com/s/1ykEvE_-ogzJkJi4JHAUDqQ 提取码: 875p

    Dev-C++编辑器:
    https://sourceforge.net/projects/orwelldevcpp/

    网站学习教程:
    http://www.imooc.com/learn/249

    我希望这篇文章能给你的Unity自学之路中开启新的篇章,还有我是个很有耐心的人,如果你在学习中有什么不懂得问题,我都可以和你慢慢的理解它哟。

    Unity自学之路之初级篇(上)

    到了这个阶段,我相信大家对基本数据类型,流程控制,数组,函数等都有了一定的了解了吧?接下来就缺面向对象的概念了。让我们进入面向对象编程的世界吧!!

    还是老样子,书籍与视频的结合。

    首先推荐大家看这本书《21天学通C#》,这本书的特点就是,简单易懂,没有那么多深奥的东西,且里面的每一个例子都非常精华,直扑主题。我个人觉得啊,刚刚开始学不需要学的那么深,要有一个循序渐进的过程,对吧。
    在这里插入图片描述
    这本书有些内容是不需要看的,当然你想看也行,至少我当时是没有看。

    好了,书是有了,那教程呢?

    教程的话,我相信大家都应该认识一个老好人吧,siki老师,他是一个很有耐心,且很负责任的一个人。他讲的C#教程与Unity有一定的联系,因此请大家看他的C#教程即可。

    好了,等你把《21天学通C#》看完之后,就要看下一本书了,那就是《图解C#》,这本书实在是太经典了。
    在这里插入图片描述
    这本书利用图文的形式详细的讲述了程序运行时内存的分配状况,这便能让你最一些底层的东西有了一定的了解,这便扩展了你的编程思维。

    好了,Unity自学之路之初级篇(上)到此就完了,学习是一个不断积累的过程,因此我希望大家不要贪快而导致基础不牢。你懂的,基础不牢就如一栋大楼,地基没打好一样没啥卵用。

    书籍资源:
      书籍资源链接:https://pan.baidu.com/s/178FMCnXlBlmhtLVAi37Mbg 提取码:n4xe
    教程资源:
      C#初级:链接:https://pan.baidu.com/s/1CMsW2plFOO60DIKwsWBrog 提取码:wpgk
      C#中级:链接:https://pan.baidu.com/s/1SVRWCO4cix0K759LCq3Byw 提取码:upke
      C#高级:链接:链接:https://pan.baidu.com/s/1uKp9F87UXpe9-Qv56ACtfg 提取码:39j6

    我希望这篇文章能给你的Unity自学之路中开启新的篇章,还有我是个很有耐心的人,如果你在学习中有什么不懂得问题,我都可以和你慢慢的理解它哟。

    Unity自学之路之初级篇(中)

    好了,学了那么多基础的东西了,现在是时候接触接触Unity了。让我们进入Unity的世界吧。

    这个时候的书籍,相信很多人都知道是哪本书了吧?

    那就是《Unity5.x从入门到精通》(对的,你没看错,不是Unity5.x从入门到放弃,,233)。这本是中国官方出的时,内容上也比较通俗易懂(至少对于Unity4.x。。好多了)。
    这里写图片描述
    看这本书的目的主要是开始认识Unity,对Unity的基本操作有一点的了解。

    视频资源

    对于视频资源嘛。不用说,那当然是我们的siki老师了。一个有耐心的、有责任的老师。

    对于这个阶段来说,视频嘛,我们就看一些基本操作、和一些基础的视频即可。

    所以我首先推荐大家能跟这我的步骤来:

      1.首先先看Unity的基本操作,方便了解一些基础的操作和认识一下Unity的大概结构
      2.其次看一些基础的案例视频,在我看来所谓的基础案例视频就是那些编写代码上没有那么复杂(即大多使用面向过程来编写)、没有设计到一些设计模式和算法的教程。

    Unity3D入门教程视频链接:https://pan.baidu.com/s/1mhDZO7m

    总结

    在这个阶段呢,主要是提高大家对Unity的了解和兴趣。让大家大概了解Unity到底是一个什么样的东西,以及知道那是如何工作的。总之就是认识它吧(妈蛋,又不知道怎么说了,好了唠叨至此吧)

    PS:对了,在前面的学习中有什么问题的朋友可以加我微信,我会尽量的帮助到你的。
    wx:yao_11521
    qq:764424567

    Unity自学之路之初级篇(下)

    过前面的学习,我相信现在大伙们对于一些简单的程序阅读起来是一点压力都没有了吧(妈蛋,这语文,肯定有病句,但愿你们能懂意思吧。。)?

    好了,现在一些简单的程序都可以写出来了,就是代码逻辑上还是不够强/好/猛(不知道用那个字)。就是一些想法都能通过代码实现了,只是代码写得有点长,有点乱。

    其实我也不知道怎么说明,总之就是代码不够Perfect吧。现在举个例子:
    这里写图片描述
    大家有没有发现一个问题呢。Yes,那就是有重复出现的语句!!!

    这个时候我们要怎么做呢?那就利用面向对象的特征中的封装来解决。
    这里写图片描述
    我们就可以把相同的东西提取出来,把它们封装到一个函数中去。这样的好处相信大家都知道,如果我们现在要把Hi改为Hello呢?那么我们只需要改一个地方即可(只需在SayHello函数中把Hi改为Hello即可)。如果是上面第一种方法的话,那我们就得改3个地方。看吧,这样的代码是不是就Perfect多了?

    好吧,讲到这里,相信有些朋友知道我要在这章里讲什么了吧?

    那就是设计模式

    设计模式
    设计模式的概念:

    设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

    好了,还是老样子。书籍和视频的结合学习。

    对于书籍呢,相信有一些朋友也知道是哪一本书籍了。那就是非常经典且Humor的《大话设计模式》

    在这里插入图片描述
    这本书还是不错的,案例贴切生活,并且非常的有趣儿,易于理解。记得我那个时候看着看着就入迷了,我居然把这本书当成一个小说来看了,真XX有趣~!!哇哈哈。

    视频教程

    对于视频,不怕大家说我。由于我的学习方式是书籍和视频的组合,因此在我看这本书的时候,为了能结合视频来学习,我是直接百度,然后随便下了一个设计模式系列的视频教程。

    不过请大家放心。对于这个视频教程,我还是蛮认可的,讲得也是非常的好。只不过该教程是用Java来讲课的。

    Don’t wrong,Please!虽然是用Java来讲,但是Java和C#其实就是一对兄弟,除了一些关键字不一样,其它都差不多。因此请大家放心学习,如有什么关于这个教程的问题,随时可以给我说说。我尽可能帮助到大家。

    好了,今天就到这里吧。下一篇就是我最近学的东西了,也就是Unity自学之路之中级篇了。如果学到这里的朋友,那就让我们一起学习,一起进步吧!!可以得话,我们一起分享怎么样呢?

    设计模式书籍资源:https://pan.baidu.com/s/15vJKWoJKPkT9CI4GkvT_Fg 提取码:09sd
    设计模式视频资源:http://www.ibeifeng.com/goods-10.html

    Unity自学之路之中级篇(上)

    好了,我们学到这里,对于面向对象的四个基本特征的运用已经掌握得差不多了吧。对自己写的程序也自信了许多了吧。

    那么,是时候运用这些特征,加上所学的设计模式去做一些事情了。

    能做哪些事情?
    你们应该见过Array、List这些数据吧,你们也应该有操作过它们吧。但是,你们知道它们是怎么在程序中运作的吗?还有我们为什么要知道它们在程序中的运动呢?

    因为我们更好的操作它们,那就得了解它们,这样我们才能随心所欲的操作它们去完成我们要完成的事情。正所谓,“知己知彼,百战百胜”。

    算了,我不知道怎么写了,毕竟语文不好。不和大伙们绕了,在这篇文章里主要给大家说的就是数据结构。

    数据结构
    这时候可以会有人有疑问,为什么我们不先去学习数据结构再学习设计模式呢?

    至少我是这样的情况,以前我也是这么想的,因此我就先去学了数据结构,结果太难搞懂了,这便导致我的学习效果非常的差。

    之后经过学习设计模式后,对面向对象的基本特征掌握的非常熟练后。当我再去学习数据结构的时候,OMG。居然没有那么吃力了,这种感觉太棒了。

    说了那么多,我们先大体了解一些数据结构的概念吧(我是直接百科的)。

    数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率的算法。数据结构往往同高效的检索算法和索引技术有关。

    正如上面所说的。”通常情况下,精心选择的数据结构可以带来更高的运算或者存储效率的算法。数据结构往往同高效的检索算法和索引技术有关“

    大体上就是说选择正确适合你的数据结构能提高工作效率。

    总之学了数据结构,能让我们了解数据之间的存储关系,让我们能在合适的地方运用合适的数据结构来提高我们的工作效率,并且数据结构中常常会有一些常用的算法,例如:排序算法、查找算法等等,特别再一些框架中也运用到了数据结构等等。

    学习方式
    还是老样子,书籍与视频的结合。

    对于书籍呢,我当时看的是这本书《C#数据结构》。
    在这里插入图片描述

    对于视频,当时我看的是郝斌的数据结构,但是它用的是C语言来讲解的。不过讲解的非常详细,大伙们可以选择性的观看。

    对于C#版的数据结构教学视频呢,目前我看到的还是siki老师的视频,但是有一点缺陷就是。他没把树形结构、图形结构讲出来。对于这一点,我想了想。如果可以我为大家出这一部分的视频教程,但是我个人不怎么会搞教程,毕竟语文不好,怕说错话。
    好吧,今天就到这了。

    Unity自学之路之中级篇(中)

    好了,大伙们学到这个阶段了,在编程代码方面已经是非常完美了。但是完美还不够,我们还需要工作效率啊,对不对?

    接下来,我要给大伙们在这章中讲的东西就是能提高工作效率的工具 ------- 《框架》

    框架
    首先先来看下框架的概念:

    • 什么是框架

    框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。

    • 抽取关键词:可重用设计

    可重用性指的是什么呢?

    其实我也不怎么理解,以下是我对于可重用设计的理解(仅代表个人理解,不对的地方还请大家告诉克森):

    可重用性设计,就是说,一套代码能用到很多个不同的游戏类型中,这便达到了可重用性。例如:有很多游戏都用到了背包系统吧,那么我只要写一套背包系统的代码,其他有背包系统的游戏便能用到这套代码,这便提高了工作效率,对吧。

    总之,一套很屌的框架可以运动到任何方面,不仅限于游戏噢。

    不怕大家笑,其实克森最近也在学习框架。因此,对于框架的理解还不是很透测,所以下面给大家的资源只是克森已经学过的东西,觉得还不错,就分享给大家去学习(如果哪位哥们还有好的资源,请分享给克森,我们一起学习)。

    首先,我当时学习框架的时候是先从MVC框架学起的,毕竟那也没那么难嘛。。

    克森当时学习MVC的时候是看了一些博客,比如你可以去百度直接搜索:“浅谈Unity使用MVC”便能找到克森当时看的一些学习资源

    在这里插入图片描述
    对于比较好的文章的话,克森看过的文章里面就是下面这个讲的比较详细,且还有一些对MVC的简单操作:
    在这里插入图片描述
    文章网站:http://www.manew.com/thread-50564-1-1.html

    对了,忘记说了,我的学习方式还是书籍和视频的结合,但是这回的书籍就是所谓的技术博客了(对于框架的学习,暂时还不知道看什么书籍,如果谁知道介绍给我下,谢谢你了)。

    视频教程
    对于视频,当时我看的是泰课网的PuseMVC,所谓PuseMVC嘛,它是基于MVC建立的一个轻量级的应用框架,因此和MVC也差不多。

    在这里插入图片描述
    视频网站:http://www.taikr.com/course/280

    讲得还不错,就是老师说话有点怪,对于刚刚看他视频的哥们来说,也许时不时会被吓到 = =。。。总之,请耐心,认真的把这个视频看完吧,你觉得能收获很多。

    接下来我就去看了有限状态机框架了,对于框架来说,我只能看一些技术文章,还是老样子,百度一下,你就知道 = =。直接输入“Unity有限状态机”即可(注意:这个部分,大伙们可以选择性的来学,因为克森当时学的时候很是艰难 = =)
    在这里插入图片描述
    视频的话看的是这个视频,但是个人觉得他的那套有限状态机好复杂,很难懂,不过也给大伙们介绍介绍吧,大伙们可以选择性的学习。
    在这里插入图片描述
    链接:https://edu.51cto.com/course/3924.html

    PS:不过这套视频要钱,可以用学习卡免费看的,只不过只能免费看一个星期。

    对于这个视频,他也写了一些相应的文章:
    在这里插入图片描述
    文章网站:http://www.manew.com/forum-47-231-1.html

    对了,还有一个非常棒儿的视频,真的很棒~!!!
    在这里插入图片描述
    链接:https://edu.manew.com/course/151/learn

    这套教程里面大概讲了这些东西:针对一些框架的优劣点讲解、设计模式的原则讲解、简单的讲解UI框架等等。

    当然他也有一套全面的视频教程,但是要花一大笔钱,不过克森觉得这笔钱花得很值得吧,如果有钱的朋友可以选择性的购买他的教程哟。
    在这里插入图片描述
    没错,那可是一大笔钱啊,3000多。不过有个窍门,你可以加入他的群,然后跟他讨价还价哟,233。

    接下来就是克森目前在学习的框架,这套框架是针对Unity制作的,并且还是免费的,代码任你看的哟。

    那就是StrangIOC框架。对于它的解释我还不是很了解哟。因为克森还在学习中,我怕误导大伙们,所以就直接给大伙们介绍一些学习资源吧。
    在这里插入图片描述
    unity StrangeIoc框架总结-链接:https://www.jianshu.com/p/f59d85c88405

    Unity自学之路之中级篇(下)

    首先先感谢学到这里的大伙们,谢谢你相信克森,坚持到了这里。

    好了,克森相信学到这里的哥们对于C#掌握已经很OK了,现在自己看一些代码啊啥的已经不是那么的吃力了。那么接下来我们要做什么呢?

    那就是进一步了解Unity,之前我们只是对Unity做了个简单的了解,现在我们要做的事是对Unity进一步的了解。

    进一步了解Unity

    那么我们要怎么对Unity做进一步的了解呢?

    那就是熟练的掌握Unity的各个组件,比如:物理系统、粒子系统、UGUI等等。

    那么我要怎么去熟练的掌握它们呢?

    那就是通过官方的文档说明,然后结合文档做一些测试和学习掌握它。
    在这里插入图片描述
    传送门:http://docs.unity3d.com/Manual/index.html

    大家可能会问,克森,官网上面全是英文,看不懂怎么办?
    好吧,那我们就找个中文的看看呀,对吧?相信有很多人都知道我要说的中文文档是什么了,那就是Unity圣典!
    在这里插入图片描述

    Unity官网的组件模块对应于Unity圣典的组件手册:
    这里写图片描述
    在学习组件手册的时候顺便也把相应组件的API也学了,这样便能事倍功半,对吧。

    UnityAPI官方文档对应于Unity圣典的脚本手册:
    这里写图片描述
    传送门:http://www.ceeger.com/

    PS:最近这个网站访问不了,不知道是服务器到期了,还是管理者关闭了。小伙伴们可以百度Unity3D圣典,下载本地版本

    PS:由于Unity圣典的版本更新得比较慢,因此克森建议大家边看Unity圣典,边打开官方的文档进行对比。

    温馨提醒:不要觉得学这些太多,太无聊,因为Unity都是由这些东西组成的。你只有深入的了解它们,才能知道怎么运用它们,并且扩展它们。

    好吧,等大伙们把上面这些内容都弄懂的话,那么使用Unity已经是小菜一碟了。

    找感觉
    好,是时候展示真正的技术了!

    之前没有叫大伙们学习太多的教程,为什么呢?

    那是克森帮大伙们节省时间。这时候肯定有些人会说,挖草,你吹牛吧,假好人吧!

    好,是时候解释一波了。

    仅代表个人观点:那是因为我们要在对应的阶段学习该学的东西。

    怎么说呢?

    就是你没到达那个阶段,就盲目的跟着教程来,你是学不到什么的,反而会让你产生负面的影响(至少克森当时是这样的)。

    因为你看不懂啊,看不懂怎么办,那我就只能跟着教程来。教程怎么来,我就怎么来,只要能达到效果就行,便导致整个过程都只是在抄教程里的代码,而不是去理解它(因为理解不了嘛,即可教程里也做了一些解释)。

    但是现在的你已经不同往日了,现在的你已经可以看懂那些教程了(对应国内的免费教程蛤)。So,让我们盲目一次吧,开始跟着一些教程来制作一些项目找感觉了。

    那么这里教程去哪里找呢?(我相信我说的这句话是废话吧)

    这里是克森要装逼一次了蛤,那就是去APP来社区~

    这回知道克森分享给大家的东西都是精华了吧~
    在这里插入图片描述
    传送门:http://www.appcome.com/forum-49-1.html

    PS:由于工程太大,克森就不帮大伙们整理了,大伙们自己去下载吧。。还有就是9秒上面真的有很多好东西,大伙们可以自行收集。

    大伙们要是把这里都学习了,都弄懂了。好吧,大伙们离找到一个合适的工作不远了。

    Alright,今天就到这吧,今天是最近发布最快的一天了,好爽啊。

    Unity自学之路之数学篇

    其实我这个是有点废话了,但是我也勉强解释一下为什么弄一个《Unity自学之路之数学篇》吧。

    相信大家心里都明白,我们现在用的是Unity3D,所谓3D,那必定会与数学扯上关系。

    这时候也许有人会说,却,数学Unity不是帮封装好了吗,我们直接用就行了啊。

    好吧,我也只能跟你说一声,你这个想法有点简单咯哟。这样吧,至少我个人觉得,你要用一个东西,至少要准备一下几点:

    1.了解它的概念
    2.知道它的用法
    3.在什么时候用它

    因此,你不了解它,何谈利用它呢?(妈蛋,废话有点多了,请大家体谅)

    PS:我这篇是针对零基础的,意味着你连数学都不知道。。如果以下内容你有学过的,可以跳过那些学过的,直接进入没有学的过进行学习

    干货链接
    在这里插入图片描述
    加法与减法:http://open.163.com/special/Khan/additionandsubtraction.html

    乘法和除法:http://open.163.com/special/Khan/multiplication.html

    约数与倍数:http://open.163.com/special/Khan/multiples.html

    数的性质:http://open.163.com/special/Khan/number.html

    分数:http://open.163.com/special/Khan/fractions.html

    负数:http://open.163.com/special/Khan/negative.html

    小数:http://open.163.com/special/Khan/decimals.html

    指数:http://open.163.com/special/Khan/exponents.html

    对数:http://open.163.com/special/Khan/logarithms.html

    绝对值:http://open.163.com/special/Khan/value.html

    复数:http://open.163.com/special/Khan/complexnumber.html

    基础几何:http://open.163.com/special/Khan/introductory.html

    几何学-角:http://open.163.com/special/Khan/angles.html

    三角形:http://open.163.com/special/Khan/triangle.html

    多边形、四边形、平行四边形:http://open.163.com/special/Khan/polygon.html

    三角学:http://open.163.com/special/Khan/trigonometry.html

    基本代数:http://open.163.com/special/Khan/algebra.html

    线性代数:http://open.163.com/special/Khan/linearalgebra.html

    好了,学到这里的话,你绝对算得上一个数学大神了。对了,上面的视频是网易的公开课,我相信有些朋友是知道网易公开课的。在这里我也只是为了方便大家和对一些不了解网易公开课的朋友总结一下路线,件此而已。

    当然,上面的视频有一些还没有翻译中文,还有一些你可以跳过不学,具体由你来吧。

    题外话
    真的真的,我说真的,大伙们不要觉得太多了,我还是老样子,高楼大厦与地基的关系。你只有基础牢了,才能走得更远。我知道有些朋友很急着立马找到工作。

    也许有些人说,去了公司能学得更快。嗯嗯,对的对的。是很快。但是去了公司你基本上自己学习的时间就少了,这意味着什么?意味着你想深入研究一些东西就没得时间研究了,这便导致你的技术只能停留在完成公司项目的程度上。

    这个时候也许还会有人反驳我,在公司上班不还有晚上的休息时间和双休日的休息时间吗?

    好吧,是有,但是能拿那些时间来学习的人有多少呢(我不是针对谁,请谅解)?妈蛋,又唠叨太多了,对于这篇文章就到这了。

    分享一些学习资源

    官网教程

    首先是一些官网的教程,为什么要看官网的教程的,个人觉得嘛,首先你作为主人,你要给别人用你的东西,那就得做详细、且简单易懂的介绍,对吧。因此,我认为官网的教程还是蛮精华的。

    有人会问,官网的教程不都是英文的嘛,,哈哈,放心。我已经为大家找到翻译版的。
    在这里插入图片描述
    网站:http://space.bilibili.com/7647261/#!/index

    看了吧,这个人是英文的真大神啊。把官网上的教程都翻译得差不多了。。。

    里面涵盖了:脚本,UGUI,2D游戏等等。

    可以的话,建议大家都它看完了吧。。

    论坛网站

    对于论坛(博客)网站的话,不用说CSDN、知乎、简书。

    在这些论坛上,你只要搜索一些关键词都能找到你想要找到的文章,然后你可以多阅读几个内容一样,但是解释不一样的文章,然后进行分析分析,取之精华之处,放进你的大脑。

    接下来就是腾讯的GWB腾讯游戏创意合作计划平台:
    在这里插入图片描述
    网站:https://gwb.tencent.com/cn
    在这里插入图片描述
    在这个网站上,可以将自己优秀的点子,游戏,进行上传,优秀的项目会得到
    专家咨询,技术支持,发行支持,资金支持,宣传推广等。

    当然还有腾讯游戏学院:
    在这里插入图片描述
    https://gameinstitute.qq.com/course

    在这上面会讲一些腾讯的爆款游戏的开发之路,开发思路等。
    里面的东西还不是很多,不过对于我们来说,已经是一个非常不错的学习圣地了。

    对于资源嘛,可以来这个网站 - 《APP来》
    在这里插入图片描述
    网站:http://www.appcome.com/

    里面有很多很多的资源

    展开全文
  • unity入门教学,新手教学,新手到大神的教学。。。

    首先声明一下,我用的Unity版本是4.6.6,编译环境是VS2010,其余的我会慢慢介绍,安装的过程这里我就不做讲解了,度娘那会做的比我详细。安装包可以在最下面的联系方式找我要,现在开始进入主题。
    打开Unity以后,我们先新建工程,这里要注意,一定要一个汉字都不能有,一定!避免出现不必要的Bug。
    这里写图片描述

    打开工程以后,就可以看到我们的Unity的操作界面。

    这里写图片描述

    这个我用着不方便,按照我个人的习惯,变成了这样的布局,当然这是个人喜好,可以不用模仿我。

    这里写图片描述

    那么这里每个模块的每个功能我就不一一介绍了,具体功能介绍我推荐给大家几本书,以供参考。

    这里写图片描述

    这里写图片描述

    首先看这里

    这里写图片描述

    快捷键从左至右为QWERT,功能为
    Q:调整视图
    W:移动工具
    E:旋转工具
    R:缩放工具
    T:选择工具
    鼠标右键为旋转视图,鼠标中键等于按下Q的左键操作。

    现在,我们来创建一个GameObject来练习如何操作Unity3D。

    首先,创建一个Cube。

    这里写图片描述

    然后调整到MainCamera能观看到的范围内。

    这里写图片描述

    在这里我要介绍一下MainCamera,这个是游戏的主摄像机,也就是说我们玩游戏的视图都是这个东西拍摄下来的游戏引擎里的游戏对象。因为,场景没有光源,所以MainCamera看到的东西比较暗,那么我们为场景添加光源,然后选中这个Cube按F2重命名为Floor,并将Floor通过缩放工具变成我们需要用的地板。

    这里写图片描述

    这里写图片描述

    下面我们在Floor的上方再新建一个Cube,作为我们的主角,命名为Player。

    这里写图片描述

    现在我们点击Unity上方像播放似的那个按钮,就是运行游戏,可以法线并没有什么变化,现在我们给主角添加刚体。—-Rigidbody
    并运行游戏。

    这里写图片描述

    这里写图片描述

    可以看到我们的Player掉到了Floor上,因为我们添加了物理引擎。他可以模拟重力,模拟碰撞、、、等等。

    下面开始用代码让我们的Player动起来吧!

    首先先创建C#脚本文件。

    创建脚本前以防我们的工程文件会很乱,所以我们要新建一些文件夹,为我们的资源分类,我分了这些类,并且创建了一个PlayerMove的C#脚本。

    这里写图片描述

    这里写图片描述

    双击用VS2010打开脚本。

    这里写图片描述

    下面我们开始写移动的代码。

    public class PlayerMove : MonoBehaviour {
    
        //定义移动的速度
        public float MoveSpeed = 2f;
        //定义旋转的速度
        public float RotateSpeed = 0.01f;
    
    
        void Start () {
    
        }
    
        void Update () {
    
            //如果按下W或上方向键
            if(Input.GetKey(KeyCode.W)||Input.GetKey(KeyCode.UpArrow))
            {
                //以MoveSpeed的速度向正前方移动
                this.transform.Translate(Vector3.forward*MoveSpeed*Time.deltaTime);
            }
            if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
            {
                this.transform.Translate(Vector3.back * MoveSpeed*Time.deltaTime);
            }
    
            //如果按下A或左方向键
            if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
            {
                //以RotateSpeed为速度向左旋转
                this.transform.Rotate(Vector3.down * RotateSpeed);
            } 
            if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
            {
                this.transform.Rotate(Vector3.up * RotateSpeed);
            }
    
        }
    }

    把这个代码托给Player。

    这里写图片描述

    好了,运行游戏,你的Player已经可以移动了。

    这里写图片描述

    按下Ctrl+S保存场景,第一讲到此结束,未完待续。。。 。。。

    联系方式
    查看Aries的领英个人资料 查看Aries的个人资料

    QQ:531193915
    E_Mail:15210411296@163.com

    展开全文
  • 深入浅出Unity3D——第一篇

    万人学习 2015-02-05 09:58:48
    Unity3D基础知识、游戏算法一网打尽。
  • Unity3D入门教程】Unity3D简介、安装和程序发布

    万次阅读 多人点赞 2017-01-06 11:22:19
    Unity3D是一个跨平台的游戏开发引擎,它能够帮助开发者快速构建游戏场景,进行游戏开发与发布。它支持将开发好的作品发布到Windows、Mac OS、Android、iOS、Linux等多种平台。另外,Unity3D官方版本目前可以运行在...

    《Unity3D入门教程》会带领零基础的初学者,一步步学会使用Unity3D来开发简单的应用程序,走近游戏开发的世界。本系列教程虽然不会面面俱到地深入到全部的知识点,但是会涉及到所有入门阶段所需要掌握的必备技能。通过本教程的学习,可以快速“入门”。师傅领进门,修行在个人。当我们掌握了基本的框架和技能后,就可以自由选择自己喜欢的点去深入学习。本教程是博主自己学习Unity3D时候总结的学习笔记,基本能够涵盖住入门阶段所需要学习的点。希望能都对读者有哪怕那么一点点的帮助,也不枉敲了那么久的键盘,码了那么些字。Enjoy Unity3D!


    ------------------------------------------------------------------------------------------------------------------

    1 Unity3D介绍

    Unity3D是一个跨平台的游戏开发引擎,它能够帮助开发者快速构建游戏场景,进行游戏开发与发布。它支持将开发好的作品发布到Windows、Mac OS、Android、iOS、Linux等多种平台。另外,Unity3D官方版本目前可以运行在Windows和Mac OS上,当然还有可以运行在Linux上的非官方版本。


    打开Unity3D官网,可以开到如下的画面,可见Unity3D的主要目标还是集中在游戏开发上,也包含VR/AR的开发。


    2 Unity3D下载与安装

    https://store.unity.com/cn/?_ga=1.18936120.1875984010.1467707827

    打开上面Unity商店网址,会看到如下的界面。


    选择免费的个人版,点击进入。


    可以直接点击下载安装程序,也可以点击底部最右侧的“Unity旧版本”。我一般会选择后者,因为这样就可以自由选择要安装的版本。开发中最好采用一样的版本,否则在打开别的程序的时候总会根据Unity版本重新生成工程,来回转换难免不会出现什么隐含的Bug。点击“Unity旧版本”后,实际上看到的列表中也包含最新的版本。


    根据你的系统选择相应的版本下载即可。例如我的是Win10 64位,我就点击5.4.1的“下载(Win)”按钮,选择Unity编辑器(64位)下载。我没有选择最新的版本,因为我已经有其他的程序是使用这个版本编辑的。如果你喜欢最新版,完全可以下载最新版,都是没问题的。

    之后在你的下载目录会有“UnitySetup64-5.4.1f1.exe”这个文件,双击运行。一路点继续,到安装路径的页面可以更改安装路径,其他都默认即可。安装完后,如果没有使用破解补丁破解,界面是灰白色的,破解后是深灰色的。其实使用功能上没什么区别,反正现在有了免费的个人版,对于我们做研究来说,破解与否没差别。


    第一次打开Unity可能需要登陆账号,可以随便注册一个登陆即可。点击“NEW”,输入工程名和路径,点击“Create project”。


    至此,表示软件安装成功,可以正常运行了。

    3 程序打包发布

    按Ctrl+S,保存当前场景,可以命名为MyScene。之后在Project中的Assets下就会有已经保存的场景。然后File——Build Settings,出现下面的面板


    点击“Add Open Scenes”就能将当前场景添加到待生成的列表里,然后左下方的平台就选择“PC, Mac & Linux Standalone”,然后点击Build。然后会要求你选择发布程序的路径和输入名称。如果和我一样选择默认路径,发布程序名称为“test”那么会在工程目录下看到发布出的程序。


    双击test.exe,会出现如下对话框:


    将分辨率设置为640*480,勾选Windowed,点击Play,就会看到如下场景:


    好了,现在我们已经成功发布了一款应用程序。尽管这个程序什么功能都没有,但是它仍然是我们使用Unity3D成功发布的第一个应用程序,具有非凡纪念意义。它表明我们已经走在Unity3D开发之路上了。


    展开全文
  • 本课程主要讲解了 C# 语言的面向对象特性,是进行 Unity 3D 开发的基础。大部分的语言都支持面向对象,学好面向对象,能极大地提高我们的开发效率。面向对象相关的知识点本身就会有些抽象,概念很多,所以需要认真...
  • Unity3d 周分享(20期 2019.6.30 )

    千次阅读 2019-06-30 15:03:41
    选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧 1、Unity的Android音频延迟在2019.1.0 中改进 ... 文章作者因为这个延迟问题,弄了一个,正是基于Op...

    选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧 

    1、Unity的Android音频延迟在2019.1.0 中改进

    https://gametorrahod.com/unitys-android-audio-latency-improvement-in-2019-1-0/

    文章作者因为这个延迟问题,弄了一个,正是基于OpenSL 原生音频 - 通过OS的原生音频库降低音频延迟。

    Native Audio是一个插件,可以帮助您使用每个平台最快的本机方法轻松加载和播放音频... beyond7.com

    其中也提到一些有名的插件: 除了FMOD和wwise之外,还有来自日本的Criware。 文章真的好长~~

    有关使用Unity的Android音频的复习,我建议你阅读这篇长达一小时的关于我的研究的文章。

    适用于Unity开发人员的Android原生音频入门

    我将揭开围绕Android音频系统的“黑匣子”的神秘面纱,并分析为什么Unity使用它的方式会让人失望... gametorrahod.com

    作者使用 小米 miA2 (2018年发布/奥利奥8.1.0)和 Xperia Z5 (2015年发布/ Nougat 7.1.1)两个手机做了测试。

    结果

    令人印象深刻!在小米米A2上,从以前的Unity版本减少是一个疯狂的-200毫秒!(如果完全跳过Unity到本机,-317ms)

    在Xperia Z5上没有任何有意义的改进,表明手机已经在之前的版本中使用了OpenSL ES。

    摘要

    我建议所有节奏游戏开发者尽快升级到2019.1,因为这些小米设备因价格低而非常普及。谁知道哪些设备能够实际处理低延迟时报告错误的低延迟功能标志?

     

     

     

     

    2、 了解实体组件系统的面向数据的设计--GDC 2019年的Unity 【Understanding data-oriented design for entity component systems - Unity at GDC 2019】 https://www.youtube.com/watch?time_continue=565&v=0_Byw9UMn9g

              与传统的面向对象的游戏系统设计方式相比,Unity的新ECS功能可以实现巨大的性能提升,但面向数据的设计是一种截然不同的思维方式。观察如何以面向数据的方式思考,以便您可以利用这些新功能。演讲人:Elizabeth Baumel(DOTS软件工程师,Unity Technologies)了解有关面向数据技术堆栈(DOTS)的更多信息:

    https://unity.com/dots?utm_source=youtube&utm_medium=social&utm_campaign=engine_global_generalpromo_2019-04-09_gdc19&utm_content=video_understanding-dots

    PPT : https://docs.google.com/presentation/d/1s8XV63Dy092i1FSfUFUvfXrne2OmisrlxM5zbr4F8gQ/edit#slide=id.p

     

     

    Unity at GDC - A Data Oriented Approach to Using Component Systems

    https://www.youtube.com/watch?v=p65Yt20pw0g

     

     

     

    3、 使用Unity的AudioMixer

    音频混音器音量设置 , http://tsubakit1.hateblo.jp/entry/2015/05/23/234053 这个文章使用 mixer.SetFloat("MasterVolume", Mathf.Lerp(-80, 0, value)); 这种方式控制音量。

    https://qiita.com/u-n-k-man1gou/items/ea206c700ed5076ecd79 volume 和 DB 有一个转换关系的~~

                 因为AudioMixer的音量是Digibell(-80~0)。 如果你在AudioSource.volume的0f-1f意义上这样做,那将毫无用处。

    0.5f = -40dB如果你考虑一下,声音将会低于50%。

                Digibell(dB)转换的公式是

    dB = 20.0 × log10(i0/i1) ※「i0/i1」是一个比例,

                 所以用C#写

    20 * Mathf.Log10(volume);

    volume 就是Slider的值(0f至1f)。

    public void SetBgmVolume(float _volume)
    {
        float volume = Mathf.Clamp(_volume, 0.0001f, 1.0f);
        var volumeDB = (float) (20.0d * Math.Log10(volume));
        audioMixer.SetFloat("BGMVol", Mathf.Clamp(volumeDB, -80.0f, 0.0f));
    }

     

     

     

     

    4、

    这个手册之前看过两边吧, 最近有看了一遍~~~~

    ARM 针对Unity推出的 手册 : 中文最新 3.3 版本

    ARM® Unity 开发者指南 版本 3.3 优化移动游戏图形 https://developer.arm.com/-/media/developer/Graphics%20and%20Multimedia/Developer%20Guides%20-%20PDFs/Unity%20Developer%20Guides/Oct18%20-%20%20Unity%20%20ARM%20-%20Chinese.pdf?revision=2dd4b6af-bf6d-4930-ac23-2ed841fbd55b&la=en

    https://developer.arm.com/tools-and-software/graphics-and-gaming/gaming-engine/unity/unity-guides-and-white-papers

               Unity 5 及更高版本会自动缓存Transform组件。

     

     

     

     

     

    5、在Unity 2018的PlayerLoop中,禁用Unity调用每一帧的处理或在Update之前添加您自己的处理

    这次,使用从Unity 2018添加的PlayerLoop,您可以添加或自定义您自己的事件,例如Unity事件(Update,FixedUpdate等

                     在Unity 4和Unity 5时,基本上使用MonoBehaviour调用Unity事件,例如Update和LateUpdate,除非由ScriptExecutionOrder设置,否则顺序是未知的。

                基本上它适用于Component, 但是好像没有场景相关的事件。

    RuntimeInitializeOnLoad似乎可以调用与场景无关的初始化处理。

                Unity 2018.1 引入了一个名为PlayerLoop 的功能。这是Unity引擎重新更新过程的顺序,或停止特定的事件,或插入自己的处理似乎是有可能这样。

    获取标准事件列表

    using UnityEngine;
    using UnityEngine.Experimental.LowLevel;
    public class ShowPlayerLoop
    {
        [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
        static void Init()
        {
            var playerLoop = PlayerLoop.GetDefaultPlayerLoop();
    
            foreach (var header in playerLoop.subSystemList)
            {
                Debug.LogFormat("------{0}------", header.type.Name);
                foreach (var subSystem in header.subSystemList)
                {
                    Debug.LogFormat("{0}.{1}", header.type.Name, subSystem.type.Name);
                }
            }
        }
    }

              首先var playerLoop = PlayerLoop.GetDefaultPlayerLoop();获得所有标准事件。

               重要的是playerLoop.subSystemList,存储在此列表中的方法是递归调用的。如果要自定义调用,则将编辑此subSystemList的各个部分。

               此外,此部分中要获取的方法列表似乎与UnityEngine.Experimental.PlayLoop中可以检查的方法相匹配。

    ------Initialization------
    Initialization.PlayerUpdateTime
    Initialization.AsyncUploadTimeSlicedUpdate
    Initialization.SynchronizeInputs
    Initialization.SynchronizeState
    Initialization.XREarlyUpdate
    ------EarlyUpdate------
    EarlyUpdate.PollPlayerConnection
    EarlyUpdate.ProfilerStartFrame
    EarlyUpdate.GpuTimestamp
    EarlyUpdate.UnityConnectClientUpdate
    EarlyUpdate.CloudWebServicesUpdate
    EarlyUpdate.UnityWebRequestUpdate
    EarlyUpdate.ExecuteMainThreadJobs
    EarlyUpdate.ProcessMouseInWindow
    EarlyUpdate.ClearIntermediateRenderers
    EarlyUpdate.ClearLines
    EarlyUpdate.PresentBeforeUpdate
    EarlyUpdate.ResetFrameStatsAfterPresent
    EarlyUpdate.UpdateAllUnityWebStreams
    EarlyUpdate.UpdateAsyncReadbackManager
    EarlyUpdate.UpdateTextureStreamingManager
    EarlyUpdate.UpdatePreloading
    EarlyUpdate.RendererNotifyInvisible
    EarlyUpdate.PlayerCleanupCachedData
    EarlyUpdate.UpdateMainGameViewRect
    EarlyUpdate.UpdateCanvasRectTransform
    EarlyUpdate.UpdateInputManager
    EarlyUpdate.ProcessRemoteInput
    EarlyUpdate.XRUpdate
    EarlyUpdate.TangoUpdate
    EarlyUpdate.ScriptRunDelayedStartupFrame
    EarlyUpdate.UpdateKinect
    EarlyUpdate.DeliverIosPlatformEvents
    EarlyUpdate.DispatchEventQueueEvents
    EarlyUpdate.DirectorSampleTime
    EarlyUpdate.PhysicsResetInterpolatedTransformPosition
    EarlyUpdate.NewInputBeginFrame
    EarlyUpdate.SpriteAtlasManagerUpdate
    EarlyUpdate.PerformanceAnalyticsUpdate
    ------FixedUpdate------
    FixedUpdate.ClearLines
    FixedUpdate.NewInputEndFixedUpdate
    FixedUpdate.DirectorFixedSampleTime
    FixedUpdate.AudioFixedUpdate
    FixedUpdate.ScriptRunBehaviourFixedUpdate
    FixedUpdate.DirectorFixedUpdate
    FixedUpdate.LegacyFixedAnimationUpdate
    FixedUpdate.XRFixedUpdate
    FixedUpdate.PhysicsFixedUpdate
    FixedUpdate.Physics2DFixedUpdate
    FixedUpdate.DirectorFixedUpdatePostPhysics
    FixedUpdate.ScriptRunDelayedFixedFrameRate
    FixedUpdate.ScriptRunDelayedTasks
    FixedUpdate.NewInputBeginFixedUpdate
    ------PreUpdate------
    PreUpdate.PhysicsUpdate
    PreUpdate.Physics2DUpdate
    PreUpdate.CheckTexFieldInput
    PreUpdate.IMGUISendQueuedEvents
    PreUpdate.NewInputUpdate
    PreUpdate.SendMouseEvents
    PreUpdate.AIUpdate
    PreUpdate.WindUpdate
    PreUpdate.UpdateVideo
    ------Update------
    Update.ScriptRunBehaviourUpdate
    Update.ScriptRunDelayedDynamicFrameRate
    Update.DirectorUpdate
    ------PreLateUpdate------
    PreLateUpdate.AIUpdatePostScript
    PreLateUpdate.DirectorUpdateAnimationBegin
    PreLateUpdate.LegacyAnimationUpdate
    PreLateUpdate.DirectorUpdateAnimationEnd
    PreLateUpdate.DirectorDeferredEvaluate
    PreLateUpdate.UpdateNetworkManager
    PreLateUpdate.UpdateMasterServerInterface
    PreLateUpdate.UNetUpdate
    PreLateUpdate.EndGraphicsJobsLate
    PreLateUpdate.ParticleSystemBeginUpdateAll
    PreLateUpdate.ScriptRunBehaviourLateUpdate
    PreLateUpdate.ConstraintManagerUpdate
    ------PostLateUpdate------
    PostLateUpdate.PlayerSendFrameStarted
    PostLateUpdate.DirectorLateUpdate
    PostLateUpdate.ScriptRunDelayedDynamicFrameRate
    PostLateUpdate.PhysicsSkinnedClothBeginUpdate
    PostLateUpdate.UpdateCanvasRectTransform
    PostLateUpdate.PlayerUpdateCanvases
    PostLateUpdate.UpdateAudio
    PostLateUpdate.ParticlesLegacyUpdateAllParticleSystems
    PostLateUpdate.ParticleSystemEndUpdateAll
    PostLateUpdate.UpdateCustomRenderTextures
    PostLateUpdate.UpdateAllRenderers
    PostLateUpdate.EnlightenRuntimeUpdate
    PostLateUpdate.UpdateAllSkinnedMeshes
    PostLateUpdate.ProcessWebSendMessages
    PostLateUpdate.SortingGroupsUpdate
    PostLateUpdate.UpdateVideoTextures
    PostLateUpdate.UpdateVideo
    PostLateUpdate.DirectorRenderImage
    PostLateUpdate.PlayerEmitCanvasGeometry
    PostLateUpdate.PhysicsSkinnedClothFinishUpdate
    PostLateUpdate.FinishFrameRendering
    PostLateUpdate.BatchModeUpdate
    PostLateUpdate.PlayerSendFrameComplete
    PostLateUpdate.UpdateCaptureScreenshot
    PostLateUpdate.PresentAfterDraw
    PostLateUpdate.ClearImmediateRenderers
    PostLateUpdate.PlayerSendFramePostPresent
    PostLateUpdate.UpdateResolution
    PostLateUpdate.InputEndFrame
    PostLateUpdate.TriggerEndOfFrameCallbacks
    PostLateUpdate.GUIClearEvents
    PostLateUpdate.ShaderHandleErrors
    PostLateUpdate.ResetInputAxis
    PostLateUpdate.ThreadedLoadingDebug
    PostLateUpdate.ProfilerSynchronizeStats
    PostLateUpdate.MemoryFrameMaintenance
    PostLateUpdate.ExecuteGameCenterCallbacks
    PostLateUpdate.ProfilerEndFrame

    覆盖PlayerLoop本身

    我将用我认为最强大的进程取代PlayerLoop 。

    正确地说,一旦你没有调用Unity的基本功能的各种处理,请将处理插入其中。

               这本身很容易实现。但是,如果您不调用进程== Unity循环被完全销毁,Unity使用的大多数函数都将停止。 物理操作,输入和UI 的所有操作都死掉了。

    using UnityEngine;
    using UnityEngine.Experimental.LowLevel;
    public class SpawnSystem
    {
        [RuntimeInitializeOnLoadMethod()]
        static void Init()
        {
            var mySystem = new PlayerLoopSystem()
            {
                type = typeof(MyLoopSystemUpdate),
                updateDelegate = () =>
                {
                    Debug.Log("DO IT!!!");
                }
            };
            var playerLoop = new PlayerLoopSystem();
            playerLoop.subSystemList = new PlayerLoopSystem[] { mySystem };
            PlayerLoop.SetPlayerLoop(playerLoop);
        }
        public struct MyLoopSystemUpdate { }
    }

    这次,我会尝试在更新之前执行类似...的 函数你可以看到每帧都在打印Log, 但是画面都是静止的, 因为之前的正常循环都被覆盖没有了。

    using UnityEngine;
    using UnityEngine.Experimental.LowLevel;
    using System.Collections.Generic;
    public class PreUpdateSystem
    {
        [RuntimeInitializeOnLoadMethod()]
        static void Init()
        {
            var mySystem = new PlayerLoopSystem()
            {
                type = typeof(MyLoopSystemUpdate),
                updateDelegate = () =>
                {
                    Debug.Log("DO IT!!!");
                }
            };
            var playerLoop = PlayerLoop.GetDefaultPlayerLoop();
            var updateSystem = playerLoop.subSystemList[4]; // Update
            var subSystem = new List<PlayerLoopSystem>(updateSystem.subSystemList);
            subSystem.Insert(0, mySystem);
            updateSystem.subSystemList = subSystem.ToArray();
            playerLoop.subSystemList[4] = updateSystem;
            PlayerLoop.SetPlayerLoop(playerLoop);
        }
        public struct MyLoopSystemUpdate { }
    }

    我正在做的就是重写subSystemList的内容并反映它。playerLoop.subSystemList[4];从更新过程中取出,在顶部添加您自己的进程并返回。现在整个显示如果有动画的话, 又动起来了~~~

    下面的列表是Unity调用的事件获取的事件列表。

     

    指数

    类型

    内容

    0

    Initialization

    “时间”更新或状态?同步

    1

    EarlyUpdate

    更新“输入”等

    2

    FixedUpdate

    物理操作系统,调用FixedUpdate

    3

    PreUpdate

    物理计算的反映?或鼠标输入

    4

    Update

    更新过程

    5

    PreLateUpdate

    动画更新等。最后是LateUpdate

    6

    PostLateUpdate

    布料更新,渲染等

    结果如下,我在FixedUpdate和Update之间插入了自己的事件。

     

    禁用特定事件

    最后,尝试禁用某些事件。这也很简单,只需准备一个已删除特定事件的PlayerLoop版本,然后执PlayerLoop.SetPlayerLoop。

    这次,我将尝试禁用FixedUpdate.PhysicsFixedUpdate。

    using UnityEngine;
    using UnityEngine.Experimental.LowLevel;
    using UnityEngine.Experimental.PlayerLoop;
    using System.Collections.Generic;
    public class StopPhysicsFixedUpdate
    {
        static PlayerLoopSystem[] originalPlayerLoop, updatedPlayerLoop;
        [RuntimeInitializeOnLoadMethod()]
        static void Init()
        {
            var playerLoop = PlayerLoop.GetDefaultPlayerLoop();
            originalPlayerLoop = playerLoop.subSystemList[2].subSystemList; // Update
            var subSystem = new List<PlayerLoopSystem>(originalPlayerLoop);
            subSystem.RemoveAll(c => c.type == typeof(FixedUpdate.PhysicsFixedUpdate));
            updatedPlayerLoop = subSystem.ToArray();
            PhysicsOFF();
        }
        public static void PhysicsOFF()
        {
            var playerLoop = PlayerLoop.GetDefaultPlayerLoop();
            var sub = playerLoop.subSystemList[2];
            sub.subSystemList = updatedPlayerLoop;
            playerLoop.subSystemList[2] = sub;
            PlayerLoop.SetPlayerLoop(playerLoop);
        }
        public static void PhysicsON()
        {
            var playerLoop = PlayerLoop.GetDefaultPlayerLoop();
            var sub = playerLoop.subSystemList[2];
            sub.subSystemList = originalPlayerLoop;
            playerLoop.subSystemList[2] = sub;
            PlayerLoop.SetPlayerLoop(playerLoop);
        }
    }

    因为它是一个低级函数,所以最好小心如何使用它。

                 就个人而言,我认识到在Update之前添加初始化处理以及在帧结束时收集信息是一个很好的用法。

     

     

     

     

    6、 CEDEC 2018摘要

    [CEDEC 2018摘要]发布了47篇报告文章,重点关注与智能手机游戏相关的会议

    计算机娱乐协会(CESA)于8月22日至24日在Pacifico Yokohama举行日本最大的游戏开发者大会“2018年计算机娱乐开发者大会”(CEDEC 2018),创下历史新高254进行了一次会议 其中,社交游戏信息发布了47篇关于智能手机游戏相关会话的报道文章。

    今年的主题是“幻想成为现实”。在CEDEC开始时,许多被认为远未实现的“梦想”现在正在变为现实,他们表示新的“梦想”将在不久的将来成为现实。 。

    下面,我们将提供已发布会话的列表,作为每个制造商的摘要。

    · Applibot(1) 【CEDEC 2018】揭示了成功的营销改革......也证明了ROAS翻倍!数字营销发展业务

    ·Aiming(1) “开发和管理分析自己的数据的文化!”(瞄准Koichiro Shibao)改善游戏的方法和措施是什么?

    · Epic Games(1) 降低CPU成本并按预期执行!在UE4中使用许多角色的技术

    ·Craft Egg(1) “Galpa”管理中最上游的思想是“用户至上”......这个想法随着Craft Egg的价值而被揭示出来

    · gumi(1) “为什么我们需要分析数据?”......根据“海鸥订单”的例子,介绍可用于“决策”的分析数据

    · KLab(2) 为用户提供更高品质的音响体验!在社交游戏中实现响度控制的工作流程构建和考虑 ※本次会议也是Sono Logic Design,腾讯也在舞台上。 “Uta no Tsu☆Prince-sama♪Shining Live”用“CRIWARE”产生逼真的现场感...... KLab展示声音和指挥技术

    · 格力(2) 测试〜游戏应用程序,随着时代的变化误传措施母鸡- ...误传的风险,可以提前检测 发生在外包和解决方案的时间问题...委托从两家公司的角度评论了接收方的“格力”和接受方的“GREVO”

    · 谷歌(1) 通过Google Play上的智能手机游戏提高防范退款,改装,作弊等安全性的对策和要点

    · Kokonone(1) 许多女性在“Pokekoro”中进行客户通信的秘密传递......“真正面对顾客的态度”

    · Cygames (4) UI设计和原型开发,用于快速,高质量地制作UI ......“Prince Connect!Re:Dive的生产案例将会发布 Cygames拥有的最佳内容...靠近支持它的客户支持系统 Cygames与Pasco的融合,航空摄影摄影测量技术和激光扫描技术我们在

    ※※中实现了“最佳舒适体育场”的3D数据转换方法。本次会议也在Pasco上。 从“Dereste”的案例看“大更新成功的秘诀”...从Cygames的图形观点看评论

    史克威尔(1) 从“Glimmnots Repage”看遗传算法的游戏平衡调整中的案例及其可视化......将目标“事实”改为“真相”的方法

    ,世嘉游戏(5) 在“D×2 Shin,女神新生解放”中尝试和发现新的UI设计制作方法,其中眼动仪用户测试是关键 SEGA Games'Kotodaman'的800万DL成就支持阴影的“Monobit Unity Networking 2.0”展示了单比特引擎采用示例 ※此会话还包括单比特引擎。 SEGA Games正在建设和运营“D2 Megaten Kotodaman新标题”的支持系统...... AI真的很多功能吗? 通过短期外包创造“D x 2 Shin,女神重生启示”魔鬼动画的提示被传递 不断变得复杂的订单管理更简单!SEGA Games推荐的进步管理工具“SHOTOGUN”的优势来自“Kotodaman”的例子 ※本次会议还有一个关于 Autodesk 的讨论。

    喜悦工程(5) “命运”是那须蘑菇!...... DW的代表Yuji先生解释了发起“Fate / Grand Order”的过程 Delightworks Shiokawa描述的“Discard,Produce”的含义......现在,它被揭示为“FGO” 继续,“爱”和“勇气”的故事。“ 大爆炸,伟大的魔术”Matsuri“带来了”FGO“!... Delightworks的演示营销技巧 “FGO Arcade”的“疯狂”策划技术突破了“我不能做○○......”概念的基础是“已知”ד未知”和“如果是”形成 介绍Delightworks“PM”的基础知识,进行团队管理......从今天开始使用的FGO PROJECT和PM技术案例!

    代纳(3) “反Oseronia”制片人的魅力城市大沽说,Nanzo,是一个“游戏管理社区和联创”? DeNA谈论的AR测量的最大好处是什么?“2D角色有三个维度!-AR测量歌曲Macross-”? “在”扭转奥赛利亚“中使用人工智能”......一起思考目标并始终分享预期值“

    Dorikomu(3) “ENZA”在使用机器学习,过去,来分析未来的TCG当前元游戏在运行的“龙珠Z布奇吉利匹配” ※本次会议也是在舞台上万代南梦宫游戏 教的手机游戏开发位置信息“AROW”挑战AR地图便宜,Dorikomu游戏更快的发展是使用位置信息的3D实景图,以及如何解决 移动浏览器我们宣布了如何制作“Idol Master Shiny Colors”,它实现了全面的游戏开发和提供。*本次会议还有Namco BANDAI Entertainment

    任天堂(1) 任天堂先生和Miyamoto先生正在关注的移动游戏市场的未来......对“退役”模式的挑战

    PACkage(1) PACkage谈论“关西电子竞技的现状和前景”的电子竞技冠军的成功条件是什么?

    - 万代纳木错娱乐(1) 简单的“阅读”和“寻找”困难的“专利”......如何检查专利纠纷

    - 万代纳木错工作室(2) BanaCAST发布的动作捕捉技术,支持CG人物生活提供了...“THE IDOLM @ STER”采用大型直播活动的效果 基于物理的HDR的移动版渲染“铁拳”我们遵循的困难和成功【阴影处理技术USM,PSM, SLPSM 这都是什么技术怎么搜搜不到?】

    六驱动器(1) 了解为什么许多女性坠入爱河“什么是Tokimeki-一种导致恋爱中的少女的新方法 - ”......旨在为全世界带来快乐的应用程序

    · Pokerabo(6) 通过设置“约束”创造的头像和效果......“SINoALICE-Sino Alice-”战斗方向的背面 非常独特的讲座,发生在“SINoALICE”发布时维修地狱“工程师-Kakuhari先生的背面Pokerabo的坦白供认 Poke Lab关于如何在大规模开发中讨论Unity的“弱点”解决方法的讲座被报道为“SINoALICE-在Synorice中使用Unity的技术 - ” Pokelab从“Senki Zessho Symphogear XD”的案例中加强了“在新游戏开始时分配UI·UX专业工程师的优点”! UI的制作过程充分反映了Yoko Otaro对世界的看法......社交游戏中表达的世界深度观点 Poke Labo同时开发多个游戏的效率提升提案:什么是负责基础和框架共性的“跨职能团队”?

    · Wright Flyer Studios(3) “Dunmachi-Memoria·Flase ......”运营团队介绍的自动游戏最佳参数模拟的框架是什么? 莱特飞行器影城,对应的AI聊天机器人查询手机游戏推出了多项削减约20%的......快到秘密 从大约一年释放和半已经过去了,“另一个伊甸园宣布Cats Beyond Space-Time的开发工具的变化和发现

    ※按字母顺序列出

     

     

     

     

     

     

     

    7、 [Unity]在Inspector中拖动和更改值时,在拖动时按住Shift或Alt 可以加快或者减慢值改变的速度。 SHIFT (faster) or ALT (slower).

    按住Shift拖

    按住Alt并拖动

     

     

     

     

     

     

     

    8、Expressio - 算术表达式求解器 https://connect.unity.com/p/expressio-arithmetic-expression-solver

    https://zzatomiic.gitlab.io/expressio/index.html

     

     

    9、 宣雨凇 的 Profiler 深挖系列 ~~~

    Profiler深挖-导航条(1)

    Profiler深挖-CPU面板(2)

    Profiler深挖-GPU面板(3)

    Profiler深挖-Rendering面板(4)

    Profiler深挖-Memory面板(5)

    Profiler深挖-UI面板(6)

    Profiler深挖-真机(7)

    private void OnGUI()

    {

    GUILayout.Label(string.Format("<size=50>FPS : {0}</size>", (1f / Time.smoothDeltaTime).ToString("F2")));

    }

    一个查看FPS的方法,只需要一行代码即可。

    Time.smoothDeltaTime表示Time.deltaTime的平滑时间

     

    7)SetPass Call:这个数值有点意思,官方给的意思是 The number of rendering passes. Each pass requires Unity runtime to bind a new shader which may introduce CPU overhead. 翻译一下 渲染的Pass数量,每个渲染的Pass都需要绑定一个新的shader,它可能会导致CPU的开销。

    这里你肯定会有疑问,到底SetPass Call 和Draw Call有啥区别呢?SetPass Call绑定了新的Shader所以它会更新到新的渲染状态,而DrawCall呢就是根据这个状态来进行绘制,但是一个Shader可能由多个Pass组成,所以同一个SetPass Call 就会产生多个DrawCall了。还不明白?我在举个更详细点的例子。将下面有两个Pass的shader放入游戏。

    你会发现无论怎么复制,SetPass Call永远不会变。因为它渲染的shader没有变,所以渲染状态也不需要变。但是由于shader有两个不同的pass所以无法进行动态合批,那么自然每添加一个对象,DrawCall就会增加两个了。

    1)Dynamic Batching :动态合批其实就是在CPU先将Mesh动态合并好,然后在一次性送进GPU。如果Mesh特别的大,那么动态合批肯定就非常慢了。所以Unity的动态合批是有要求的,只有顶点属性和1套UV限制900顶点以内,在增加法线后限制300顶点以内,在增加2套UV、切线限制180顶点以内。

    3)Instancing:GPU Instancing技术,同mesh、同材质、同shader、同参数。一般可用来做草、石头,比较坑的是不支持lightingmap,unity2018支持了lightingmap 但是需要开启实时GI.

     

     

     

     

     

    10、 VFX Toolbox Image Sequencer

    Unity官方工具: https://forum.unity.com/threads/release-thread-vfx-toolbox-image-sequencer.438465/ 看视频就知道怎么使用了~~

    该工具旨在成为图像序列处理的基础,其首要目标之一是以简单的方式生成flipbook纹理表。

    比如说有一堆序列散图, 但是这个工具可以调整切换曲线, 生成新的flipbook图集。

    文档:

    https://docs.google.com/document/d/1eTJ9XTqvtKhaXUBZPLTgHiHmy4DF4uM2Zvs3SZFrAjc/edit

    https://blogs.unity3d.com/2016/11/28/free-vfx-image-sequences-flipbooks/

    下载:

    LATEST(f2)版本在这里: ImageSequencer Only带有Assets的ImageSequencer

     

     

     

    使用新的Terrain工具包加快您的工作速度

    Unity 2019.1

    文档: https://docs.unity3d.com/Packages/com.unity.terrain-tools@1.1/manual/

     

     

     

     

     

     

     

     

    11、 Sprite有个模式, 镜像模式

    它包括使用一半的图像作为资产。只有在完整图像对称的情况下才能使用。然后, 将总大小的一半保存在地图集中, 并将其绘制为 "镜像" 的两倍, 以获得完整的图像。

    如果图像在垂直和水平两层都是对称的, 也可以使用图像来完成。

    https://engineering.etermax.com/unity-performance-introduction-a1ede6f3b5b5

     

    如果是UI 好像不能正常合批了, 使用不再是图集中的贴图。 不知道是否还有别的用处~

     

     

     

     

     

     

    12、

    是什么要求贴图最好是POT , 硬件? GL ? 还是贴图压缩算法? 操作系统?

    https://docs.unity3d.com/Manual/ImportingTextures.html 提到npot 了 , platform or GPU

    https://answers.unity.com/questions/957259/npot-non-power-of-two-textures-take-a-huge-space.html 早期版本会有这种警告, 包括预览内存大小。 这个视频就会看到内存大小的变化 。 https://www.youtube.com/watch?v=6FP5oLtyxm8

    如果启用了mipmap,则只能压缩POT纹理

    如果您尝试使用mipmaps压缩NPOT纹理,Unity可能会警告您“如果启用了mipmap,则只能压缩POT纹理”。您可以直接编辑纹理或使用Unity的内置纹理导入设置来强制压缩或拉伸纹理为2的幂。

    扩展高级有一个'Non Power of 2'的选项,这将允许你使Unity稍微挤压或拉伸纹理到最接近的2的力量.POT纹理很重要的原因是因为除非纹理是POT你不会能够使用一些压缩格式和mipmap不能在纹理上使用。(在旧的硬件上你可能会发现NPOT纹理使用的内存比预期的要多,因为它们作为下一个最高的POT大小存储在内存中!)

     

     

     

     

     

    如何:在 Unity 中创建视频聊天应用程序

    使用 Agora.io的 SDK ~~~

     

     

    13、 策划反馈IphoneX 上UI元素特别小(本身接近19:9 然后屏幕物理上还比较窄) 。

    https://docs.unity3d.com/2019.1/Documentation/Manual/script-CanvasScaler.html

    https://docs.unity3d.com/2019.1/Documentation/Manual/HOWTO-UIMultiResolution.html

    https://medium.com/@johntucker_48673/building-a-responsive-ui-unity-a201a1014f9 (缩放比例计算)

               理想设置可能是下面的样子。 大部分参考分辨率都设置为 16:9 . 这个设置0.5 对于界面集中在中间的UI(就是全屏UI, 对于大部分游戏主界面基本没有问题, 因为都是靠四周的), 这个0.5可以解决这个问题。 但是会导致其他问题,比如切换到 19:9 ,, 内容可能会超出边界。 我们之前项目是设置 mathch 为1 . 但是今天发现如果设置为1基本上和 设置为 Expand 类似了。 这个是 IphoneX 上UI元素特别小的原因。

     

     

     

    14、

    Unity 的 Package 的另外一个地址:

    https://unity.bintray.com/unity/

    .npm/

    com.autodesk.fbx/

    com.ptc.vuforia.engine/

    com.unity.2d.animation/

    com.unity.2d.common/

    com.unity.2d.ik/

    com.unity.2d.path/

    com.unity.2d.pixel-perfect/

    com.unity.2d.psdimporter/

    com.unity.2d.spriteshape/

    com.unity.2d.triangle/

    com.unity.addressables/

    com.unity.ads/

    com.unity.ai.planner/

    com.unity.analytics/

    com.unity.animation.cs-jobs-samples/

    com.unity.animation.rigging/

    com.unity.assetbundlebrowser/

    com.unity.audio.megacityprototype/

    com.unity.burst/

    com.unity.cacheserver.client/

    com.unity.canary-coin-game/

    com.unity.canary-package.tests/

    com.unity.canary-package/

    com.unity.cinemachine/

    com.unity.cloud-vetting-canary/

    com.unity.cloud.userreporting/

    com.unity.code-analysis/

    com.unity.collab-proxy/

    com.unity.collections/

    com.unity.connect.share/

    com.unity.dummy-test/

    com.unity.dummypackagea/

    com.unity.dummypackageb/

    com.unity.dummypackagec/

    com.unity.dummypackaged/

    com.unity.editorcoroutines/

    com.unity.entities/

    com.unity.ext.nunit/

    com.unity.facebook.gameroom.sdk/

    com.unity.film-tv.toolbox/

    com.unity.formats.alembic.tests/

    com.unity.formats.alembic/

    com.unity.formats.fbx/

    com.unity.formats.usd/

    com.unity.google.resonance.audio/

    com.unity.ide.rider/

    com.unity.ide.visualstudio/

    com.unity.ide.vscode/

    com.unity.immediate-window/

    com.unity.incrementalcompiler/

    com.unity.inputsystem/

    com.unity.jobs/

    com.unity.learn.iet-framework/

    com.unity.localization/

    com.unity.mathematics/

    com.unity.memoryprofiler/

    com.unity.mobile.adaptiveperformance/

    com.unity.mobile.android-logcat/

    com.unity.mobile.notifications/

    com.unity.multiplayer-hlapi/

    com.unity.package-manager-ui/

    com.unity.package-manager.metadata/

    com.unity.package-manager/

    com.unity.package-under-test/

    com.unity.package-validation-suite.tests/

    com.unity.package-validation-suite/

    com.unity.performance.profile-analyzer/

    com.unity.pge/

    com.unity.physics/

    com.unity.playablegraph-visualizer/

    com.unity.polybrush/

    com.unity.postprocessing/

    com.unity.probuilder/

    com.unity.progrids/

    com.unity.properties/

    com.unity.purchasing.udp/

    com.unity.purchasing/

    com.unity.quicksearch/

    com.unity.recorder/

    com.unity.render-pipelines.core/

    com.unity.render-pipelines.high-definition/

    com.unity.render-pipelines.lightweight/

    com.unity.rendering.hybrid/

    com.unity.resourcemanager/

    com.unity.scriptablebuildpipeline/

    com.unity.searcher/

    com.unity.settings-manager/

    com.unity.shadergraph/

    com.unity.standardevents/

    com.unity.subsystemregistration/

    com.unity.template.canary-template/

    com.unity.terrain-tools/

    com.unity.test-framework.performance/

    com.unity.test-framework.tests/

    com.unity.test-framework/

    com.unity.test-package/

    com.unity.test.big/

    com.unity.textmeshpro/

    com.unity.tiny/

    com.unity.traceeventprofiler/

    com.unity.uiwidgets/

    com.unity.vectorgraphics/

    com.unity.visualeffectgraph/

    com.unity.xiaomi/

    com.unity.xr.arcore/

    com.unity.xr.arextensions/

    com.unity.xr.arfoundation/

    com.unity.xr.arkit-face-tracking/

    com.unity.xr.arkit/

    com.unity.xr.arsubsystems/

    com.unity.xr.facesubsystem/

    com.unity.xr.googlevr.android/

    com.unity.xr.googlevr.ios/

    com.unity.xr.interactionsubsystems/

    com.unity.xr.legacyinputhelpers/

    com.unity.xr.magicleap/

    com.unity.xr.management/

    com.unity.xr.oculus.android/

    com.unity.xr.oculus.standalone/

    com.unity.xr.oculus/

    com.unity.xr.openvr.standalone/

    com.unity.xr.windowsmr.metro/

    com.unity.xr.windowsmr/

    nuget.castle-core/

    nuget.mono-cecil/

    nuget.moq/

     

     

     

    15、 Unity 2019.1.5f1中包含天空盒变化

    Unity2018时还是如下:

    Unity 2019.1.5 没有了 , 需要

    Procedural Sky 与Skybox设置类似

    Sky > Gradient Sky

    Sky > HDRI Sky

    https://twitter.com/z_zabaglione/status/1139116015848050688

    https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@6.7/manual/Static-Lighting-Sky.html

     

     

     

    16、 【Unity】如何使用Assembly Definition Files访问internal成员

    https://qiita.com/toRisouP/items/156eb91dfe7e4a848dc3

    AssemblyInfo.cs中

    using System.Runtime.CompilerServices;
    
    //允许从指定的dll访问内部访问级别
    
    [assembly: InternalsVisibleTo("MyLibrary.Test")] //匹配adf中定义的名称

    解决上图中的问题, 测试程序MyLibrary.Test 库要测试 MyLibrary 库, 自然需要访问 internal访问权限的成员。 就是这个应用~

     

     

     

     

     

     

     

     

    17、 关于 Assetbundle 打包策略 ;

    https://docs.unity3d.com/Manual/AssetBundles-Preparing.html?_ga=2.145653108.1332958240.1560227147-1366382285.1535636176

    https://unity3d.com/cn/learn/tutorials/topics/best-practices/assetbundle-usage-patterns?playlist=30089

    无论您遵循何种策略,这里都有一些额外的提示,这些提示可以全面记住:

    • 将频繁更新的对象拆分为AssetBundle,与很少更改的对象分开
    • 对可能同时加载的对象进行分组。例如模型,纹理和动画
    • 如果您注意到多个AssetBundle中的多个对象依赖于来自完全不同的AssetBundle的单个资产,请将依赖项移动到单独的AssetBundle。如果多个AssetBundle引用其他AssetBundle中的同一组资产,则可能值得将这些依赖项拉入共享AssetBundle以减少重复。
    • 如果不可能同时加载两组对象,例如标准和高清属性,请确保它们位于自己的AssetBundle中。
    • 如果同时经常加载50%的捆绑包,请考虑拆分AssetBundle
    • 考虑组合小型(少于5到10个资产)但其内容经常同时加载的AssetBundle
    • 如果一组对象只是同一对象的不同版本,请考虑AssetBundle Variants

    决定如何将项目的资产划分为AssetBundle并不简单。采用简单的策略是很诱人的,例如将所有对象放在他们自己的AssetBundle中或只使用一个AssetBundle,但这些解决方案有明显的缺点:

    • AB太少......
      • 增加运行时内存使用量
      • 增加加载时间
      • 需要更大的下载量
    • 太多AssetBundles ......
      • 增加构建时间
      • 可以使开发复杂化
      • 增加总下载时间

    关键决定是如何将对象分组为AssetBundles。主要策略是:

    • 逻辑实体
    • 对象类型
    • 并发内容

    一个大AB, 三个小AB , 当然了我用的是Audio,可能根设置有关。 现象上看因为使用LoadFromFile 方式, 加载AB只是取索引 并不是LoadInMemory,所以每次都差不多(跟AB大小无关,次数越多越耗时), 但是从AB中读取读取的差别可能会不一样

    从空间上看, AB本身差别不到,大的是 序列化文件。

     

     

     

     

     

     

    18、

    Unity\2018.2.19\Editor\Data\Resources :

    unity default resources

    unity editor resources

    unity_builtin_extra

    他们不能被移除, 我尝试更改名称, Editor没办法正常打开项目了~~

    Resources / unity_builtin_extra是指整个标准资产文件夹。

    不引用他们中的内容,就会被Unity进行相应的剔除~~

    原始大小

     

    Unity 5.x AssetBundle零冗余解决方案: https://blog.uwa4d.com/archives/1577.html

    Object[] UnityAssets = AssetDatabase.LoadAllAssetsAtPath("Resources/unity_builtin_extra");
    // Object[] UnityAssets = AssetDatabase.LoadAllAssetsAtPath("Library/unity default resources");
    foreach (var asset in UnityAssets)
    {
       // create asset...
    }

     

               进一步的探索后,发现Unity具有两种内置资源,一套是"Resources/unity_builtin_extra",主要包含了是Shader,Material,UGUI的Sprite和Sprite对应的Texture,另外一套资源的路径是"Library/unity default resources",同样可以使用AssetDataBase.LoadAllAssetsAtPath()来加载,主要包含是GUI,内置Mesh这些资源以及一些未知的资源。两者的guid也各不相同:

    Resources/unity_builtin_extra下资源对应的guid始终为0000000000000000f000000000000000。

    Library/unity default resources下资源对应的guid始终为0000000000000000e000000000000000。

    个别资源冗余的原因是中发现一些本应属于Resources/unity_builtin_extra的Material和Shader,被引用时guid却是0000000000000000e000000000000000,尝试将其修改为0000000000000000f000000000000000后发现并无差异。具体原因不明,猜测和Unity的版本、开发平台(Windows,Mac)有一定的关系。为了解决这个问题,我们对Material和Shader做了“兼容性”处理,在建立内置资源与提取出的内置资源映射关系时,手动添加一份对Library/unity default resources的映射。

     

    可以使用拆包工具查看 包中都包含哪些内容 ~~~

     

     

     

     

     

    19、 看到文章 ~~

    如何在Unity 中使用纹理数组Texture2DArray: https://medium.com/@calebfaith/how-to-use-texture-arrays-in-unity-a830ae04c98b 感觉是个很重要的优化技术, UWA好像也分享过?

    “Array textures are an alternative to atlases, as they can store multiple layers of texture data for objects without some of the problems of atlases.” — OpenGL Wiki

    “数组纹理是图集的替代品,因为它们可以为对象存储多层纹理数据,而不会出现图集的某些问题。” - OpenGL Wiki

    https://docs.unity3d.com/ScriptReference/Texture2DArray.html

    https://docs.unity3d.com/Manual/SL-TextureArrays.html

    https://answer.uwa4d.com/question/5a7e9f79847802258a065084

    Texture2D Array example, https://gist.github.com/Spaxe/57de76c993a4dc8bb37275acbe597ef2

     

     

     

     

    20、当“显卡驱动程序不支持GPU分析”错误时该怎么办。

               两个点, 一个是要看图形API是否支持, 比如Mac 上可能有两个选项,调整一下顺序。

               第二个就是可能因为勾选了 Graphics Jobs(Experimental)* 。 (使用HDRP创建Unity 2019.1.6.f1的项目时,默认情况下会选中此处的复选框)。 https://docs.unity3d.com/2018.3/Documentation/Manual/ProfilerGPU.html

    Note that GPU profiling is disabled when Graphics Jobs (Experimental) is enabled in the Player settings. See documentation on Standalone Player settings for more information. On macOS, GPU profiling is only available under OSX 10.9 Mavericks and later versions.

     

     

     

     

    21、 UGUI 的RichText 确实产生更多的三角面和顶点

    <color=red><size=18>N</size></color>

    N

     

     

     

     

     

    22、set Quad scale to match videoplayer aspect ratio

    设置Quad scale 以匹配videoplayer 纵横比

    需要快速videoplayer四网格缩放器,以匹配视频大小,所以这是一个小编辑器帮助脚本

    访问脚本表单VideoPlayer上下文菜单(右键单击VideoPlayer组件标题)

    using UnityEngine;
    using UnityEditor;
    using UnityEngine.Video;
    namespace UnityLibrary
    {
        public class GetVideoAspectRatioEditor : MonoBehaviour
        {
            [MenuItem("CONTEXT/VideoPlayer/Get Aspect Ratio for Mesh")]
            static void DoubleMass(MenuCommand command)
            {
                // get aspect ratio
                VideoPlayer v = (VideoPlayer)command.context;
                if (v.clip == null)
                {
                    Debug.LogError("No videoclip assigned..");
                    return;
                }
                float aspectRatioY = v.height / (float)v.width;
    
                // record undo
                Undo.RecordObject(v.transform, "Set scale");
    
                // scale mesh
                Vector3 scale = v.transform.localScale;
                // fix only height
                scale.y *= aspectRatioY;
                v.transform.localScale = scale;
            }
        }
    }

     

     

     

    23、

    [Unite Tokyo 2018]什么!Unity!是什么支持Mirita的“AKANE Daisakusen”?

    https://www.slideshare.net/UnityTechnologiesJapan002/unite-2018-tokyo-96336266?ref=https://learning.unity3d.jp/726/

    https://learning.unity3d.jp/726/

    《[Unite Tokyo 2018]实现“Mirishita”的“13人生活”的“AKANE Daisakusen”优化项目的全貌明显......!》

    https://gamebiz.jp/?p=210335

    此外,为低GPU性能的终端准备了低分辨率模式,然后应用MSAA使锯齿变得不明显。

    为了优化。 有必要组建一个可以与开发团队分开的特殊团队。 。

    我们的目标是最终使平均FPS接近60,前提是“不要降低视觉质量”作为实现目标的政策。我们的目标是首先达到以下四点,大致分为两点。

    • SetPassCall(DrawCall)减少
    • GPU负载减少

    纹理图集

    索引缓冲区合并

    减少材质

    调整绘图顺序

    • CPU负载减少

    加快摆动计算处理

    • 处理线程处理(允许非工作CPU工作)内存优化

    有没有生成GC的设备?

    结果,平均FPS接近60。

    (在16.6666 ...... ms内完成该过程)

     

    UnityProfiler之外,我们一直确认使用Snapdragon Profiler等,以了解我们所做的改进如何反映在图中。

     

    实施方式: PDCA 步骤

    P 优化思路的优先次序

    D实施

    C建立和测量(简介)

    A进一步的想法

    ※Plan(计划)→Do(执行)→Check(评估)→Act(改进)

    为了更容易测试 可以打开/关闭优化项目。

     

    为了处理绘图负载, 我们没有重建Asset。因此,加藤先生宣布它使用了一种称为子网格集成的方法。

    在“Mirishita”中,角色的模型分为头部和身体。这一次,我解释了塑造身体的衣服,亮片,皮肤和人物颜色。

     

    https://learning.unity3d.jp/event/

    https://learning.unity3d.jp/event/unite-tokyo-2018/

    https://learning.unity3d.jp/event/cedec-2018/

     

     

     

     

     

     

     

    24、 https://support.unity3d.com/hc/en-us/articles/206619726-The-characters-are-displayed-with-a-different-font-Where-can-I-see-the-Fallback-font-list-per-platform-

              关于有些文字会不显示的问题~

    Font Names:当字体或字符不可用时使用的后备字体列表(见下文)。

    默认字体资产

              默认字体资源是动态字体,设置为使用Arial。如果Unity无法在您的计算机上找到Arial字体(例如,如果您没有安装它),它将回退到Unity捆绑的字体,名为Liberation Sans。

               andriod系统有自己的默认字体Droid Sans(只含西文字符),和默认中文字体Droid Sans Fallback。unity把Arial字体在andriod平台上映射为Droid Sans (Fallback)。但是由于Android的碎片问题,国内低端手机(小米,魅族等)砍掉系统默认字体。

              使用Arial的另外一个问题是,作为unity默认字体,unity不会把Arial真正打包进安装文件,无法找到这个字体源文件,无法更改Font Names属性,在找不到默认字体的系统里就会不显示中文了。

                所以更好的一个做法是做空壳。导入一种字体但不打包到安装文件,设置好Font Names属性(包含各个平台的字体名列表),则在不同的平台上调用不同的字体。只要确保发布时指定的Font Names属性里有目标平台的字体就行。

     

    https://docs.unity3d.com/Manual/class-Font.html

    Unity Arial Font 反编译得到的数据: Unity对内置资源做了保护, 没办法拷贝出来。

    Font font = Resources.GetBuiltinResource<Font>("Arial.ttf"); // 加载

    Font clonedFont = (Font)Object.Instantiate(font); // 这个会报错。

    AssetDatabase.CreateAsset(font, "Assets/ArialFont.TTF");// 这个也会报错, 提示已经存在了

    pathID:10102
    PPt:{fileID: 0 (unity default resources), pathID: 10102, m_Name: Arial, type: Font}
    PPt.h:1551892732
    PPt.u:4250982280371110140
    AssetName:unity default resources
    classID: 128 (Font)
    Asset offset: 113272 (0x0001BA78)
    Asset length: 51094 (0x0000C796)
    baseDefinitions: False for 2018.2.0b9
    AssetBundleName: 
    AsLink: {fileID: 12800000, guid: dd36cb7b5e7f46ac8cd65035df5b2976, type: 3}
    AsLinkUnity: {fileID: 12800000, guid: dd36cb7b5e7f46ac8cd65035df5b2976, type: 3}
    - required version metadata: 2018.2.0b9(gen: 17)
    - will be used version    : 2018.2.0f2(gen: 17)
    Metadata:
    ----------
      m_Name: "Arial"
      m_LineSpacing: 14.94873
      m_DefaultMaterial: {fileID: 2100000, guid: 7047a5e4536a404bb2b56489a7813706, type: 2}
      m_FontSize: 13
      m_Texture: {fileID: 2800000, guid: 16ba080aab6c4a898e0daa310b4929c0, type: 3}
      m_AsciiStartOffset: 0
      m_Tracking: 1
      m_CharacterSpacing: 0
      m_CharacterPadding: 1
      m_ConvertCase: -2
      m_CharacterRects: []
      m_KerningValues:
      - 70: 44: -1
      - 70: 46: -1
      - 80: 44: -1
      - 80: 46: -1
      - 84: 44: -1
      - 84: 46: -1
      - 84: 58: -1
      - 84: 59: -1
      - 84: 97: -1
      - 84: 99: -1
      - 84: 101: -1
      - 84: 111: -1
      - 84: 115: -1
      - 86: 44: -1
      - 86: 46: -1
      - 89: 44: -1
      - 89: 45: -1
      - 89: 46: -1
      - 89: 101: -1
      - 89: 111: -1
      - 89: 113: -1
      m_PixelScale: 0.1
      m_FontData: byte[50788]{....}
      m_Ascent: 11.76855
      m_Descent: -2.754883
      m_DefaultStyle: 0
      m_FontNames:
      - "Liberation Sans"
      - "Arial"
      m_FallbackFonts: []
      m_FontRenderingMode: 0
      m_UseLegacyBoundsCalculation: 0
      m_ShouldRoundAdvanceValue: 1
    ----------
    Metada-end

    https://blog.csdn.net/cp1001/article/details/31409659网上类似文章很多:

    https://blog.csdn.net/oSKyTonight/article/details/45250071

    Unity 中有API 判斷一個字符是否在Font中: 但是有點問題。

    https://answers.unity.com/questions/1150139/why-fonthascharacter-always-returns-true-on-dynami.html

    https://answers.unity.com/questions/1474367/fontgetcharacterinfo-always-returns-false.html

    https://docs.unity3d.com/ScriptReference/Font.GetCharacterInfo.html

    https://docs.unity3d.com/ScriptReference/Font.HasCharacter.html

    https://docs.unity3d.com/ScriptReference/Font.RequestCharactersInTexture.html

     

     

     

     

    25、 https://twitter.com/XRofFlynn/status/1140418091836248064

    在2019.3中,我们添加了将Unity嵌入其他原生iOS或Android应用程序的支持。 想要将Unity仅用于部分应用程序(例如,您可能想要Unity for AR体验),或者您希望进行高度自定义初始化,您现在可以! 了解如何:

    https://blogs.unity3d.com/2019/06/17/add-features-powered-by-unity-to-native-mobile-apps/?utm_source=twitter&utm_medium=social&utm_campaign=vrar_global_generalpromo_2019-06-17_2019.3-library&utm_content=blog_unity-as-library (中国官方应该会翻译)

    https://forum.unity.com/threads/using-unity-as-a-library-in-native-ios-android-apps.685195/

    在某些情况下,使用本机平台技术(如Android / Java和iOS / Objective C)的开发人员希望在他们的应用/游戏功能中包含Unity(通常用于3D / 2D实时渲染),如AR体验,与3D模型的交互,2D迷你游戏等。

    从Unity 2019.3.a2开始,我们引入了一项新功能,通过将Unity运行时组件和您的内容集成到本机平台项目中,将Unity用作本机应用程序中的库。Unity Runtime Library公开控件以管理本机应用程序中何时以及如何加载/激活/卸载。

    请注意,使用Unity作为库需要您深入了解Android / Java和iOS / Objective C应用程序的体系结构。

    限制

    虽然我们测试了Unity作为由本机应用程序托管的库的许多场景,但Unity不再控制运行时的生命周期,因此我们无法保证它在所有可能的用例中都能正常工作。

    例如:

    Unity作为库支持仅渲染全屏,不支持在屏幕的一部分上渲染。

    不支持加载Unity运行时的多个实例。

    您可能需要调整第三方插件(本机或托管)才能正常工作。

    工作原理

    整体构建过程仍然相同,Unity创建了iOS Xcode和Android Gradle项目,但为了启用此功能,我们更改了生成的iOS Xcode和Android Gradle项目,它们现在具有以下结构:

    包含所有源代码和插件的库部件(iOS框架和Android Archive(AAR)文件)

    一个精简的启动器部件,包括应用程序表示数据和运行库

    有关如何在需要时将iOS / Android库部件包含到本机应用程序中的分步说明。

    本文的其余部分描述了Xcode / Android Gradle项目的变化。

     

     

     

     

     

    26、

    Guilty Gear Xrd的日漫风shader一直被看作是业内这方面的标杆。几年前看了GGX的制作人在GDC上讲他们的shader

    GDC视频链接:https://www.youtube.com/watch?v=yhGjCzxJV3E

    虽然游戏中照片般逼真的实时图形质量每天都在提升到近乎特色电影的质量,但Arc System Works的RED团队采用了与Guilty Gear Xrd完全不同的方法来追求令人印象深刻的艺术风格。 在这种竞争激烈的环境 该团队的使命是在现代化的全3D图形框架内重建经典的2D格斗游戏,同时保持其所有的老派2D魅力。 在本次GDC 2015演讲中,技术艺术家Junya C Motomura将讨论艺术和编程研发,以及所有艺术决策,从而获得屡获殊荣的成果。

    https://www.element3ds.com/thread-151972-1-1.html

    https://www.bilibili.com/video/av23586843/

    下载素材: https://share.weiyun.com/57YSmlJ

    早就有人在Unity中的实现:

    https://forum.unity.com/threads/guilty-gear-xrd-shader-test.448557/

    https://forum.unity.com/attachments/guilty-gear-xrd-shader-test-unitypackage.213646/

    PPT: http://www.ggxrd.com/Motomura_Junya_GuiltyGearXrd.pdf

    https://www.dropbox.com/s/65cwf6kjuezhwdl/GuilltyGearXrd_shader.pdf?dl=0

     

     

     

     

     

     

     

     

     

    27、 基本上每个项目都会做 字体剔除, 但是字体剔除导致有些生僻字或者别的语言可能显示不出来。 如果字体中不包含通常就是看不到没有任何宽度。

    如果是使用工具剔除的,通常就是表现为固定宽高的空格。

     

    Unity 中有API 判斷一個字符是否在Font中: 但是有點問題。

    https://answers.unity.com/questions/1150139/why-fonthascharacter-always-returns-true-on-dynami.html

    https://answers.unity.com/questions/1474367/fontgetcharacterinfo-always-returns-false.html

    https://docs.unity3d.com/ScriptReference/Font.GetCharacterInfo.html

    https://docs.unity3d.com/ScriptReference/Font.HasCharacter.html

    https://docs.unity3d.com/ScriptReference/Font.RequestCharactersInTexture.html

     

    話不錯1を1シ111ыжиб1ż111ęཔ1པཔཔ1པ11鄜᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛᠛‍ᡌ1ᠨᠨ111

     

    注意宽高=2的判断不知道是否保险。 比如误杀 空格了 。

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    /// <summary>
    /// 检查输入的文字如果不在字体内,或者在字体内被剔除的处理
    /// </summary>
    [RequireComponent(typeof(InputField))]
    public class InputFieldCheck : MonoBehaviour
    {
        [SerializeField] private InputField inputField;
        private List<Char> charactersList;
    
    #if UNITY_EDITOR
        private void Reset()
        {
            inputField = GetComponent<InputField>();
        }
        private void OnValidate()
        {
            inputField = GetComponent<InputField>();
        }
    
    #endif
    
        private void Awake()
        {
            if (inputField == null)
            {
                inputField = GetComponent<InputField>();
            }
            if (inputField.characterLimit > 0)
            {
                charactersList = new List<char>(inputField.characterLimit);
            }
            else
            {
                charactersList = new List<char>();
            }
    
            inputField.onValueChanged.AddListener(InputOnValueChanged);
        }
    
        /// <summary>
        /// Unity这个回调,会对每次改变处理,如果是拷贝会对每次增加一个字符处理(字数越多调用越多)
        /// </summary>
        /// <param name="str"></param>
        private void InputOnValueChanged(string str)
        {
            var textCom = inputField.textComponent;
            Font font = textCom.font;
    
            // Request characters. 强制立即处理不要等UGUI的渲染(由于不是Unicode,必须调用后才有数据)
            var oldStr = str;
            font.RequestCharactersInTexture(oldStr);
    
            charactersList.Clear();
            for (int i = 0; i < oldStr.Length; i++)
            {
                CharacterInfo charInfo;
                //var charInfors = font.characterInfo;   // Editor测试,如果将字体导入设置为 ,数组大小是28522,所有都处理了?  如果就是默认的Dynamic,就很少,我看到是200多。  
                //TrueTypeFontImporter fontData = (TrueTypeFontImporter)AssetImporter.GetAtPath("Assets/SparkAssets/Fonts/Font0.ttf");
                //fontData.fontTextureCase = FontTextureCase.Unicode;   // Dynamic
                //fontData.SaveAndReimport();
    
                var have = font.GetCharacterInfo(oldStr[i], out charInfo);
    
                //have = !font.HasCharacter(Text.text[i]);
                if (!have || (charInfo.glyphHeight == 2 && charInfo.glyphWidth == 2 && oldStr[i] != ' '))
                {
                    CharToList(i, '*');
                }
                else
                {
                    CharToList(i, oldStr[i]);
                }
            }
    
            var newStr = new string(charactersList.ToArray());
            inputField.text = newStr;  // 不会触发 onValueChanged
        }
    
        private void CharToList(int index, char c)
        {
            if (charactersList.Count <= index)
            {
                charactersList.Add(c);
            }
            else
            {
                charactersList[index] = c;
            }
        }
    }
    

     

     

     

     

    28、指定文件夹下的内容强制变脏 Dirty ,重新序列化

    问题是(也不算问题):

    public class Example : MonoBehaviour
    {
        public int m_AAAAA;
        public int m_BBBBB = 151;
    }

    例如,如果预制件附有上述组件

    如果有一点脚本更改为:

    public class Example : MonoBehaviour
    {
    }

    但是Prefab中已经序列化的内容是不会被删除的, 这个是Unity的机制问题。

    有人写了一个Editor脚本, Project中选中组件, 通过点击菜单,就可以让引用这个组件的所有Prefab变脏。

    https://github.com/Syy9/UnityForceDirty/blob/master/UnityForceDirty.cs

     

     

     

     

     

     

    29、详细了解Unity的本机UI系统的工作原理

    https://connect.unity.com/p/ui-batching-in-unity

    Canvas的主要功能是将元素批处理在一起。批处理意味着它需要具有相同纹理和材质的所有相同元素,并且如果可以的话,尝试将它们放入1个绘制调用中。如果它不能这样做,它会创建更多的绘制调用,你拥有的越多,你的UI设计效率就越低。 自5.2版以来,UI使用的批处理系统已经被拆分。这意味着所有sorting 代码都被拆分为快速的小线程,这些线程在有时间时执行(这样它们就不会阻塞主线程)。

    UI合批主要是下面这四步, 了解每一步在做什么?

    1. GenerateRendableUIInstructions

    - 获取所有Canvas Renderers数据并复制它(因为线程)。

    - 确定实际可以被渲染的指令;

    -----alpha是零吗?(如果是,则不会将其添加到渲染中,因为无需渲染)

    -----是零大小?(如果是,则不会将其添加到渲染中,因为无需渲染)

    -----它是否被RectMask2D调用?(它是否在剔除区域之外? - 如果是,那么它会被丢弃)

    2. SortForBatchingJob

    - 这里所有批处理的东西都被分类成'桶'(buckets)

    - 一旦计算了order ,它就开始准备批处理作业batch jobs

    3. PrepareBatchesJob

    - 这实际上是准备将可渲染的UI指令传递给图形设备以进行一些处理

    4. UIGeometryJob

    - 这会转换顶点,修改颜色并应用光照(如有必要)

     

    一旦UIGeometryJob完成,就会发生以下两种情况之一:

    1. 如果它是Overlay canvas,canvas 将数据直接呈现给显卡本身(在帧的末尾,在绘制其他所有内容之后)

    2. Screen Space Camera和World Space canvases,将自身插入到相机的渲染队列中,并进一步处理以与您拥有的所有其他世界几何体进行分类。

    提示:如果您不需要照明,也不需要UI内的粒子系统,Overlay画布是最快的选择,因为您不必等待其他任何事情。Unity没有对它进行任何额外的处理。

     

    BATCHING - Sorting Buckets

    每个网格'square'被认为是一个bucket(桶)。在处理排序并通过所有可渲染指令rendable instructions时,他们系统需要弄清楚 Image(用Image来说)可以放入多少桶中。如果Image 跨越3x4网格方块squares,它将被拆分为12个不同的存储区。

    如果同一个桶中有多个“items”,则会进行额外处理。计算深度((sorting order)。

    批量 - 常见问题

    1. 元素未对齐

    - 看z轴; 你应该使用相同的z; 没有相同的对齐方式会导致批次中断,因为它会影响绘制顺序并显着增加批次数。 (因为默认z是0,所以普遍认为z不为0导致问题)

    - 这可以在绘制调用计数(或调试器)中看到; 所以这是一个需要注意的巨大优化

    - 轻松解决此问题 - >选择所有UI并将其置于z = 0或任何其他值,只需将整个UI放在同一个z

    2. Sprite不共享相同的纹理

    - 不在一个图集中 (填写相同的图集名称, 确保精灵的设置相同(例如,一个可以在mip贴图上,另一个不在;)如果属性不匹配,你会得到不同的地图集; 所以只需检查您的导入设置(对于您的ui图形)并使它们完全相同,以便它们可以一起批处理)

    3. 动静分离

    - Canvas子元素属性发生变化时(例如RectTransform的值,或者可能是Image的颜色 )

    4. Graphic Raycaster与Canvas组件携手合作。它用于捕获UI的点击/触摸。

    - 如果您有多个堆叠的Graphic Raycasters,则只会触发顶部的一个。如果你使用override sorting,这是非常有效的,因为如果一个Graphic Raycaster'被触发',那么在该帧上不会检查(忽略)所有其他的。这对于按钮或阻止UI上的点击/触摸尤其有用。

     

     

    在2019.6.22 (笔记2019.6.15)的文章中 提到过:: 《在不使用UnityEngine.UI的情况下在Canvas上绘图》

    看Unity UGUI的开源代码,UnityEngine.UI.dll的内容在Bitbuckethttps://bitbucket.org/Unity-Technologies/ui中。每个人都可以阅读它, 会看到是有Dirty脏标记(顶点,材质,Layout三个脏标记吧),Unity 会在 Canvas.willRenderCanvases事件中检查脏标记,如果有就会重新绘制合批等等操作。

    http://light11.hatenadiary.com/entry/2019/06/02/214125 《如何防止因uGUI重建而导致性能下降》 uGUI性能下降有两个主要原因:图形重建和布局重建。 填充率和set-pass调用次数是导致uGUI性能下降的主要原因。 文章有分析原因和最后的建议。 特别是两者重建的不同。

    http://light11.hatenadiary.com/entry/2019/06/04/200423 《总结了降低uGUI性能的所有主要原因和解决方案。》

    Profiler的关于UI的两个统计:

     

     

     

     

     

     

     

    30、 【Unity】如何从文本中删除富文本标签(HTML标签)

    需求比如要统计文字个数(不应该算上标签) https://www.hanachiru-blog.com/entry/2018/12/29/164557

    使用C#正则表达式删除标签。

    https://docs.microsoft.com/zh-cn/dotnet/standard/base-types/regular-expressions

    using UnityEngine;
    using System.Text.RegularExpressions;     
    public class TestDeleteTag : MonoBehaviour
    {
        private const string TEXT = "请<size=12>关注</size><color=red> Twitter </color>。";
        void Start()
        {
            //请<size=12>关注</size><color=red> Twitter </color>。
            Debug.Log(TEXT);
    
            //删除<O>或<O>
            string text = Regex.Replace(TEXT, "<[^>]*?>", string.Empty);
    
            //请关注Twitter。
            Debug.Log(text);
        }
    }

     

     

     

    31、【Visual Studio】使用Format on Save插件自动代码格式化

    Format on Save :

    https://marketplace.visualstudio.com/items?itemName=WinstonFeng.FormatonSave

     

    Format document on Save : https://marketplace.visualstudio.com/items?itemName=mynkow.FormatdocumentonSave

     

    ReSharper Format On Save : https://marketplace.visualstudio.com/items?itemName=MackenzieZastrow.ReSharperFormatOnSave

     

    插件可以执行:

    • 使用BOM将字符代码设置为UTF8
    • 指定换行代码(Mac / Win)
    • 删除未使用的命名空间
    • 将制表符转换为空格
    • 调整{}的位置

     

     

     

     

     

     

    32 、 关于枚举 Enum

    enum Color
    {
        Red, // 0        //默认情况下,第一个为0
        Green, // 1
        Blue // 2
    }

    可以使用初始化器。

    enum Color
    {
        Red = 1,
        Green = 2,
        Blue = 3
    }

    每种类型的枚举都有一个基类型,可以是除char之外的任何整数类型(默认为int)。也可以明确指定。

    enum Color : byte
    {
        Red = 1,
        Green = 2,
        Blue = 3
    }

    UnityInspector默认支持 枚举的显示和选择。 单选。 做位运算不会报错,但是VS会提示警告改为Flags,也没办法位运算生效。

    但是我们有的时候需要Unity的 camera 的 CullingMask , 物理的 LayerMask 可以做多选。

    Flags

    要将枚举用作标志,请添加特殊属性System.FlagsAttribute。这需要显式初始化值,每个值都是幂值(因为要支持位运算)。

    [System.FlagsAttribute]
        public enum Color : byte    // 注意在最后测试的时候不能是byte, 因为byte没办法赋值-1
        {
            //None = 0,
            Red = 1, // 2 ^ 0
            Green = 2, // 2 ^ 1
            Blue = 4 // 2 ^ 2
        }

    使用按位OR运算,您可以组合枚举的元素,并使用HasFlag(Enum)方法检查实例中是否存在位字段。

    var color = Color.Red | Color.Green | Color.Blue;
    var hasFlag = color.HasFlag(Color.Red | Color.Green); // True

    使用按位AND操作,您还可以执行检查。

    var aColor = Color.Red | Color.Green;
    var bColor = Color.Green | Color.Blue;
    // 检查位字段
    var contains = (aColor & bColor) == bColor; // False
    // 检查位域的交集
    var overlaps = (aColor & bColor) != 0; // True

     

    但是遗憾的是UnityInspector并没有对 Flags 做默认支持。 所以需要开发自己处理。 方式最最简单就是覆盖全局的Enum显示。

    接下来,您需要实现PropertyDrawer。如果被序列化的属性具有Flags属性,那么我们将使用EditorGUI.MaskField方法进行绘制,否则使用标准的EditorGUI.PropertyField方法。另请注意,属性可以是数组的元素。下面的代码应放在名为Editor的文件夹中。

    [CustomPropertyDrawer(typeof(Enum), true)]
    public sealed class EnumPropertyDrawer : PropertyDrawer
    {
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            using (new EditorGUI.PropertyScope(position, label, property))
            {
                if (HasEnumFlagsAttribute())
                {
                    var intValue = EditorGUI.MaskField(position, label, property.intValue, property.enumDisplayNames);
    
                    if (property.intValue != intValue)
                    {
                        property.intValue = intValue;
                    }
                }
                else
                {
                    EditorGUI.PropertyField(position, property, label);
                }
            }
    
            bool HasEnumFlagsAttribute()
            {
                var fieldType = fieldInfo.FieldType;
    
                if (fieldType.IsArray)
                {
                    var elementType = fieldType.GetElementType();
    
                    return elementType.IsDefined(typeof(FlagsAttribute), false);
                }
    
                return fieldType.IsDefined(typeof(FlagsAttribute), false);
    
            }
        }
    }

    除了特定的枚举值之外,编辑器还增加了两个:

    Nothing - 整数值为0 ;

    Everything - 整数值为-1。

    当然了如果使用插件 Odin Inspector ,这些都包含了。

     

     

     

     

     

     

    33、 典型的递归

    https://docs.unity3d.com/Manual/DeactivatingGameObjects.html

    void DeactivateChildren(GameObject g, bool a) 
    {
        g.activeSelf = a;
        
        foreach (Transform child in g.transform) 
        {
            DeactivateChildren(child.gameObject, a);
        }
    }

     

     

     

    34、 如何处理从Unity到iOS和Android的剪贴板(2019版)

    Debug.Log($"剪贴板文本 = {GUIUtility.systemCopyBuffer}");
    GUIUtility.systemCopyBuffer = "新剪贴板文本";

    2017.4

    Note: iOS and Android do not support this feature.

    此时它不受支持,所以我不得不编写一个原生插件。

    2018.1

    Note: tvOS and Tizen do not support this feature.

    除了tvOS和Tizen之外。

    2019.1

    Note: tvOS does not support this feature.

    还不支持tvOS。

     

     

     

    35、 https://www.lua.org/gems/sample.pdf

                这个机制有点类似于C# 的List 。

    a = {} a.x = 1; a.y = 2; a.z = 3 目前Lua创建的空表没有预先分配的插槽。如果你用C语言编程,你可以避免与Lua的那些重复

    API函数lua_createtable。它在无所不在之后收到两个论点

    lua_State:数组部分的初始大小和散列部分的初始大小

    通过给新表提供适当的大小.

               在Lua中编程时,您可以使用构造函数来避免那些初始化

    rehashings。 当你写{true,true,true}时,Lua事先就知道了

    该表的数组部分需要三个插槽,因此Lua创建了表

    那个大小。 同样,如果你写{x = 1,y = 2,z = 3},Lua将创建一个表

    哈希部分有四个插槽。 例如,下一个循环在2.0秒内运行:

              同理,不建议: table.insert , 改为使用构造器更好。

        local buttonTypes = {}
        table.insert(buttonTypes, ButtonType.Info)
        table.insert(buttonTypes, ButtonType.Chat)
        table.insert(buttonTypes, ButtonType.AddFriend)
        table.insert(buttonTypes, ButtonType.AddBlack)
        table.insert(buttonTypes, ButtonType.SendFlower)

     

    通过反编译工具看到 , 这种创建就是数组部分, 数组长度在构造器中已经输出了

    还有一个命令表明 每50个newtable 就会进行setList 就是对数组部分操作。

    local collent2 = {

    {},

    {},

    {},

    local collent2 = {

    {1,2,3,4,5,6,7},

    {},

    {},

    {},

    构造器方式没有扩容,直接分配指定大小容量

    这种创建就是 Hash 部分, hash 长度在构造器中输出了

    还有一个命令表明 每newtable 就会进行settable 就是对hash部分操作。

    local collent2 = {

    [1] = {},

    [2] = {},

    [3] = {},

    [4] = {},

     

     

     

     

    展开全文
  • Unity3DUnity3D证书

    千次阅读 2019-02-13 15:08:05
    一、前言 话说,英语有英语等级证书,计算机也有等级证书,会计证,工程师证,那么从事Unity开发的工程师,有没有专属的职业资格证书呢。这个还是有的,分别有以下几...Unity3D美术师 Unity Certified 3D Artist ...
  • Unity3D标准资源下载

    千次阅读 2018-11-01 14:36:02
    Unity官方直Unity2018.2.0及之后,就不再默认提供标准资源(包含人称控制器、屏幕后处理特效等等)的下载链接了。 怎么办呢? 解决方法为通过Unity Asset Store下载,关键词:standard assets 资源下载到哪里了?...
  • Unity3D 2018安装教程

    万次阅读 2019-06-15 21:39:17
    安装步骤: ...Unity2018.3.0相较2017版本的在启动时稳定了很多(2017版本启动经常会卡在loading界面) 如果启动Unity2018.3.0时一直卡在loading界面进不去,可以尝试以下两种解决办法: 1.1:将计算...
  • unity3d多个版本共存

    2019-12-05 13:22:10
    用低版本打开正常,希望Unity3D版本兼容性越来越好吧。 参考:http://blog.csdn.net/anyuanlzh/article/details/15815589 我们知道要运行unity pro需要一个许可文件:Unity_v4.x.ulf。 在win7/win8系统,它放在...
  • Unity3D游戏引擎最详尽基础教程

    万次阅读 2014-02-07 19:25:10
    我一直向所有想做游戏的朋友推荐Unity3D,为什么呢?首先是因为专业,Unity3D非常强大,用它创建一个类似MiniGore这样的3D平面射击游戏简直轻而易举,而就连使命召唤这样的大型3d游戏,如果素材得当也不在话下。二是...
  • Unity3D】Helloworld

    万次阅读 2017-04-13 19:21:09
    Unity3D有个好处,是兼容往下的版本。这一点起码比起隔壁的Cocos2dx好多了,Cocos2dx现在都不知道更到什么版本了,3.x只能用VS2012以上的版本玩就算了,还和2.x的语法与配置大相径庭;另外,大家熟悉的SSH三大框架...
  • Unity3D 一些基础的3D图形学算法

    万次阅读 2015-04-03 18:18:42
    原创文章如需转载请注明:转载自 脱莫柔Unity3D学习之旅 QQ群:【Unity3D(AR/VR) 334163814】【Unity3D(游戏) 119706192】 本文链接地址: Unity3D 一些基础的方向、距离算法 最近做一款一款3D“跑酷”游戏终于要...
  • unity3d文件反编译工具

    千次下载 热门讨论 2011-06-23 17:33:39
    反编译 unity3d文件 点击'new project'选择要反编译的文件。 先点‘New project’选择unity3d文件,再点'Unpack Web Archrive in a directory'选择导出的文件夹。
  • 每周更新unity3d视频教程,从入门到就业,官方unity3d培训,上千门实时更新课程,供学员在线观看学习,unity3d游戏开发,可以让学员随时随地学习! 免费网上学习unity3d自学教程,国内名师机构专业授课,O基础快速学习,1小时...
  • [Unity3d]unity与html通信

    万次阅读 2013-12-01 00:33:12
    更多教程请访问: http://dingxiaowei.cn/ ...下面简单谈谈通过Unity3D调用HTML网页的脚本函数,以及通过HTML网页调用Unity3D中的脚本函数。 1.1Unity3D浏览器调用HTML网页中的函数 Unity3D浏览...
  • Unity3d】200个插件免费分享(所有资源已上传)

    万次阅读 多人点赞 2012-10-27 00:25:37
    接触U3D有段时间了,积累了点插件、资源、学习网站、论坛等,现在整理下,跟广大同仁们分享下! 所有资源已经上传完毕,约5G。 200个插件免费分享 【下载链接】  ...注:这份资源比较旧了,参考意义其实不大了,...
  • Unity3d与android进行交互,使用Fragment来展示Unity3d的视图,在android视图与Unity3d视图之间相互切换。
  • WinForm内嵌Unity3D

    万次阅读 热门讨论 2015-11-17 17:55:35
    Unity3D可以C#脚本进行开,使用vstu2013.msi插件,可以实现在VS2013中的调试。在开发完成后,由于项目需要,需要将Unity3D嵌入到WinForm中。WinForm中的UnityWebPlayer Control可以载入Unity3D。先看效果图。 一、...
  • Unity3d的安装

    万次阅读 2019-06-19 09:46:45
    Unity3d的安装 ** 1.在线安装 a.获取在线安装程序 第一步:进入官网:https://unity.com/cn 第二步:在主页的底部点击下载 第三步:来到UnityStore,拖到该页面的最底部,点击资源下面的Unity旧版本 第四步:来到Unity...
  • 关于Unity和Android的互相调用,网上的教程太多了,大同小异,抄来抄去。这次我就尝试着慢慢来,讲讲我的理解(简单的我会一笔带过,网上可以轻松找到答案,就不赘述了),希望大家看的时候并不是秉承着“拿来主义”...
  • Unity3d设置成中文版

    万次阅读 多人点赞 2019-09-25 11:33:57
    效果图: 要求:版本V > 2018.2或以上版本 步骤①: 下载中文语言包:链接:... ... 打开unity安装文件夹(我的是):C:\Program Files\Unity\Editor\Data,如果此文件夹下没有Localization就...
  • 本文介绍了Unity3D界面及游戏对象基本操作。
  • 2018年什么游戏最火? 不用问,肯定是人人都在撸的“王者荣耀”和吃鸡游戏了。...Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综...
  • [Unity3D]Unity3D 游戏开发之碰撞检测

    万次阅读 2014-04-07 12:43:03
    今天我们来一起来学习Unity3D中一个很重要的概念:碰撞。为什么说碰撞很重要呢?因为在游戏中无时无刻不充满碰撞啊,在飞行类游戏中我们需要判断炮弹是否击中了敌人,在RPG游戏中我们需要判断玩家是否对敌人造成了...
  • Unity3D简介

    千次阅读 2016-09-13 10:13:04
    Unity3D简介
  • Unity3D一个全面整合的专业游戏引擎

    千次阅读 2018-09-07 09:09:40
    Unity3d:https://unity3d.com/cn 参考百度百科:https://baike.baidu.com/item/Unity3D/3064002?fromtitle=Unity&amp;fromid=10793&amp;fr=aladdin Unity3D是由Unity Technologies开发的一个让玩家轻松创建...
  • 这个工具呢,博主在Unity3D游戏开发之反编译AssetBundle提取游戏资源这篇文章中其实已经提到过了,不过因为有些朋友对如何使用这个工具依然存在问题,所以博主决定特地写一篇文章来讲解如何使用disunity来提取Unity...
  • Unity3D基础3:贴图与材质球

    万次阅读 多人点赞 2019-02-02 00:56:22
    前文:https://blog.csdn.net/Jaihk662/article/details/86746464(Unity3D基础模型) 一、贴图与材质球 材质(Material):物体的质地,物体看起来是什么做的 贴图(Texture):普通的材质图片 + = 贴图 + 着色...
  • 今天我们来说说通过反编译Unity3D的AssetBundle来提取游戏资源,博主写这篇文章的目的并非是要教大家如何去破解一款基于Unity3D引擎开发的游戏,而是想通过今天这篇文章来告诉大家如何在开发Unity3D游戏的过程中保护...

空空如也

1 2 3 4 5 ... 20
收藏数 275,378
精华内容 110,151
关键字:

unity3d