mypro334 发表于 2021-9-26 10:19

3D可视化开发调研学习笔记

3D开发中涉及到的技术


OpenGL

OpenGL 是用于渲染 2D 、3D 矢量图形的跨语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来绘制从简单的图形比特到复杂的三维景象。而另一种程序接口系统是仅用于 Microsoft Windows 上的Direct3D。OpenGL 常用于 CAD 、虚拟现实、科学可视化程序和电子游戏开发。

WebGL

WebGL(全写 Web Graphics Library )是一种 3D 绘图协议,这种绘图技术标准允许把 JavaScript 和 OpenGL ES 2.0 结合在一起,通过增加 OpenGL ES 2.0 的一个 JavaScript 绑定,WebGL可以为 HTML5 Canvas 提供硬件 3D 加速渲染,这样 Web 开发人员就可以借助系统显卡来在浏览器里更流畅地展示 3D 场景和模型了,还能创建复杂的导航和数据视觉化。显然, WebGL 技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂 3D 结构的网站页面,甚至可以用来设计 3D 网页游戏等等。

WebGL 通过 HTML5 的 Canvas 来和 DOM 打交道。因此也和 OpenGL ES 2.0 一样,使用 GLSL 作为 Shading Language (一种 C-Like 顶点计算和着色的语言,缓存编译到 GPU,由 GPU 来执行),由于目前canvas的性能在移动端设备上表现还不理想,因此性能上会有不少损耗


OpenGL 和 WebGL 主要是底层图形接口,一般只负责绘制图形,如果需要实现一些场景渲染,交互,光照,物理检测等功能,就需要基于计算机图形学实现大量的代码,因此就出现了很多基于 OpenGL 和 WebGL 实现的一些 3D 游戏引擎
什么是游戏引擎

游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些交互式实时图像应用程序的核心组件。这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在于让游戏设计者能容易和快速地做出游戏程式而不用由零开始。大部分都支持多种操作平台,如Linux、Mac OS X、微软Windows。游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。
<hr>目前市场最主流的两大游戏引擎 Unity 和 Unreal 对比

Unity Engine


Unity 于2005 年第一次作为一种商业产品开始销售。当时,它与我们大多数人并没有什么特别的关系……因为那是当时的Mac独有的产品。但在2007年,Unity 被带到了 Windows 平台,并真正开始发展起来。第二年,苹果应用商店 (Apple App Store) 和随之而来的手机游戏《 淘金热 》( goldrush ) 问世。

Unity 一开始的定位就是:让游戏开发更易于上手,并向更广泛的受众开放。毋庸置疑他们是成功的。随后,他们还推出了一个非常成功的广告平台 (Unity Ads),打造了一个面向 Unity ,iOS 和 Android 开发人员的获利平台。

从那以后,Unity 继续添加了许多新功能,更重要的是,Unity 几乎可以面向你听过的任意一个平台发布游戏。最近几年,Unity更多地聚焦于提升引擎的性能和渲染技术,这使 Unity 成为一个真正的 3A 引擎。DOTS 和可脚本化渲染管道之类的功能极大地提高了视觉质量。
Unreal


Unreal是UNREAL ENGINE(虚幻引擎)的简写,由Epic开发,是世界知名授权最广的游戏引擎之一。
虚幻技术研究中心在上海成立,该中心由GA国际游戏教育与虚幻引擎开发商EPIC的中国子公司EPIC GAMES CHINA联合设立。

“Unreal Engine 3”3D引擎采用了最新的即时光迹追踪、HDR光照技术、虚拟位移…等新技术,而且能够每秒钟实时运算两亿个多边形运算,效能是“Unreal Engine”的100倍,而通过NVIDIA的GeForce 6800显示卡与“Unreal Engine 3”3D引擎的搭配,可以实时运算出电影CG等级的画面,效能非常非常恐怖。
Unity 和 Unreal 对比


image

开发语言对比

Unity


在Unity中,曾经有几种支持的脚本语言,C#,Boo(类似Python),UnityScript(类似 JavaScript/ECMAScript )。最近几年 Boo 和 UnityScript 支持都不怎么用了,剩下 C# 作为开发主要语言。从好的方面来看,自从 Mono 免费以来,Unity 现在有了 C# 的当前实现,而不是落后于语言开发近十年。Unity 目前正在向 DOTS 或面向数据的技术堆栈迁移,这是 C#、ECS 或 Entity Component System 的高性能子集与并行计算的结合,侧重于 Jobs 系统,有望实现 C++ 级别的性能。Unity 中的 Build 时间非常快。
Unreal


