读书频道 > 软件开发 > 其他综合 > Unity游戏开发实战(原书第2版)
3.2.4 摆放树木
2015-11-30 16:05:18     我来说两句 
收藏    我要投稿   
这是一本介绍Unity引擎的书。它解释了Unity需要提供什么,以及不管你要用它做什么都会用到的一些Unity最佳实践。如果你是一名爱好者或者学生,你或许可以按部就班从第1章开始阅读。如果你想通过本书来判断Unity是  立即去当当网订购

你的地形涂上纹理之后,现在看起来已经很漂亮了,但是你还可以做点别的让地形看起来更自然,比如添加一些植物。Unity的地形引擎通过一个特殊的贴图处理来摆放树木,也就是说只有很接近镜头的树木是三维的,但是超过某一个距离之后的树木则会自动转换为二维模型。这种方法既可以让你创建一些完整的郁郁葱葱的景色,又不至于因为用了过多的三维树木模型而占用太多存储空间。

1. “描画”树木

还是在层级视图中选中地形,然后从地形工具栏中选择摆放树木(Place Trees)选项。与纹理非常相似,你需要添加一些树木到你的绘图资源库中。地形上的树木是一些特殊的资源(后面还有一些其他的特殊资源),和其他的资源的构成有所不同。标准资源包中包含一个普通树木和一个棕榈树,你现在就可以用这些资源了。

点击编辑树木(Edit Tree)按钮打开一个列出可用树木的一个对话框,和地形纹理的对话框很相似。你可以在Standard Assets > Terrain Assets > Trees Ambient-Occlusion > Palm 目录下找到棕榈树。拖曳一个棕榈树资源(不是Palm这个文件夹)到对话框的树木栏,或者从下拉菜单中选择一个棕榈树资源。


 

这个对话框还提供一个弯曲系数值(Bend Factor)。除了将树木变成贴图,Unity还提供让你的植物在风中摇摆和弯曲,让其看起来更加自然的功能。你可以把这个弯曲系数设置成任何值,如果你不是模拟很大的风的话,第一次可以试试一些较小的值(即使是2这么小的值也会导致很大的弯曲)。还要记住的是,这个系数很大的话会影响游戏性能,因为引擎需要计算所有这些摇摆和弯曲。

摆放树木时,你可以像涂纹理一样将树木涂到地形上,只是画笔设置会有所不同。不同于涂纹理时可以有多种类型的画笔,摆放树木的时候只有一个圆形画笔,这个唯一的画笔提供这七种特有的设置:

画笔尺寸:画笔的半径,尺寸越大表示一次摆放的树木就越多。

树林密度:每一个笔划里包含的树木数量。

颜色偏差:每一个树木颜色的随机偏差。

树木高度:用于调整资源的基础高度。

树木宽度:用于调整资源的基础宽度。

宽度偏差:每一个树木宽度的随机偏差。

从选项中你可以看到,即便引擎中只加载了一个基础树木,但是你画出来的每一个树木都是不同的,就像大自然的森林一样。当你需要一个独特外形的风景时,有效地使用这些选项可以大大缩减你的建模时间,如图3.14所示。需要擦除某些树木的时候,可以在涂画的时候按下Shift键来实现。


 

2. 使用批量植树功能

另外一个可用的摆放树木的方式是批量植树按钮。如果你需要一个浓密的森林,这可能是比较简单的方式。这个功能会从你加载到资源库中的所有树木样本中进行随机采样,所以如果你想要引擎只使用某一两种树的话,可以把不需要的先移除掉。如图3.15所示。你还可以通过在批量植树提示符中输入0,来使用这个批量植树功能批量删除一些树木。


 

3. 制作自定义树木

在地形引擎中你还可以创建自己的树木,只需要按照一些特定的步骤一步一步做就可以。简单来说,要创建地形引擎中可用的自定义树木,你必须:

1)将你的资源放入一个名称中包含“Ambient-Occlusion”的文件夹里。引擎内置着色器会需要这个名字,否则不能正常工作。注意如果你想让你的树木组织得好一点,可以在这个文件夹下面再放一些子文件夹。

2)使用 Nature/Soft Occlusion Leaves 和Nature/Soft Occlusion Bark 着色器,将树木放到上一步中提到的文件夹中,让这些着色器正常工作。

3)确保你的树木网格是一个由两种材料做成的组合网格,一种用来表示树叶,另外一种用来表示树干,这两种材料是用来给上一步中的着色器用的。如果你的树木不是单一网格,是不会渲染的。

4)在树干的底部放置其轴心,不然树木看起来会是漂浮着的。

5)将树木模型限制在2000 tris(triangles)或者更少,示例中的棕榈树使用的是220 tris。

6)如果你需要提供碰撞的话,将树木做成预制件,可以在即将出现的侧边栏中查看更多信息。

在你创建好自己的树木之后,你有时会需要更新这个树木。与其他资源不同的是,所有的树木文件在你保存之后必须手动更新一下。更新时,从地形树木工具中选择刷新(refresh)即可。这个操作会更新场景中所有的树的变化。

Unity在其网站上提供一个树木资源包,在其在线商店里面还有更多其他可用的树木。虽然在你的游戏里可能用不上这些,但是这些也可以在你做自己树木的时候提供一个参考。

创建树木碰撞

你可能需要给你的树木添加一些碰撞效果,因为现在这种情况下,角色可以直接从树干中穿过。添加碰撞和创建预制件的内容在后面的章节里覆盖的比较多,添加碰撞的基础步骤非常简单:

1)通过从项目视图拖曳到层级视图或者场景视图,来给你的树木创建一个普通实例,这时候不要涂到地形上。

2)给树木添加一个封装碰撞器。这会破坏掉之前预制的链接和数据(预制件指的是一种创建重复游戏对象的方式,会在第4章中会讲到)。你应该只给树木添加这种碰撞器,其他资源添加碰撞器可能会比较奇怪,将碰撞器缩放至树干大小。

3)通过将树木这个游戏对象拖曳回项目视图,将树木封装成一个预制件,然后将这个预制件放到地形树木库中。

4)确保Create Tree Colliders 复选框处于选中状态(默认就是选中的),该复选框位于地形碰撞器组件的审查器中。

根据你的场景文件,添加碰撞之后,角色移动和导航起来会更加困难,特别是当你的树木摆放的很近的时候。对于某一些树木,封装碰撞器可能和网格契合的不是那么完美,这种时候你可能会觉得碰撞搞得你的游戏很没意思,哪怕它看起来更加接近真实世界。

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:3.2.3 绘制纹理
下一篇:3.2.5 用草和细节网格把它弄乱一点
相关文章
图文推荐
Python语言及其应用
2.2.1 Java Buffer
3.9 OpenCL错误处理
3.6.3 查询和管理内
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站