如何在Unity中创造真实的水
你将要创造什么
Unity是由Unity Technologies开发的多平台游戏引擎,用于为控制台,移动设备,计算机甚至网站等多种设备创建视频游戏和应用程序。Unity的核心优势在于其稳健性,可移植性和社区性; Unity针对几个众所周知的API,如Direct3D,OpenGL,OpenGL ES和最近的Vulkan。
由于上述特性,Unity在AAA软件开发公司和有抱负的游戏程序员中越来越受欢迎。
Unity支持多种技术和组件。其中一个关键组件是水系统。Unity的水系统允许您在应用程序或游戏中添加不同类型的水,即Water Basic,Water Pro和Water4。默认情况下,Unity包含几个水预制件(包括必要的着色器,脚本和艺术资产)。
本教程将重点介绍Unity中水的工作原理,以及如何使用它来创建广阔而丰富的地形环境。
先决条件
首先,确保您使用的是 最新版本的Unity ; 否则,你可能会发现教程后面和使用物理关节的细微差别。
要开始本教程,您有两个可供选择的路径:
使用可用的启动项目立即启动它。
完成以前的Unity教程,称为Unity Terrain工具。
无论哪种方式,我们都会为您提供帮助,但是花时间从前一个开始将为您提供有关Unity及其工具的更多见解。
水基础
我假设你要么使用当前的Starting Project开始,要么已经完成了之前的 Unity Terrain工具 教程。如果不是这样,您可以启动一个新项目,但必须导入环境资产包并创建自己的地形。如果您使用的是新项目,请转到主菜单“ 资产”>“导入包”,然后选择“ 环境”。
从现在开始,本教程将重点介绍当前的Starting Project。通过分析地形,您可以看到,在中心,地面更深一些。该区域专门为您创建了一个湖泊。一种方法是使用Water Basic预制件。
在“ 项目”选项卡中,打开“ 资源”文件夹,然后打开“ 环境”。在这里你会发现两个水文件夹:水和水(基本)。最初,您将使用Water(Basic)。 打开它,然后打开Prefabs文件夹。有两种预制件可供选择:WaterBasicDaytime和WaterBasicNightime。
在继续之前,这里是对预制件的快速解释。预制件充当游戏对象的模板。它允许您在场景中创建新的对象实例,并且对预制资产所做的任何编辑都会立即反映在从其生成的所有实例中。
但是,您也可以单独覆盖每个实例的组件和设置。如果您需要在场景或多个场景中拥有多个相同类型的对象,这将非常有用。通过使用预制件,您无需从头开始创建每个对象,如果要对其进行调整,它将自动更新所有实例。
正如您可能已经猜到的那样,如果您在白天有场景,则应使用WaterBasicDaytime,并在夜间场景中使用WaterBasicNightime。它们都以完全相同的方式工作,但第二个设置为更暗。
在这个项目中你有一个白天场景,所以你将使用WaterBasicDaytime预制。使用鼠标选择预制件,然后将其拖动到场景中(或多或少地插入地面的孔中,类似于下图)。这会将WaterBasicDaytime添加到场景中。
接下来,选择水并调整其位置和比例。
当您根据需要定位和配置水时,让我们快速了解您可以使用它做什么。如果选择它并转到“ 检查器”选项卡,您将看到几个组件:刚刚使用的变换组件,水基本平面(网格过滤器),设置水的材质的网格渲染器,水基本脚本和着色器。
在网格渲染器中,您可以更改与阴影生成相关的一些选项,如“ 投射阴影”或“ 接收阴影”。您还可以修改与反射相关的多个属性。将“ 投射阴影” 和“ 接收阴影”设置 为“ 开”。接下来,对于 Reflection Probes,我们将其设置为Blend Probes和Skybox。
WaterBasicDaytime Shader允许您设置水的一些参数,如Wave scale和Wave speed。您可以使用这些值来查看某些图形更改,但现在保留默认值。
现在,为了查看最终结果,请将相机放在合适的位置。为此,请移至“ 场景”视图,并在获得所需视图后,选择“ 主摄像机”游戏对象。现在转到菜单GameObject,然后选择Align With View。这会将相机放在您想要的位置。按播放。
从这里,您可以返回并更改预制属性以查看属性之间的差异。使用Cast Shadows,Wave scale和Wave speed来感知修改。
Water Pro
下一步是学习如何使用Water Pro创建和配置湖泊。在继续之前,从场景中删除WaterBasicDaytime游戏对象。
接下来,在“ 项目”选项卡中,打开“ 标准资源”文件夹并再次打开“ 环境”。这一次,打开Water文件夹。你有两个文件夹:水和水4。要使用Water Pro,您必须打开Water文件夹。接下来,打开Prefabs文件夹。
就像Water Basic一样,文件夹中有两个预制件:WaterProDaytime 和WaterProNightime。它们都以完全相同的方式工作,并且前面提到的WaterProDaytime设置为白天场景,而WaterProNightime设置为较暗的环境。
由于您有白天场景,因此您应该选择WaterProDaytime。选择预制件并将其拖动到场景中。再次,选择WaterProDaytime游戏对象并调整其位置和比例。
一旦湖面尺寸合适,您就会立即看到水的图形质量与Water Basic相比有所不同。
当您有水时,请快速查看您可以用它做什么。如果选择它然后查看“ 检查器”选项卡,您将看到几个组件:变换组件,水平面网格,网格渲染器,水(脚本)和着色器。
该网格渲染 性能类似于以前的一个。将“ 投射阴影” 和“ 接收阴影”都设置 为“ 开”。接下来,将Reflection Probes 更改为Blend Probes和Skybox。
水脚本 提供了可以修改的其他属性。这些属性不适用于以前的水类型。
您可以将水模式设置为简单,这将使水像基本水一样工作,反射,这将使水具有反射但没有折射,或折射,允许反射和折射。您可以禁用像素灯,这将降低反射/折射中的照明质量,以提高性能。
您可以设置纹理大小,它指的是生成的水纹理的分辨率。“ 剪裁平面偏移”值是反射或折射图像出现的水下方距离。您可以设置受影响的反射图层以及折射图层。这些是图层蒙版,用于控制哪些场景对象在水中可见。默认情况下,选择所有图层。
在着色器组件中,您可以更改波形比例,并更改反射和折射扭曲的值。这些将根据它们对反射或折射物体的影响来确定涟漪的表观高度。
更多unity2018的功能介绍请到paws3d爪爪学院查找。
如何在Unity中创造真实的水的更多相关文章
- 如何在Unity中分别实现Flat Shading(平面着色)、Gouraud Shading(高洛德着色)、Phong Shading(冯氏着色)
写在前面: 先说一下为什么决定写这篇文章,我也是这两年开始学习3D物体的光照还有着色方式的,对这个特别感兴趣,在Wiki还有NVIDIA官网看了相关资料后,基本掌握了渲染物体时的渲染管道(The re ...
- 如何在unity中使用龙骨动画
龙骨 龙骨是Egret公司的一个用来做动画的软件,本文分享一下如何在Unity2D中使用龙骨导出的2D动画 导出动画 在龙骨中文件->导出,导出动画数据和纹理到Unity的项目中,如果打包了的话 ...
- 如何在Unity中播放影片
Unity支援影片貼圖,也就是說可以匯入影片並附加到遊戲物件上,基本上您電腦上的Quick Time播放器能播的,大致上都能播,已知的支援的影片格式有下列幾種:.mov, .mpg, .mpeg, . ...
- 如何在Unity中开发Leap Motion桌面版(Non-VR)APP
最近因需要,翻出几年前的Leapmotion感测器,准备用Unity3D做个互动APP,于是连上官网下载SDK.等下载下来一安装调试,瞬间傻眼,居然要求VR设备.我们Lab倒是不缺VR,有几套VIVE ...
- 如何在Unity中显示FPS
using UnityEngine; using System.Collections; public class example : MonoBehaviour { public float upd ...
- 如何在Unity中画抛物线
using UnityEngine; using System.Collections; using System.Collections.Generic; [ExecuteInEditMode] p ...
- Unity中简单使用Opengl
简介 由于项目特殊需求,需要在unity中使用一些OpenGL的东西来绘制图形(PS:其实就是有一个拖尾算法只有OpenGL版本~~~懒得改了,直接在unity中使用OpenGL算了).所以琢磨咯下如 ...
- 【Unity3D技巧】在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信 (二) : 引入中间层NotificationCenter
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 一对多的观察者模式机制有什么缺点? 想要查看 ...
- 3D语音天气球(源码分享)——在Unity中使用Android语音服务
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 开篇废话: 这个项目准备分四部分介绍: 一:创建可旋转的"3D球":3 ...
随机推荐
- Monkey框架(测试方法篇) - monkey日志分析
Monkey日志分析是Monkey测试中非常重要的一个环节,通过日志分析,可以获取当前测试对象在测试过程中是否会发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和解决问题.介绍日志 ...
- springMvc 入门二
目的:请求参数接受,输出,常见的注解(在上一篇入门1基础上) 1:请求参数的绑定 1.1绑定的机制 表单中请求参数都是基于key=value的. SpringMVC绑定请求参数的过程是通过把表单提交请 ...
- tensorflow到底难不难写
发信人: xhsoldier01 (风大人), 信区: ITExpress 标 题: Re: 没有GPU,tensorflow,AI公司都得死掉 发信站: 水木社区 (Thu Oct 10 20:25 ...
- springMvc将对象json返回时自动忽略掉对象中的特定属性的注解方式
1.注解使用在 类名,接口头上 @JsonIgnoreProperties(value={"comid"}) //希望动态过滤掉的属性 例 @JsonIgnorePropertie ...
- Android dump命令查看某个apk是被谁安装的?
adb shell dumpsys package packages > packageAll.txt ORadb shell pm dump packages > package ...
- git初次登陆使用
一. 安装git 二. 在当前项目根目录点击鼠标右键,出来下图: 点击进入git命令行界面. 三.初始化项目 git init 四. 添加所有文件到项目中 git add . 五. 尝试提交所有文件 ...
- IEDA中使用阿里插件Alibaba Cloud Toolkit和Arthas(阿尔萨斯)
在 IntelliJ IDEA 中安装和配置 Cloud Toolkit 在 IntelliJ IDEA 中安装和配置 Cloud Toolkit 后,您可以将本地应用快速部署到阿里云 ECS.EDA ...
- Dotmemory 内存分析工具
Dotmemory 内存分析工具 教程一.开始学习dotmemory 在本教程中,我们将学习如何运行dotMemory内存快照.此外,我们将简要地看看dotMemory的用户界面和基本分析的概念.考虑 ...
- jquery on绑定事件叠加解决方法
jquery on绑定事件叠加解决方法 代码如下 <pre> $('.maoqiu').each(function () { var is_bind = $(this).attr('is_ ...
- LeetCode 856. 括号的分数(Score of Parentheses)
856. 括号的分数 856. Score of Parentheses 题目描述 给定一个平衡括号字符串 S,按下述规则计算该字符串的分数: () 得 1 分. AB 得 A + B 分,其中 A ...