Unreal有两种主要的编程语言:C++ 和 Blueprints 。C++ 有一个完整的垃圾收集系统,现在有一个由 Live++ 支持的实时重装系统,这使得 C++ 很像一种脚本语言。Blueprints 是一个基于图形的可视化编程系统,它可能是最好的可视化编程选项。它还能够编译成 C++ 代码,从而降低使用它的性能成本。Unreal 的 build 时间不算太好

相比Unity使用 c# 进行开发,Unreal的 c++ 在开发方面的上手难度更大,尤其内存处理上,稍有不慎就会引发大量问题,Unreal 在图形展示上对比 Unity 效果更好,视觉更突出,但是同时对硬件的要求也更高,对于移动端的性能消耗更大
引擎费用

Unity


Unity的授权是按照席位给的。10个人的团队的话,需要购买10个席位,然后把10个席位赋予10个账号。所以,没有错,按照你说的情况,你需要支付大约14万每年。一个团队所有人都应该使用相同的授权,不能有的使用免费,有的使用Plus,有的使用Pro。免费版的使用条件是过去12个月的资金或收入小于10万美元。如果是,就可以使用免费版了。另外,如果团队过去12个月的资金或收入小于20万美元,是允许使用Plus版的。另外,一般上团队并不是每个人都需要使用Unity,只要按照需要使用的人数购买就可以了。
Unreal


如果我们开发的这款游戏总收益低于100万美元,那么Unreal是免费使用的;但是如果我们的游戏收益超过这个数额,那么将被收取游戏总收益的5%
小结


综合对比下来,Unity 更适合小团队开发,上手快,对移动端的开发支持也更多,考虑接下来的项目规模,以及团队人数,目前针对 Unity 3D 进行学习,开发
Unity 3D 开发

Unity 开发工具安装

Unity 版本


在Unity 5.X版本以后,取消了以数字命名的版本规则,而采用年份来表示。此外,Unity公司宣布了Unity全新的版本发布计划,包括技术前瞻版本(简称:Unity TECH版)和Unity LTS稳定支持版本(简称:Unity LTS版)。其中,UnityTECH版每年都会有3个大版本更新,例如Unity 2017.1.X、Unity 2017.2.X和Unity 2017.3.X。而Unity LTS版则从Unity TECH版的最后一个版本开始,持续支持两年的时间,例如Unity 2017.4.X。所以实际开发项目时,最好使用LTS版。目前最新版本为2021.1.16f1 LTS Release 2017.4.5f1,结尾以f1表示,可以在如下链接中下载到:https://unity3d.com/cn/unity/qa/lts-releases。
Unity Editor 系统要求


image.png

Unity Editor 安装


Unity 官方提供了一个专门的工具用于下载安装 Unity 的相关开发工具,Unity Hub

Unity Hub 是一个独立应用程序,可简化查找、下载和管理 Unity 项目和安装内容的方式。此外,还可以手动将已安装在计算机上的 Editor 版本添加到 Hub。

可将 Hub 用于以下目的:

管理 Unity 帐户和 Editor 许可证。

创建项目,将默认版本的 Unity Editor 与项目关联,并管理安装的多个 Editor 版本。

从 Project 视图中启动不同版本的 Unity。

在不启动 Editor 的情况下管理和选择项目构建目标。

同时运行两个 Unity 版本。

请注意,为了防止本地冲突和其他奇怪场景,应该一次只在一个 Editor 实例中打开一个项目。

将组件添加到目前已安装的 Editor 中。 通过 Unity Hub 下载 Editor 版本时,可以在初始安装期间或以后的日期查找和添加其他组件(如特定的平台支持、Visual Studio、脱机文档和标准资源)。

使用项目模板来快速启动常见项目类型的创建过程。在创建新项目时,Unity 的项目模板提供了常用设置的默认值。项目模板可批量预设目标游戏类型或视觉保真度级别的设置。

