Rocky Lai 的技术博客

学习、思考、分享


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

资产, 对象和序列化

发表于 2016-12-15   |   分类于 UnityKB

This is the second chapter in a series of articles covering Assets, Resources and resource management in Unity 5.

这是 Unity 5 [资产, 资源和资源管理系列文章]的第二篇。


This chapter covers the deep internals of Unity’s serialization system and how Unity maintains robust references between different Objects, both in the Unity Editor and at runtime. It also discusses the technical distinctions between Objects and Assets. The topics covered here are fundamental to understanding how to efficiently load and unload Assets in Unity. Proper Asset management is crucial to keeping loading times short and memory usage low.

这篇文章涵盖了 Unity 序列化系统的底层知识和 Unity 怎么在它的编辑器及运行时维持不同对象的稳定的引用,理解怎么样在 Unity 中高效的加载和卸载资产。正确的资产管理是保持低内存和快速加载的关键。


### 1. Inside Assets and Objects

资产和对象的内部


To understand how to properly manage data in Unity, it is important to understand how Unity identifies and serializes data. The first key point is the distinction between Assets and UnityEngine.Objects.

要理解怎么样正确的管理数据,Unity 怎么鉴别和序列化数据很重要。其中首先的关键点是理解 资产 和 对象(UnityEngine.Objects) 的区别。


An Asset is a file on disk, stored in the Assets folder of a Unity project. For example, texture files, material files and FBX files are all Assets. Some Assets contain data in formats native to Unity, such as materials. Other Assets need to be processed into native formats, such as FBX files.

一个资产是存储在 Unity Project 中资产文件夹下的文件。比如纹理文件,材质文件和 FBX 文件都是资产。有些资产包含 Unity 原生数据格式,比如材质。而有些资产需要转换成 Unity 原生数据格式,比如 FBX 文件。


A UnityEngine.Object, or Object with a capitalized ‘O’, is a set of serialized data collectively describing a specific instance of a resource. This can be any type of resource which the Unity Engine uses, such as a mesh, a sprite, an AudioClip or an AnimationClip. All Objects are subclasses of the UnityEngine.Object base class.

一个 UnityEngine.Object 或者大写字母 O 的 Object,是个序列化数据集合,用来表述某个资源的具体实例。它可以是任何 Unity 引擎使用的资源,比如一个网格,一个精灵,一个音频剪辑和一个动画片段。所有的对象都是 UnityEngine.Object 的子类。


While most Object types are built-in, there are two special types.

在 Unity 中基本所有的对象类型都是内置的,除了两种特殊的类型。

阅读全文 »

10 个鲜为人知的 Unity 技巧 - 编辑器篇

发表于 2016-09-01   |   分类于 UnityKB

1. ALT + 鼠标左键点击 Hierarchy 对象可以展开和收起对象的所有子对象

阅读全文 »

招聘 - Unity3D 程序员

发表于 2016-08-15   |   分类于 一点一滴

非凡部落招聘 Unity 工程师咯~~,欢迎喜欢 AR/VR 技术的同学发简历至 dev@vivabro.com。工作地点是北京。

关于非凡部落,请访问非凡部落的官网: http://www.vivabro.com/joinus.html。

招聘 Unity3D 工程师

任职要求

  • 大专以上学历,计算机相关专业,两年以上Unity3d开发经验,有独立开发能力;
  • 熟练掌握C# 开发语言,面向对象,有开发高质量代码习惯;
  • 熟悉掌握Unity3D引擎架构, Unity3D渲染,资源管理,性能分析等模块, 对Unity3D的组件系统有着深入的理解;
  • 熟练掌握unity3D移动端开发,熟悉 iOS/Android 平台测试和部署;
  • 熟悉代码版本管理工具,如 Git、SVN等;
  • 有开发VR/AR开发经验,了解AR开发框架Metaio, Vuforia等优先;
  • 熟悉渲染管线,有 Shader 开发经验者优先;
  • 熟悉 uGUI, 补间动画插件 DOTween, iTween 等优先;
  • 熟悉 Open CV 开发优先;

岗位职能

  • 负责公司AR产品开发和移动平台技术的研发工作;
  • 负责产品程序逻辑和UI开发工作;
  • 负责产品性能优化工作;
  • 负责产品后期的维护及解决问题修复;

Tiling 和 Offset 是什么鬼?

发表于 2016-07-03   |   分类于 UnityKB

相信做过 Unity 开发的同学都在 Inspector 里面见过 Tiling 和 Offset。一般情况下它们两总是形影相随,不分不离,你中有我,我中有你。。。咳咳,我们回归正题。正常情况下它们都是成对出现的,如下图。

inspector

讲 Tiling 和 Offset 之前我们先讲些其他相关的零散的知识。

纹理的 UV

