叮当你个喵 的blog

Unity资源解决方案之AssetBundle

1、什么是AssetBundle

AssetBundle是Unity pro提供的一种用来存储资源的文件格式,它可以存储任意一种Unity引擎能够识别的资源,如Scene、Mesh、Material、Texture、Audio、noxss等等,同时,AssetBundle也可以包含开发者自定义的二进制文件,只需要将自定义文件的扩展名改为.bytes,Unity就可以把它识别为TextAsset,进而就可以被打包到AssetBundle中。Unity引擎所能识别的资源我们称为Asset,AssetBundle就是Asset的一个集合。

AssetBundle的特点:
压缩(缺省)、动态载入、本地缓存;

2、AssetBundle VS Resource

AssetBundle作为Unity官方推崇的资源更新方案,与传统的Resource差异如下:
a、Resource放在Resources目录下,resources.assets文件,单个文件有2GB限制,首次必须全部下载;
b、AssetBundle创建需要通过Editor脚本创建,支持动态下载,是Unity Web Caching License唯一可以缓存的内容;

【Unity编程】Unity中关于四元数的API详解

Quaternion类

Quaternion(四元数)用于计算Unity旋转。它们计算紧凑高效,不受万向节锁的困扰,并且可以很方便快速地进行球面插值。 Unity内部使用四元数来表示所有的旋转。

Quaternion是基于复数,并不容易直观地理解。 不过你几乎不需要访问或修改单个四元数参数(x,y,z,w); 大多数情况下,你只需要获取和使用现有的旋转(例如来自“Transform”),或者用四元数来构造新的旋转(例如,在两次旋转之间平滑插入)。

大部分情况下,你可能会使用到这些函数:
  •  Quaternion.LookRotation,
  •  Quaternion.Angle
  •  Quaternion.Euler
  •  Quaternion.Slerp
  •  Quaternion.FromToRotation
  •  Quaternion.identity。

Quaternion 是一个结构体,本身成员变量相对简单,可以作为函数参数高效传递。-

【Unity优化】Unity优化技巧进阶

做游戏好多年了,关于游戏优化一直是另开发者头疼的一个问题。因为优化牵扯的内容很多,要求掌握的知识点比较全面。在接下来的系列文章中,我想分享一下自己的一些经验。一些有误或者不完善之处请小伙伴们给我意见,加入一起探讨和学习。

程序消耗

所谓的优化,目的应该是尽可能减弱某种消耗,而在Unity上来说,大概可以分为以下几种:
  •   程序的运行速度
  •   程序的资源消耗
  •   程序的功耗消耗

程序的运行速度,一般是指运行帧率,也包括加载速度。是我们首要考虑的重点,也是将会花最多的精力去探讨的话题,运行帧率是游戏类项目的一个非常重要的性能指标,帧率的下降将直接导致游戏体验的下降。

程序的资源消耗,一般是指包体大小,占据用户客户端的存储空间大小,也包括网络消耗,占据多少带宽。这些虽然不那么影响用户当下的体验,不过指标太高也会降用户接受度。

程序的功耗消耗,一般是指应用程序的耗电量,一款程序做的很好,但是功耗太高,使用后短时间内发热太厉害,也会导致玩家无法使用。这种优化跟显卡直接关联,显卡厂商也有很多优化测试和评估程序帮助我们实现降低功能。

【Unity编程】欧拉角与万向节死锁(图文版)

万向节死锁(Gimbal Lock)问题

上文中曾经说过,欧拉旋转的顺规和轴向定义,自然造就了“万向节死锁”问题。本文主要来探索它自然形成的原因。

陀螺仪

首先,我们来了解Gimbal 究竟是个什么玩意儿。下面来自维基百科中关于Gimbal的一段引述:

平衡环架(英语:Gimbal)为一具有枢纽的装置,使得一物体能以单一轴旋转。由彼此垂直的枢纽轴所组成的一组三只平衡环架,则可使架在最内的环架的物体维持旋转轴不变,而应用在船上的陀螺仪、罗盘、饮料杯架等用途上,而不受船体因波浪上下震动、船身转向的影响。

【Unity编程】欧拉角与万向节死锁(图文版)

【Unity编程】Unity中的欧拉旋转

莱昂哈德·欧拉用欧拉角来描述刚体在三维欧几里得空间的取向。对于任何参考系,一个刚体的取向,是依照顺序,从这参考系,做三个欧拉角的旋转而设定的。所以,刚体的取向可以用三个基本旋转矩阵来决定。换句话说,任何关于刚体旋转的旋转矩阵是由三个基本旋转矩阵复合而成的。

