如何在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 ...
随机推荐
- 仿站技术——获取和使用某些网站的iconfont图标字体
前言: 很多前端新手在仿一些大型网站的时候经常遇到一个问题:该网站使用了图标字体——iconfont,虽然现在阿里有开源的iconfont库,但是还是没有原网站的效果(本人强迫症但非处女座).所以此文 ...
- mysql 遍历所有表并条件查询
use eepm_push; DROP PROCEDURE IF EXISTS FountTable; delimiter $$ create procedure FountTable() begin ...
- 怎么对ORACLE里的CLOB字段进行模糊查询
select b.* from oss_service_log a left join oss_service_log_detail b on a.pk_log = b.pk_log where a. ...
- 实验与作业(Python)-03 Python程序实例解析(函数、循环、range、turtle)
截止日期: 要求: 下周实验课前上交,做好后在实验课上检查可获取平时分. 做出进阶或选做的的请用清晰的标致标识出来,方便老师批改 本次作业:可提交也可不提交.作业算平时成绩. 本次作业内容量较大,请组 ...
- 创建批处理文件.bat文件(删除指定文件夹下的文件及文件夹并循环)
1.针对仅仅是删除文件夹下的文件的操作:使用del命令,单纯的删除文件操作,如下:del /f /s /q C:\Users\dell\AppData\Local\Temp\*.* 2.删除文件夹操作 ...
- flask上传文件到指定路径
flask上传文件到指定路径 项目结构如下: 首先是:视图函数uload_file.py,代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- fro ...
- Java程序执行cmd命令
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.i ...
- Python高级笔记(十)闭包
1. 闭包 #!/usr/bin/python # -*- encoding=utf- -*- def test(number): # 在函数里面再定义一个函数,并且这个函数用到外边函数的变量,那么将 ...
- 2-1 CLI 工程结构
ng new 项目名称:去创建一个angular的项目 ng new pinduoduo 是否需要添加路由,选择否 选择传统的css rm -fr pinduoduo:删除刚才创建的项目 ng new ...
- 深入理解Flink ---- 系统内部消息传递的exactly once语义
At Most once,At Least once和Exactly once 在分布式系统中,组成系统的各个计算机是独立的.这些计算机有可能fail. 一个sender发送一条message到rec ...