Unity 3D 环境特效||Unity 3D 游戏场景设计实例

news2024/11/30 9:57:15

Unity 3D 环境特效

一般情况下,要在游戏场景中添加雾特效和水特效较为困难,因为需要开发人员懂得着色器语言且能够熟练地使用它进行编程。

Unity 3D 游戏开发引擎为了能够简单地还原真实世界中的场景,其中内置了雾特效并在标准资源包中添加了多种水特效,开发人员可以轻松地将其添加到场景中。

需要注意的是,由于 Unity 5.0 以上版本在默认情况下都没有自带的天空盒,只有包,所以当需要使用天空盒资源时,需要人工导入天空盒资源包。

水特效

  1. 在 Project 面板中右击,执行 Import Package → Environment 命令导入环境包,在打开的窗口中选中 Water 文件夹即可,然后单击 Import 按钮导入。

  1. 导入完成后,找到 Water 文件夹下的 Prefab 文件夹,其中包含两种水特效的预制件,可将其直接拖曳到场景中,这两种水特效功能较为丰富,能够实现反射和折射效果,并且可以对其波浪大小、反射扭曲等参数进行修改。

Water(Basic)文件夹下也包含两种基本水的预制件,如下图所示。

基本水功能较为单一,没有反射、折射等功能,仅可以对水波纹大小与颜色进行设置,由于其功能简单,所以这两种水所消耗的计算资源很小,更适合移动平台的开发。

雾特效

Unity 3D 集成开发环境中的雾有 3 种模式,分别为 Linear(线性模式)Exponential(指数模式)和 Exponential Squared(指数平方模式)。这 3 种模式的不同之处在于雾效的衰减方式。

场景中雾效开启的方式是,执行菜单栏 Window → Lighting 命令打开 Lighting 窗口,在窗口中选中 Fog 复选框,然后在其设置面板中设置雾的模式以及雾的颜色。

开启雾效通常用于优化性能,开启雾效后选出的物体被遮挡,此时便可选择不渲染距离摄像机较远的物体。

这种性能优化方案需要配合摄像机对象的远裁切面设置。通常先调整雾效,得到正确的视觉效果,然后调小摄像机的远裁切面,使场景中距离摄像机较远的游戏对象在雾效变淡前被裁切掉。雾效参数含义如下表所示。

参数描述
Fog Color雾的颜色。
Fog Mode雾效模式。
Density雾效浓度,取值为0〜1。

天空盒

Unity 3D 中的天空盒实际上是一种使用了特殊类型 Shader 的材质,这种类型的材质可以笼罩在整个场景之外,并根据材质中指定的纹理模拟出类似远景、天空等效果,使游戏场景看起来更加完整。

目前 Unity 3D 中提供了两种天空盒供开发人员使用,其中包括六面天空盒和系统天空盒。这两种天空盒都会将游戏场景包含在其中,用来显示远处的天空、山峦等。

  1. 在场景中添加天空盒,执行菜单 Window → Lighting 命令,可以打开渲染设置窗口。单击 Scene 页面 Environment Lighting 模块 Skybox 后面的选项设置按钮。

  1. 双击选择不同材质的天空盒。

 Unity 3D 游戏场景设计实例

目前 Unity 3D 在游戏开发方面常用的游戏地形系统制作元素,接下来我们通过一个实践案例制作一个完整的三维游戏场景。

案例设计

本案例将创建一个 3D 游戏场景,其中包含了 Unity 3D 中提供的各种地形资源,如树木、山地、风域等。

案例实施

  1. 选择相关资源加载到项目中。

执行 Create → New Project 命令,在 Project Location 中输入创建项目的文件夹地址,或者单击后面的 Browse 按钮,然后在 Import the following packages:中选择要导入的项目文件包,每个文件包都带有一些插件功能。

注:

  • 如果将所有的复选框都选中,会使得 Unity 3D 在开始加载的时候速度很慢,所以大多数情况下,在创建 Unity 3D 项目文件的时候,只选择需要用到的包就可以了,在这里选择 Environment 选项

  1. 创建项目。