下载地址: https://unity3d.com/get-unity/download?_ga=2.161556027.684064872.1631491406-1616045776.1627375263

下载安装成功之后打开 Unity Hub

image.png


image.png

选中安装,点击新建,就可以根据自己的需求安装 Unity Editor 开发工具了

image.png


image.png

安装完成之后,选中项目,新建,就可以根据需求创建需要的 3D 项目了
Unity Editor 界面简介


image.png

如图所示,是新建的 Unity 3D 项目界面,项目中的几个主要窗口如下:
Project 窗口


Project 窗口显示与项目相关的所有文件,该窗口是在应用程序中导航和查找资源以及其他项目文件的主要方法。默认情况下,启动一个新项目时,此窗口将打开。然而,如果找不到该窗口或者该窗口已关闭,可以通过 Window > General > Project 或者使用键盘命令 Ctrl + 9__(macOS 上为 Command + 9__)将其打开
Sence 窗口


Scene 视图是正在创建的世界的交互式视图。Scene 视图可用于选择和定位景物、角色、摄像机、光源和所有其他类型的游戏对象。

当您创建一个新项目并首次打开时,Unity 会打开一个仅包含一个摄像机和一个光源的示例场景。
Game 窗口


从应用程序中的摄像机渲染 Game 视图。该视图代表最终发布的应用程序。需要使用一个或多个摄像机来控制玩家在使用应用程序时看到的内容,游戏运行的内容会在game 窗口展示
Hierarchy 窗口


Hierarchy 窗口显示场景中的每个游戏对象,如模型、摄像机或预制件。可以使用 Hierarchy 窗口对场景中使用的游戏对象进行排序和分组。在 Scene 视图中添加或移除游戏对象时,也会从 Hierarchy 窗口添加或移除它们。

Hierarchy 窗口还可以包含其他场景,每个场景都包含自己的游戏对象

创建的 3D 项目默认会带一个 Camera 摄像机对象 以及 Light 光照对象
Inspector 窗口


使用 Inspector 窗口可对 Unity 编辑器中几乎所有内容(包括游戏对象、Unity 组件、资源、材质)查看和编辑属性和设置,以及查看和编辑编辑器内的设置和首选项。
Console 窗口


Console 窗口显示 Unity 生成的错误、警告和其他消息。

使用 Debug 类也可以在控制台中显示自己的消息。

写入控制台窗口的所有内容(由 Unity 或您自己的代码)也会写入到日志文件。
Unity 常用项目工程结构及文件简介


在 Project 窗口中,我们一般会创建如下目录
Assets


这是 Unity 3D 的主项目目录,Unity 的所有项目文件都存放在这个目录下
Editor


Editor 是编辑器类存放文件夹, Unity 提供了大量的 Api 来帮助开发人员自定义开发编辑器,可以在现有开发工具基础上自定义大量的编辑器功能,实现自定义工具栏,窗口,编辑器按钮等复杂功能

如图代码所示,我们自定义一个 菜单栏 menu,在 Editor 目录下创建一个 TestMenu.cs 文件, 只需在代码中配置注解
MenuItem("MyTools/Tool21", false,1)]


image.png

完成代码后 Ctrl + S 保存,此时编译完成后,Unity Editor 的菜单栏就会多出我们自定义的 菜单,点击会执行我们添加注解的方法的内容


image.png

ExternalLibraries


大型完善的外部库文件存放目录,如NGUI等拥有完善的目录结构和大量代码的插件,就存放在此目录。有些人喜欢把NGUI目录直接存放在plugins目录下其实是不太好的,因为plugins文件夹也是要参与编译的。
GameAssets


游戏美术资源存目录
Models


模型文件夹,如图,一般存放的是一些由美术人员通过 maya ,3d max, blender等 3d 建模工具制作的物体原始模型。

机器人

Materials


机器人材质球

 
材质球目录,要在 Unity 中绘制某物,您必须提供描述其形状的信息以及描述其表面外观的信息。

这些信息使用网格描述其形状,如图

image.png

使用 texture 纹理描述其图形表面外观

image.png

组合起来就形成了材质球
Textures


