This quick start guide will explain how to set up a primitive sphere to interact with water.
An empty scene will be used for the example.
Project Settings > Player > Api Combatibility Level needs to be set to .NET 4.x.
Since all the NWH assets have been updated to use assembly definitions here is a disclaimer to avoid confusion when updating:
This asset uses Assembly Definition (.asmdef) files. There are many benefits to assembly definitions but a downside is that the whole project needs to use them or they should not be used at all.
Using, for example, Lux Water (which does not fature assembly definitions) will therefore require an addition of .asmdef file inside the Lux Water directory and a reference inside NWH.DWP2.asmdef or removal of all .asmdef files from the asset if you do not wish to use assembly definitions. Some assets such as Crest already feature .asmdefs and adding Crest as a reference to NWH.DWP2 is the only step needed.
WaterObjectManager has been removed in v2.5. All the settings and simulation is now handled by the
Any physics object that is active and has
WaterObject attached will interact with water.
There are two requirements for
WaterObject to work: a
Rigidbody and a
MeshFilteris required so that the
WaterObjectknows which mesh to use for simulation.
Rigidbodydoes not have to be attached to the same object as
WaterObject, but it must be present in one of its parents. This allows for composite objects; one Rigidbody with multiple hulls - such as a trimaran.
Sphere Colliderto the Sphere if is not automatically added.
Rigidbodyto the Sphere and set its mass to 300. There is also a script called
MassFromMaterialwhich can calculate and set the
Rigidbodymass based on material density and mesh volume, but it is a helper script and not required.
WaterObjectto the Sphere. Since the sphere by default has 768 triangles
Simplify Meshoption should be used. This option automatically decimates the mesh to a
Target Triangle Count. A good triangle count is 30 or less for simple objects and around 60 for ship hulls. Using higher triangle count will only have a minor influence on simulation quality but will have a linear performance penalty (doubling the triangle count will about halve the performance). Therefore, adjusting the triangle count until the object starts to lose its shape is recommended. In the case of the example sphere 36 will be enough:
WaterDataProvider is a script that tells
WaterObject where the water is.
It is an interface between water systems/assets and DWP2 and allows the two to communicate. All flat water assets/shaders use the same
FlatWaterDataProvider while for wavy assets such as Crest, an asset-specific
WaterDataProvider has to be used, e.g.
As of version v2.5 an option to use multiple water surfaces in the same scene has been added. This is done by attaching a
isTrigger = true to the
WaterDataProvider. As long as the object is inside the trigger it will use data from that
FlatWaterDataProviderassumes that water is at
transform.position.yof the object it is attached to and does not care about any shaders, colliders, etc. Changing the Y value of
Transform's position will make the Sphere float at different heights.
FlatWaterDataProviderand make sure to remove
MeshColliderfrom it or the sphere will just sit on the plane through physics collision.
Default-Materialof the plane can be replaced with a material that uses some kind of flat water shader - e.g. the included
WaterProDaytimematerial which is just a standard Unity water shader.
WaterParticleSystem can be used to generate foam. It works with any flat water.
ParticleSystemvalues can be tweaked to suit the needs of the project.
CenterOfMass is a simple script that offsets the center of mass of a Rigidbody.
Unity calculates center of mass of the object from all of its colliders, as if the object were homogenous. In many cases this is not correct - a ship has ballast, a crate could have some load in it, a barrel could have oil, etc.
To adjust the center of mass of an object simply attach
CenterOfMass script to the same object that contains the
Rigidbody and adjust the
Center Of Mass Offset - a value in local coordinates which tells how much to offset center of mass from the Unity-calculated point. Want a ship to be less prone to capsizing? Lower the Y component of COM.
WaterObjectWizard is a helper script that sets up a
WaterObject automatically. It is still recommended to have knowledge of manual setup and how things work, but this script can automate and speed up the setup process.
A primitive Sphere will be used, same as in the rest of the guide above.
WaterObjectWizardto the newly create Sphere.
Auto-Setupand press Play after the setup is done. The Sphere now floats and generates foam. Next step would be to manually check and tweak the default values, such as
Target Triangle Count, center of mass, etc.