在创建一个新项目之后,新项目的各个面板中只有 Project(项目文件栏)包含了两个文件夹,这两个文件夹里面是之前导入的项目文件包里的所有文件。

  1. 创建地形。

执行 GameObject → 3D Object → Terrain 选项。

  1. 设置地形信息。

单击 Terrain 中的 Set Resolution 按钮,选择设置地形大小、高度等相关信息(在每一个地形参数的右侧直接输入数值即可修改它),地形参数包括地形的高度、长度、宽度、分辨率和高度图等。

  1. 更改地形属性。

在场景面板中选中刚才创建的地面对象 Terrain,也可以在 Hierarchy 视图中选中 Terrain

然后,在 Inspector 属性面板中会马上发现与之对应的属性,包含 Position(坐标)Rotation(旋转量)Scale(缩放尺寸)以及地面对象固有的 Terrain(Script)和 Terrain Collider

  1. 绘制凸起地形。

通过设置地形参数就可以对地形上的地貌进行编辑,单击平整的地形,之后在右侧的 Inspector 中的 Terrain(Script)中就可以对地貌进行编辑。

注:

游戏开发中主要使用左边 3 个按钮设置地形起伏:

  • Raise/Lower Terrain(提高和降低高度)

  • Paint Target Height(绘制目标高度)

  • Smooth Height(平滑高度)

  1. 笔刷调节。

在设计山脉的过程中可能涉及不同高度、不同大小以及不同形态的高山。

在每一种笔刷的下方也可以对笔刷的大小等属性进行调节。

其中,笔刷面积的大小决定了笔刷所能够覆盖的区域,小的数字将会绘制较小的地形,大的数字(最大100)将绘制较大的地形。透明度决定了笔刷绘制的地形的透明程度。

选择笔刷后,就可以在 Scene 视图中使用笔刷在地形上刷出凹陷与凸起效果,使用不同笔刷绘制的效果图。

  • 第一种笔刷。在首选项中可以对地形进行山脉的设计,单击此按钮,激活提高和降低地形高度的工具。

在 Scene 视图中,如果在地形上移动鼠标,会有一个蓝色的圆圈,这是笔刷的作用区域。

在设计的过程中可能涉及不同高度、不同大小、不同形态的高山以及凸起。

下面的各类笔刷功能将会很简单地实现这一不同的需求,同时在 Brushes 下方可以对笔刷的大小等属性进行调节,如下图所示。

  • 第二种笔刷。地形编辑器中的第二个按钮可以对地形高度进行设计,此时可以打开设置地形特定高度页面,如下图所示。

其中的 Height 参数用于设置地形的最大高度(注意:此时用 Height 而不是 Opacity 设置最大高度)。

  • 第三种笔刷。地形编辑器中的第三个按钮是平滑过渡地形工具。选择一个合适画笔。

在 Scene 视图中拖动鼠标即可平滑过渡地形,可以对已经设计好的,看起来嶙峋的山脉地形进行平滑过渡处理,更加符合山脉的特征。

从上图中可以看出,平滑的效果还是相当明显的,在进行了前 3 个选项的编辑之后,初始的地貌已经出现了,接下来就进行地貌材质贴图并布置一定量的花草树木。

  1. 凹陷地形的制作。想要制作凹陷地形,首先需要在 Paint Height 工具中抬高地形,单击 Paint Height 工具,选择 Height(Flatten)

此时,按住 Shift 键,使用前 3 个地形工具即可刷出凹陷地形。

  1. 对地形进行相关材质的贴图。到目前为止,地形已经建好了,但是十分粗糙,默认的地形贴图是灰色的,接下来给地形添加贴图,让地形看起来更为美观。

Unity 3D 提供了很多地形贴图,如果在之前创建项目时没有导入资源,此时可以在 Project 视图中右击,执行 Import Package→Environment 命令将环境资源导入项目。

最后,为地形添加导入的地形贴图,单击地形贴图按钮(从左数第 4 个按钮),在界面右下角点击 Edit Textures 中的 add Texture 选项,具体参数如下:

  • Add Texture : 添加地形贴图。

  • Edit Texture : 编辑地形贴图。

  • Remove Texture : 添删除地形贴图。