对于在三维空间里的一个参考系,任何坐标系的取向,都可以用三个欧拉角来表现。参考系又称为实验室参考系,是静止不动的。而坐标系则固定于刚体,随着刚体的旋转而旋转。参阅下图。设定xyz-轴为参考系的参考轴。三个欧拉角: (αβγ),蓝色的轴是xyz-轴,红色的轴是XYZ-坐标轴。称xy-平面与XY-平面的相交为交点线(绿色),用英文字母(N)代表。

zxz顺规的欧拉角可以静态地这样定义:
  •   α是x-轴与交点线的夹角,
  •   β是z-轴与Z-轴的夹角,
  •   γ是交点线与X-轴的夹角。

【Unity编程】Unity中的欧拉旋转

全面理解Unity加载和内存管理

Unity里有两种动态加载机制:一是Resources.Load,一是通过AssetBundle,其实两者本质上我理解没有什么区别。Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时动态加载,可以指定路径和来源的。

其实场景里所有静态的对象也有这么一个加载过程,只是Unity后台替你自动完成了。

详细说一下细节概念:

AssetBundle运行时加载:

来自文件就用CreateFromFile(注意这种方法只能用于standalone程序)这是最快的加载方法
也可以来自Memory,用CreateFromMemory(byte[]),这个byte[]可以来自文件读取的缓冲,www的下载或者其他可能的方式。

其实WWW的assetBundle就是内部数据读取完后自动创建了一个assetBundle而已
Create完以后,等于把硬盘或者网络的一个文件读到内存一个区域,这时候只是个AssetBundle内存镜像数据块,还没有Assets的概念。

Assets加载:

Unity 2018.2正式推出,带来一系列3D内容优化

Unity刚刚更新了他们的3D引擎,为今年年初推出的Scriptable Render Pipeline带来了一系列的优化。

Scriptable Render Pipeline(SRP)最初以预览功能的方式来到了Unity 2018.1,其可以帮助开发者根据硬件配置文件来优化应用程序的性能。Unity的Lightweight Render Pipeline(LWRP)专为在智能手机和平板电脑上运行高质量沉浸式内容而设计,而High Definition Render Pipeline(HDRP)则允许开发者利用高性能的游戏主机和PC。

Unity的高级产品市场营销经理Thomas Krogh-Jacobsen在博文中写道:“Unity 2018.2的目标之一是,在Scriptable Render Pipelines(SRP)的基础上进一步优化,从而实现新水平的渲染。我们的另一个重点是开发一系列的功能和优化,从而帮助你在移动领域取得成功。”

关于unity的各种贴图

贴图的英语 Map 其实包含了另一层含义就是“映射”。其功能就是把纹理通过 UV 坐标映射到3D 物体表面。贴图包含了除了纹理以外其他很多信息,比方说 UV 坐标、贴图输入输出控制等等。材质是一个数据集,主要功能就是给渲染器提供数据和光照算法。

关于unity的各种贴图

漫反射贴图diffuse map :漫反射贴图在游戏中表现出物体表面的反射和表面颜色。换句话说,它可以表现出物体被光照射到而显出的颜色和强度。我们通过颜色和明暗来绘制一幅漫反射贴图,在这张贴图中,吸收了比较多的光线的部分比较暗,而表面反射比较强的部分,吸收的光线比较少。

七个方法让你的unity项目更条理!

一天,我在Quora上看到一个人问:程序员如何用超过一万行的代码编写一个项目。软件做的越大,维护就越困难,这是一个不争的事实。所以这面临的问题就是如果你不让你的项目有条理,就会很难维护它。到后期,你就会发现你并不是在添加新功能而是在把时间浪费在一个凌乱的项目上。每一个Unity项目也是这样的。在我看来,这是非常重要的技巧,可以帮助你保持你的项目条理性。

1. Directory Structure 【目录结构】

我们不能够在不提到项目目录结构的情况下谈论组织结构。Unity让你可以自由的创建自己想要的目录结构,也正是因为这样,它可能让项目很混乱。下面是我个人使用的目录结构:

3rd-Party(第三方资源)
s
Audio
1、Music
2、SFX
Materials
Models
Plugins
Prefabs
Resources
Textures
Sandbox
Scenes
1、Levels
2、Other
Scripts
1、Editor
Shaders

不要在根目录存储任何资源文件,尽可能使用子目录。

除非需要,否则不要在根目录中创建一些额外目录。(意思是不要在根目录创建一些无用目录)

Unity VS Unreal,游戏开发该如何选择引擎?

随着游戏开发的不断进步,游戏开发越来越庞大复杂,因此游戏引擎已经成为游戏开发必不可少的工具。引擎对基本的功能封装,对工具链的提供等都可以大幅降低游戏引擎的开发难度,提高开发速度和质量。

同步内容
--电子创新网--
粤ICP备12070055号