贴图文件目录
通常情况下,对象的网格几何形状仅给出粗略的近似形状,而大多数精细的细节由纹理提供。纹理就是应用于网格表面上的标准位图图像。您可以看作纹理图像好像是打印在橡胶板上,然后将橡胶板拉伸并固定在网格上的适当位置。纹理的定位是通过用于创建网格的 3D 建模软件完成的。

具有树皮的圆柱体

如图,我们给圆柱体添加了树皮纹理
Animations


用来存放动画文件

Unity 有一个丰富而复杂的动画系统(有时称为“Mecanim”)。该系统具有以下功能:
为 Unity 的所有元素(包括对象、角色和属性)提供简单工作流程和动画设置。支持导入的动画剪辑以及 Unity 内创建的动画人形动画重定向 - 能够将动画从一个角色模型应用到另一角色模型。对齐动画剪辑的简化工作流程。方便预览动画剪辑以及它们之间的过渡和交互。因此,动画师与工程师之间的工作更加独立,使动画师能够在挂入游戏代码之前为动画构建原型并进行预览。提供可视化编程工具来管理动画之间的复杂交互。以不同逻辑对不同身体部位进行动画化。分层和遮罩功能
Prefabs


预制体目录
Unity 的预制件系统允许创建、配置和存储游戏对象及其所有组件、属性值和子游戏对象作为可重用资源。

通俗点讲就是 Unity 配置好属性的一些模型模板,比如山体,植物,人物,等等,prefab 文件可以直接拖拽到场景中进行使用
Sounds


声音文件,用来存放 Audio 等音频文件
UI


存放一些UI文件,如Atlas等, Altas 类似 css 里的 css sprite ,将多张图片合并到一张图上,由于单张图片会触发一次 cpu drawcall 指令,图片过多会多次触发,导致性能问题,合并多张图片到单张图集后,只会触发一次 drawcall 指令
Plugins


dll和一些纯代码插件,用来扩展 Unity Editor
Resources


所有需要通过Resource.Load加载的资源都存放于此
Scenes


游戏场景的存放目录
Scripts


游戏脚本文件存放位置
StreamingAssets

在Unity工程中, 放在StreamingAssets文件夹中的任何资源都将被原样复制到目标设备上的一个特定文件夹中。在任何平台中总可以统一使用Application.streamingAssetsPath 属性来获得这一文件夹路径。
Unity 中常用功能及相关概念简介

Unity 三维数学


由于 Unity 3D 是在三维空间中,因此我们需要对一些三维数学知识有一定的了解,其中最重要的概念之一就是向量
向量概念

向量的数学定义

向量就是一个数字列表,对于程序员来说一个向量就是一个数组。
向量的维度就是向量包含的“数”的数目,向量可以有任意正数维,标量可以被认为是一维向量。
书写向量时,用方括号将一列数括起来,如 水平书写的向量叫行向量 垂直书写的向量叫做列向量
向量的几何意义

几何意义上说,向量是有大小和方向的有向线段。向量的大小就是向量的长度(模)向量有非负的长度。
向量的方向描述了空间中向量的指向。
向量的形式:向量定义的两大要素——大小和方向,有时候需要引用向量的头和尾,下图所示,箭头是向量的末端,箭尾是向量的开始
向量加减


两个向量的维数相同,那么它们能相加,或者相减。结果向量的维数与原向量相同。向量加减法的记发和标量加减法的记法相同。例如: + =
减法解释为加负向量,a-b=a+(-b) 例如: – =

向量不能与标量或维数不同的向量相加减。

和标量加法一样,向量加法满足交换律,但向量减法不满足交换律,永远有a+b = b+a,但a-b=-(b-a),仅当a=b时,a-b = b-a

几何解释:向量a和向量b相加的几何解释为:平移向量,使向量a的头连接向量b的尾,接着从a的尾向b的头画一个向量。这就是向量加法的“三角形法则”。

应用场景: 用于三维空间中,两个物体之间的距离计算
向量点乘


向量点乘,又称"点积","数量积”,"内积"

从几何角度看,点乘是两个向量的长度和它们的夹角余弦值的积。

image

从名称和定义上来看,点乘的结果是标量。

点乘的名称也源自于点乘的运算符号。

image

通过上面的公式,我们还可以得到如下公式。

image

我们通过点积公式可以看出来a,b都是标量,都是正数,余弦值会根据角度有正负变化。