选择 Add Texture,此时弹出 Add Terrain Texture 界面,选择 Select 选项,将预先载入的纹理作为地形贴图纹理,然后单击 Add 按钮,右侧的 Inspector 属性面板选择就会出现材质的缩略图。

贴图后地形就会被纹理自动全部覆盖。

为了模拟更加真实的效果,在场景中可以选择继续添加纹理图片,此时可以选择不同的笔刷对场景中不同的地点进行纹理变换。

  1. 添加树木。

在地形编辑器中单击第五个按钮,执行 Edit → Remove tree types → Add tree 命令,即可完成树木的添加。

参数列表:

  • Add Tree : 添加树模型。

  • Edit Tree : 编辑树模型。

  • Remove Tree : 删除树模型。

根据地形环境特点,选择合适的树木种类,单击 Add 按钮完成添加。

右侧的 Inspector 面板中会出现所选树的图形,同时在下方的 Settings 中也会有关于树模型属性的设置,例如笔刷大小、树的密度、树的高度、树的随机颜色变化等。

在这里就可以以笔刷形式把树“画”在地形上。

  1. 加入一些花草以及岩石。

首先在地形编辑器中选择第六个按钮(添加草与网格模型)可以设置草的最大高度、草的最小高度、密度以及间隔颜色等。

参数列表:

  • Brush Size : 设置笔刷大小 。

  • Opacity : 设置绘制高度。

  • Target Strength : 设置绘制密度。

  • Add Grass Texture : 添加草的贴图。

  • Add Detail Mesh : 添加自定义网格模型。

  • Edit : Edit。

  • Remove : 删除模型。

选择 Edit → Remove Detail meshes 中的 Add Grass Texture 选项,就可以弹出添加草的对话框,如下图所示。

单击 Add 按钮之后右侧 Inspector 面板中的 Details 就会出现 Grass 选项,在 Brush 中选择合适的笔刷类型,在地形中就可以画出草地。

  1. 其他设置。

做到这一步,一个简单的地形已经建立起来了,现在模型还是略显单调。

  1. 水的添加。

在 Project 文件夹里找到 Water 文件夹,具体路径为 "Assets/Standard Assets/water(pro only/basic/Water/Water4/Water4Example(Advanced))"。

有两种添加水资源的方式,第一种方法是直接将 Water4Example(Advanced)文件拖入 Scene 场景中,第二种方法是将水资源拖曳到 Hierarchy 视图中,在 Hierarchy 视图中就可以看到 Water4Example(Advanced),单击就可以找到 Scene中的水模型,运用快捷键W(移动)和 R(缩放)在场景中正确地放置水,如下图所示。

  1. 为场景添加光影效果。

选中光照对象 Directional light,在它的属性面板中找到 Shadow Type(阴影模式),默认的是 No Shadows(没有阴影),可以将它改成 Soft Shadows(软渲染阴影)或 Hard Shadows(硬件渲染阴影)

Soft Shadows 以消耗 CPU 的计算为代价来产生阴影效果,这种模式运行速度较慢,但对于机器配置比较落后的使用者是唯一的选择。

Hard Shadows 可利用新一代 GPU 的显卡加速功能进行阴影效果的渲染处理,其运行速度比较快,渲染效果也比较理想。

无论选择哪一个选项,动画场景的物体都会相对于阳光产生阴影效果。

  1. 测试场景。

  1. 第一人称漫游操作。

接下来需要设计并创建独特的角色来充满世界,这样玩家可以控制一个真实的角色,玩家角色是玩家用和游戏进行交互的化身,增加了游戏的趣味性。

通常角色会分为 3 类:

  • 第一人称。

  • 第三人称。

  • 隐含角色。

Unity 3D 支持这些类型,在 Unity 3D 中,角色是通过 Character Controller 定义的。

为场景中添加第一人称角色非常简单,摄像机就像角色的眼睛一样在世界中漫游。具体步骤如下。

