本教程系本人原创,欢迎转载,但务必请注明出处。U3D 开发交流群: 321301070
本篇文章我将会简单介绍下U3D RPG类游戏场景的搭建过程。
涉及到的U3D的基本知识:
GameObject: 组件的容器。U3D的特点就是一个组件架构,组件的概念就像搭建积木一样,你需要什么功能,我就提供一个组件给你。
当然,我这样的比方不一定恰当。
一个空GameObject本身并不提供任何东西,你需要什么,往上加你需要的组件就可以了。所以它是一个组件容器。
所以可以说,场景就是一堆GameObject搭建起来的。
Transform: 对应3D物体的位置,旋转,缩放三组向量。
Mesh Filter:网格模型组件,在这里指定需要渲染的3D 模型网格
Mesh Render: 渲染器,会要求指定对应材质,而材质则往往需要指定贴图和使用渲染器(Shader)
所以Mesh Filter和Mesh Render两个组件就包办了一个基本模型的渲染
Animation 组件:这个可以添加动画,一般是3D 软件软件中制作的骨骼动画,也可以是Unity自带动画系统制作出来的动画
一般上面材质对应的Shader会在Mesh Render组件下面显示出来,可以挑选满足要求的Shader来实现特殊的要求
U3D 粒子系统或者第3方的粒子插件,这个就不展开了。主要用于场景中渲染氛围。比如火光,烟雾,落叶等等。
这里有对应的详细文档 http://game.ceeger.com/Script/
下面是一个游戏的整体场景图。
接下来看下场景是如何布局的。
场景布局图
可以看到,整个游戏场景很大的。这里Grafika_xx代表了不同的场景区域。除开这些场景,还有一个相机和一个碰撞层。
相机是玩家看到的一个视图区域。碰撞层是为了提供碰撞检测。
3D 游戏一般为场景制作低模作为碰撞层,比如这里我们可以看到,这里只有一个Mesh Collider组件,而用于渲染的Mesh
Render并不存在,因为它并不需要渲染出来。
用低模制作的碰撞层图
接下来我们展开一个场景区域进行分析。
第一个区域场景图。
可以看到整个区域由一些房子,灯笼,风车等物体构成,还有几个粒子特效用于渲染氛围。
几个灯笼用于装饰用。
首先看看地面:
地面01_01,01_02等几个GameObject组合而成。我这里选择01_01作为例子,可以看到
这个物体都是由模型(Mesh Filter组件),渲染器组件Mesh Render组成。我们调整Transform组件的位置和旋转参数,
将它们放在了合适的位置,就构成了地面的效果。见下面的效果图
由此可见,3D 场景的一般静态的物体就是通过3D 建模而后导入引擎,通过Mesh Filter以及Mesh Render组件就完成了渲染。
然而,游戏不可能物体都是静态的,比如这里的灯笼就会左右晃动。
这是通过动画组件来实现的。
我们展开灯笼的监视面板,会发现这里有一个动画组件。里面放置了我们预先制作好的骨骼动画。
动画这里勾选了Play Automatically, 会自动播放上面Animation 里面指定的动画,就实现了左右晃动的效果。
这里指的就是1代表的动画。
我们还会发现灯笼有一个红色的光晕效果,这个就是地下的【外发光特效】子物体来实现了。
展开【外发光特效】子物体,会发现上面有一个脚本组件ScaleAnimationOnObject, 可见这是一个做缩放效果的脚本
使用了一种特殊的Additive Shader 做高亮效果。再往下看就是灯笼得粒子特效了。
可见通过动画以及脚本和例子特效,就会让游戏场景的的GameObject动起来了。
最后简单总结下
3D 场景的制作流程:
静态物体:建立GameObject, 添加Mesh Filter 组件指定网格模型, 添加Mesh Render 组件添加材质,并为材质指定贴图和渲染器 Shader.
调整Transform 组件移动到合适位置,并可以做缩放和旋转操作来完成最终的摆放。
动态物体:渲染和静态物体是一样的。动态部分实现可以通过添加动画组件,然后添加在外面制作好的动画,通过制定Play Automatically 可以完成指定动画的播放。也可以通过脚本来根据需要来播放动画。一些特殊效果比如灯笼的发光效果需要通过脚本结合Shader来完成。
3D 粒子特效对应游戏场景的氛围渲染尤为关键。
另外,添加相机用于场景漫游。添加低模用于构建碰撞层。让主角不要走入3D物体内部,避免穿帮。
当然,这里仅仅是一个简单介绍,一些比如光照部分,水流,火光等场景组件并未涉及。下次再说。
下面是另外一个场景,可以看到基本按照上面说的步骤来搭建场景的。
延伸阅读:
1. https://www.zhihu.com/question/21638103
2. https://www.zhihu.com/question/27603966