当(0-90)°的时候,余弦值是正数,整个点乘公式都是正的。

当90°的时候,余弦值为0,整个公式为0。

当(90-180)°的时候,余弦值是负数,整个公式为负的。

应用场景:通过上面的描述,我们可以知道,通过点积运算,我们可以计算出两个物体间的余弦值,通过这个余弦值来判断物体的前后位置
向量叉乘


又称叉积、向量积

首先叉乘的结果是向量不是标量。

叉乘的名称也来源于符号

image

叉乘的公式定义稍微复杂一点。

image

叉乘最后的结果是一个向量,大小可以根据公式算出,但是方向要根据右手法则确定。

image

应用场景:向量的叉乘主要用于计算三维空间中一个物体相对于另一个物体的方向
欧拉角与四元数


欧拉角与四元数都是 Unity 中用来表示三维空间坐标的

四元数 ( Quaternion ) :
四元数可用于表示物体的方向或旋转。该表示法内部包含四个数字( 在Unity中称为x,y,z 和 w ),但是这些数字并不表示角度或轴,因此通常不需要直接访问它们。除非您对四元数的数学特别感兴趣,否则您只真正需要知道四元数表示3D空间中的旋转,并且通常不需要知道或修改 x,y 和 z 属性

欧拉角 ( EulerAngles ) :
欧拉角相对于四元数更加直观,可以直接看到旋转的角度,欧拉角的取值范围在0到360度,我们通常对于具体的角度的旋转使用欧拉加是简单方便的一种方式。

欧拉角虽然直观,但是会出现一种现象,称作万向节死锁
万向节死锁

欧拉角的优点:

image

欧拉角的缺点:

image

贴图

UV 贴图


什么是UV贴图和展开?
法线贴图


法线贴图 (Normal Map) 是一种凹凸贴图 (Bump Map)。它们是一种特殊的纹理,可让您将表面细节(如凹凸、凹槽和划痕)添加到模型,从而捕捉光线,就像由真实几何体表示一样。

例如,您可能希望显示一个表面,在表面上有凹槽和螺钉或铆钉,比如飞机机身。为实现此目的,一种方法是将这些细节建模为几何体,如下所示。


如图,蓝色的部分为法线贴图,物体贴上这个贴图后就会形成左边凹凸纹理的效果

更多参考: https://docs.unity3d.com/cn/current/Manual/StandardShaderMaterialParameterNormalMap.html
高度贴图


高度贴图(也称为视差贴图)是与法线贴图类似的概念,但是这种技术更复杂,因此性能成本也更高。高度贴图往往与法线贴图结合使用,通常情况下,当纹理贴图负责渲染表面的大型凸起时,高度贴图用于为表面提供额外的定义。

虽然法线贴图可修改纹理表面上的光照,但视差高度贴图更进一步并实际上可移动可见表面纹理的区域,从而实现一种表面级遮挡效果。这意味着,对于明显的凸起,它们的近侧(面向摄像机)将膨胀和扩大,而它们的远侧(背离摄像机)将减小并且看起来被遮挡。

这种效果尽管可以产生非常令人信服的 3D 几何体表示,但仍然受限于对象网格的平面多边形的表面。也就是说,虽然表面凸起看起来会突出和相互遮挡,但模型的“轮廓”绝不会被修改,因为最终效果将绘制到模型的表面上,不会修改实际的几何体。

高度贴图应为灰度图像,其中以白色区域表示纹理的高区域,以黑色表示低区域。以下是典型的反照率贴图和要匹配的高度贴图。

反照率颜色贴图和要匹配的高度贴图。


image

上图从左到右为: 1.分配了反照率贴图但未分配法线贴图和高度贴图的岩石墙壁材质。 2.分配了法线贴图。表面上的光照经过修改,但岩石不会相互遮挡。 3.分配了法线贴图和高度贴图的最终效果。岩石看起来从表面突出,较近的岩石似乎遮挡了它们后面的岩石。
遮挡贴图


遮挡贴图用于提供关于模型哪些区域应接受高或低间接光照的信息。间接光照来自环境光照和反射,因此模型的深度凹陷部分(例如裂缝或折叠位置)实际上不会接收到太多的间接光照。

遮挡纹理贴图通常由 3D 应用程序使用建模器或第三方软件直接从 3D 模型进行计算。