确定建立项目时已载入 Character Controller 资源,如果在创建项目时没有载入资源,执行 Assets → Import Package → Characters 命令即可。

在资源面板中搜索 FPSController,在搜索导航栏中输入 f,此时可以在资源面板中看见预置的 First Person Controller

将 Project 面板中的 FPSController 拖到 Scene 视图中(FPSController 要高于地面)。

FPSController 自带摄像机,此时可以将场景中的主摄像机(Main Camera)删除。

  1. 测试效果。

可以在平面上通过 W、A、S、D 键以及上下左右方向键控制前进、后退、左右旋转、鼠标也可以通过旋转确定移动方向。

将第一人称视角应用到已经建立好的游戏场景中,实现第一人称漫游。

到此整个 3D 游戏场景实例结束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mmLab系列使用方法

mmLab系列使用方法环境搭建mmdetection检查数据集运行部署mmdeploy环境搭建使用mmOCRmmsegmentation环境搭建 Windows最推荐安装方法: 首先需要查好自己gpu的CUDA版本,根据版本到pytorch官方网站查找对应的pytorch版本(!!!只查找不下载!)ht…

Mybatis源码分析(七)MapperMethod的INSERT分析

目录一 INSERT 语句1.1 参数的对应解析convertArgsToSqlCommandParam1.2 ID获取对应的MappedStatement1.3 MappedStatement交给执行器执行1.4 不同的执行器获取不同的StatementHandler1.5 根据参数获取BoundSql1.6 执行器配置参数处理器ParameterHandler1.7 拿到StatementHandl…

人工智能-http协议和静态服务器

目录1、HTTP协议1.1 网址1.2 http协议的介绍1.3 http请求报文1.4 http响应报文1.5查看http协议的通信过程2、静态web服务器程序开发2.1 搭建python自带的静态web服务器2.2 静态web服务器-返回固定页面数据1、HTTP协议 1.1 网址 网站又称为U…

【报错】assert failed: xQueueSemaphoreTake queue.c:1545 (( pxQueue ))

🌱 hi,最近开始写嵌入式,碰到蛮多新的问题,也调bug到凌晨五点过。欢迎关注我,一起讨论交流 开发环境 在VScode中使用Arduino,开发板ESP32S3 报错代码 使用队列接收服务器消息,FIFO依次处理消…

ROS1学习笔记:参数的使用与编程方法(ubuntu20.04)

参考B站古月居ROS入门21讲: 参数的使用与编程方法 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录一、概念图讲解二、创建功能包三、参数命令行的使用方法:rosparam显示某个参数值:rosparam get设定某个参数值:rosparam set将…

linux小程序—进度条(动态演示)