UV 是一种标准化了的 2D 坐标系统,等同于 XY 坐标系统,为了不和 XY 混淆,用 U 和 V 分别表示对应的 X 和 Y。UV 系统中, (0, 0) 表示左纹理的下角,(1, 1) 表示纹理的右上角。

阅读全文 »

在不同平台运行不同代码的几种方式

发表于 2016-06-28   |   分类于 UnityKB

由于 Unity 支持多平台,所以写代码时,我们总会碰到一些需要在不同的平台实现不同的逻辑的情况。那在 Unity 中怎么实现呢?

总体来说有这么几种方法:

  • 最常见的就是使用预编译宏
  • 第二种方法是使用 C# 的 ConditionalAttribute 属性(Attribute)
  • 第三种运行期读取 Application.platform 字段的值判断当前是哪个平台

预编译宏

下面是一段简单的示范:

1
2
3
4
5
6
7
8
9
10

private void CompilationDirectivesWay()
{
#if UNITY_IOS
Debug.Log("在 iOS 上运行,使用预编译宏方式");
#elif UNITY_ANDROID
Debug.Log("在 Android 上运行,使用预编译宏方式");
#endif
}

阅读全文 »

Unity + openssl 生成的 RSA 秘钥实现可靠的简单数据加密

发表于 2016-03-01   |   分类于 Unity

现实中会有很多需求,对数据加密是其中一种。我们对数据的加密方式有 对称加密 和 不对称加密。对称加密就是使用相同的秘钥和算法加密明文和解密密文。而不对称加密,就是有加密和解密使用不同秘钥的算法,其中对外公开的叫 公钥(public key),不公开的叫 密钥(private key)。本文中要提到的 RSA 算法就是一种不对称加密算法。

RSA 介绍

关于 RSA, 详细介绍 请看这里。

这里做个大白话来解释,RSA 是一个配有两把钥匙的“锁”。一般情况下使用公开的钥匙(public key)来把数据锁住,然后另外一个不公开的钥匙 (private key)开锁来得到数据。

RSA 秘钥生成

上面提到RSA 是不对称算法,它有 public key 和 private key,下面我们用 openssl 来生成它们。下面使用 OSX 系统上自带的 openssl 来生成秘钥。

➜ ~ openssl
OpenSSL> genrsa -out rsa_private_key.pem 1024
Generating RSA private key, 1024 bit long modulus
……….++++++
……………………++++++
e is 65537 (0x10001)
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
—–BEGIN PRIVATE KEY—–
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKGhqNRI8ygdZcsW
FofWo0+ERSJSQDIjDCrkWlDkKmQP3miYs0ARb00ik95z3IIRp0NCSmDJMRS2Gjdj
jNXlHNLZOw05OtH+47Hi3IGmi+dFDzPgux4KzXfs5eOXkhLfSR7XQ2ju1A5q6lAw
mXFR8IqEMR73EbwXZM6GHmMC0yglAgMBAAECgYAffJ2mFTwBQZDV+kyTU9XmpK7P
G9TTr44sQOXzQi+b5JeAKtcokPzsuuKxgEKhuAyshpp0tlzwWvVKewMxm/t8LIEq
O7rwk4w/9Hx5CX+gOogOc6HnjEAucUqr9qxBIsKyvt7V+PlZmytnIamnV3GA7fVV
O0APf1DtkU30eGnlAQJBAM2UMpOBwvBchWiYymnRtCyCf7qPGrbNb748a12Ca9Fc
eEqdH3FQGBSAUX2xij6exhGAHVPCIfwe9p+A2UTFMGUCQQDJRhwjZ0gnec8pjECX
hzaulzsu96ypXZltYaOsArP3pnrD4VzNy8aaplgwMXPBl3/sDyAQkRiLg4ExUUk1
ajzBAkB9EZ8fbH9ree5T7zid3k2uEoqgtjU7Z4qHAv0Su6jai1ZHloWti1vLBTIO
tTd012WK+hVdgqroVvIVoe8MzqadAkEAnD0RMKZGy2Xx2uWlajqqxuJcLbxSynH+
3Hqzq525h98yYwV4ncO2GmxP/rEUk02AHoUrNdD8BaiCS/82XgFmwQJAdCbcdxFK
ZUVK3+OCGretEHdedWuVPXEhfiLDpguog994jdoCMCmGviKiOURNo3QsK5DfT0+A
Lw307ILOc1dqcg==
—–END PRIVATE KEY—–
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
writing RSA key
OpenSSL>

然后 openssl 会为我们生成两个文件,分别叫做 rsa_private_key.pem 和 rsa_public_key.pem。

与 Unity 结合

阅读全文 »
123…8
Rocky Lai

Rocky Lai

48 日志
4 分类
14 标签
GitHub 邮件
© 2014 - 2017 Rocky Lai
由 Hexo 强力驱动
主题 - NexT.Mist