遮挡贴图是灰度图像,其中以白色表示应接受完全间接光照的区域,以黑色表示没有间接光照。有时,对于简单的表面而言,这就像灰度高度贴图一样简单。

在其他情况下,生成正确的遮挡纹理稍微复杂一些。例如,如果场景中的角色穿着罩袍,则罩袍的内边缘应设置为非常低的间接光照,或者完全没有光照。在这些情况下,遮挡贴图通常将由美术师制作,使用 3D 应用程序基于模型自动生成遮挡贴图。

此遮挡贴图指明了角色袖子上暴露或隐藏在环境光照下的区域。它用于下图所示的模型。

<figcaption style="display: block; margin: 0px 0px 10px; font-size: 0.875em; color: rgb(153, 160, 167);">此遮挡贴图指明了角色袖子上暴露或隐藏在环境光照下的区域。它用于下图所示的模型。</figcaption>

应用遮挡贴图之前和之后的比较。在左侧,部分遮挡的区域(尤其是颈部周围的织物褶皱)的光照亮度太高。在分配环境光遮挡贴图后,这些区域不再被周围树木繁茂环境的绿色环境光所照亮。

PBR 材质


PBR 指的是"Physically Based Rendering"。也就是基于物理正确的方式来计算灯光与材质,实际上这个概念很早以前就有,并且很多已知的算图引擎如 Vray、MR、甚至近几年的Octane、Redshift 都是 PhysicallyBased Rendering。在 Keyshot 中,高级材质也是 PBR 属性的材质。

使用了 PBR 材质贴图的物体, 渲染出来的效果更接近现实世界
Unity 常用功能简介

Timeline


Timeline 是 Unity2017 开始新增的一个用于方便组织场景动画的工具,可用来制作剧情动画、技能演出等,实现一些过场动画之类的效果
Timeline的简单使用方法
Cinemachine


Cinemachine 也是 Unity2017 新增的一个功能,可以配合 Timeline 来实现一些影视运镜的效果,也可以轻松完成一些人物视角功能的实现
Unity Cinemachine 初识
Recorder


Unity Recorder是一个编辑器中的录制工具(仅能用于编辑器中),可以在运行模式下将Unity场景及动画、Timeline录制成动画或视频。
相对于直接录屏有这么几点好处:
可以自定义输出分辨率,不再受限于屏幕的分辨率。可以同时录制多个机位(多个Camera镜头的输出)。支持输出多种类型的输出(视频、序列帧、GIF,包括360全景图和全景视频)。视频图片的压缩很好。可以和Timeline一起用。
Navigation


Navigation(导航)是用于实现动态物体自动寻路的一种技术,它将游戏场景中复杂的结构关系简化为带有一定信息的网格,并在这些网格的基础上通过一系列相应的计算来实现自动寻路。
Unity Navigation(导航系统)的使用和常用属性
刚体 ( Rigidbody )


Unity 3D 中的 Rigidbody(刚体)可以为游戏对象赋予物理属性,使游戏对象在物理系统的控制下接受推力与扭力,从而实现现实世界中的运动效果。

在游戏制作过程中,只有为游戏对象添加了刚体组件,才能使其受到重力影响。
刚体是物理引擎中最基本的组件。在物理学中,刚体是一个理想模型。
通常把在外力作用下,物体的形状和大小(尺寸)保持不变,而且内部各部分相对位置保持恒定(没有形变)的理想物理模型称为刚体。

在一个物理引擎中,刚体是非常重要的组件,通过刚体组件可以给物体添加一些常见的物理属性,如质量、摩擦力、碰撞参数等。
通过这些属性可以模拟该物体在 3D 世界内的一切虚拟行为,当物体添加了刚体组件后,它将感应物理引擎中的一切物理效果。

Unity 3D 提供了多个实现接口,开发者可以通过更改这些参数来控制物体的各种物理状态。

刚体在各种物理状态影响下运动,刚体的属性包含 Mass(质量)、Drag(阻力)、Angular Drag(角阻力)、Use Gravity(是否使用重力)、Is Kinematic(是否受物理影响)、Collision Detection(碰撞检测)等。
页: [1]
查看完整版本: 3D可视化开发调研学习笔记