文章目录1. \n与\r的区别1. linux环境下2. windows环境下2. 缓冲区问题1.\n的情况2.\r的情况3. \n与\r的情况对比4. 使用fflush函数观察\r情况5. 不为\n与\r的情况3.进度条的实现1. printf 打印字符问题1. 修改前2.修改后2 . 注意事项3. 整体实现1. makefile(自动化编译工具&am…

一篇文章教会你Linux下《常用操作指令》

基本指令首言ls(查看目录)pwds(显示用户当前所在目录)cd(改变工作目录)mkdir(创建目录)rmdir(删除目录)touch (新建文件或更新文件时间&#xff0…

【Python】获取视频弹幕并生成词云

目录一、摘要二、获取目标视频cid三、获取视频弹幕xml文件四、处理弹幕文件五、生成词云六、完整参考代码一、摘要 就是那个大家都用的弹幕视频网站,不写名字了,写了老是不能通过。 获取视频的弹幕文件(xml),并生成如图…

认真分享一个让我变厉害的小建议

很多朋友,加我好友之后,第一句话通常是:我想提高英语,有什么资料推荐? 这要看你学英语的目的了。 我们学英语是为了什么? 理由可能很多,我就说个最俗的目的吧,为了发财。 想发财应向谁学习&…

代码随想录第31天|● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

455.分发饼干 大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的。 这里的局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。 可以尝试使用贪心策略&#xf…

[ 数据结构 ] 最小生成树(MST)--------普里姆算法、克鲁斯卡尔算法

0 修路问题 有胜利乡有 7 个村庄(A, B, C, D, E, F, G) ,现在需要修路把 7 个村庄连通各个村庄的距离用边线表示(权) ,比如 A – B 距离 5 公里问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短? 思路: 将 10 条边&a…

Java常用工具类方法(上)

1. Collections首先出场的是java.util包下的Collections类&#xff0c;该类主要用于操作集合或者返回集合&#xff0c;我个人非常喜欢用它。1.1 排序在工作中经常有对集合排序的需求。看看使用Collections工具是如何实现升序和降序的&#xff1a;List<Integer> list new…

揭秘链动2+1商业模式玩法

链动21模式主要是打造裂变团队的同时又能快速地将平台销售额提升起来&#xff0c;链动模式可以说颠覆传统的分销&#xff0c;算是一个创新更能吸引用户&#xff0c;稳住会员&#xff0c;拓展新客户的商业模式。 链动21模式有两个身份&#xff0c;分别是代理和老板 【代理商】…

Java高手速成 | 高质量代码编写最佳实践

程序员之间交流时&#xff0c;会经常使用非程序员无法理解的行话&#xff0c;或者使用令操不同编程语言的程序员理解起来比较模糊的行话。 但是&#xff0c;那些操相同编程语言的程序员理解起来不会产生什么问题。 这有时也取决于程序员所掌握知识的渊博程度。 一个新手或许不理…

以 Animated Drawings APP 为例,用 TorchServe 进行模型调优

内容导读 上节介绍了 TorchServe 模型部署调优的 5 个步骤&#xff0c;将模型部署到生产环境中。本节以 Animated Drawings APP 为例&#xff0c;实际演示 TorchServe 的模型优化效果。 本文首发自微信公众号&#xff1a;PyTorch 开发者社区 去年&#xff0c;Meta 凭借 Animate…

win系统重装系统后提示 BitLocker(磁盘加密)密钥查找及如何关闭

文章目录前言如何找到恢复秘钥&#xff0c;解锁磁盘1、打开链接&#xff1a;[https://support.microsoft.com/zh-cn/help/4026181/windows-10-find-my-bitlocker-recovery-key](https://support.microsoft.com/zh-cn/help/4026181/windows-10-find-my-bitlocker-recovery-key)2…

Nuxt3+ElementPlus构建打包部署手记

文章目录为何选Nuxt.js?工程package.json参考目录结构页面之间的关系几个主要命令动态组件获取后台数据SSR打包方式部署参考文档为何选Nuxt.js? 在前后端分离出现之前&#xff0c;传统的web页面都是服务端渲染的&#xff0c;如JSP、PHP、Python Django&#xff0c;还有各种模…

06【Filter】

文章目录06【Filter】一、过滤器简介1.1 Filter概述1.2 Filter的使用1.2.1 Filter快速体验1.2.2 XML配置Filter1.2.3 Filter的拦截规则1.3 Filter的生命周期1.3.1 Filter生命周期介绍1.3.2 Filter生命周期相关方法1.3.3 FilterConfig类1.4 Filter的拦截方式1.4.1 REQUEST1.4.2 …

Linux系统编程——管道

文章目录一、管道1.管道的特质2.管道的用法——pipe函数3.管道的读写行为4..管道的优劣二.实战练习&#xff1a;实现ls | wc -l 指令三、fifo实现非血缘关系进程间通信一、管道 1.管道的特质 实现原理: 内核借助环形队列机制&#xff0c;使用内核缓冲区实现。 特质: 1.伪文件…

接口测试 Mock 实战(二) | 结合 jq 完成批量化的手工 Mock

一、应用背景因为本章的内容是使用jq工具配合完成&#xff0c;因此在开始部分会先花一定的篇幅介绍jq机器使用&#xff0c;如果读者已经熟悉jq&#xff0c;可以直接跳过这部分。先来看应用场景&#xff0c;App 经常会有一些信息展示的列表页&#xff0c;比如商家的菜品、股票的…