Loading...
677
2 years ago

Simple water physics that I implemented in my old project.

It calculates water resistance, buoyancy and applies water current force to objects.

#Unity #Water #Physics #Simulation #Drag #Buoyancy #WaterCurrent #WaterFlow


The buoyancy is calculated based on the bounding box of the object ("Submergence" function).

		
			protected virtual void OnTriggerStay(Collider other)
{
    other.SendMessage("OnWaterStay", C, SendMessageOptions.DontRequireReceiver);
    R = other.GetComponent<Rigidbody>();
    if(R!=null)
    {
        //Flow
        R.velocity += globalFlow * Time.fixedDeltaTime / R.mass;
        //Drag
        V = R.velocity.magnitude;
        R.velocity = R.velocity.normalized * Mathf.Clamp(R.velocity.magnitude - ((density * V * V) / 2 * Time.fixedDeltaTime * R.drag) / R.mass, 0, float.PositiveInfinity);
        //Angular Drag
        V = R.angularVelocity.magnitude;
        R.angularVelocity = R.angularVelocity.normalized * Mathf.Clamp(R.angularVelocity.magnitude - ((density * V * V) / 2 * Time.fixedDeltaTime * R.angularDrag) / R.mass, 0, float.PositiveInfinity);
        //Buoyancy
        R.velocity -= (Physics.gravity * density * Submergence(C.bounds, other.bounds) * Time.fixedDeltaTime) / R.mass;
    }
}

public static float Submergence1D(float C,float R,float c,float r)
{
    if(R<r)
    {
        var tmp = R;
        R = r;
        r = tmp;
        tmp = C;
        C = c;
        c = tmp;
    }
    return Mathf.Clamp(2 * R - (Mathf.Abs((C + R) - (c + r)) + Mathf.Abs((C - R) - (c - r))), 0, 2 * r);
}

public static float Submergence(Bounds W,Bounds O)
{
    return Submergence1D(W.center.x, W.extents.x, O.center.x, O.extents.x) * Submergence1D(W.center.y, W.extents.y, O.center.y, O.extents.y) * Submergence1D(W.center.z, W.extents.z, O.center.z, O.extents.z);
}
		
	


0 comments

Loading...

Next up

Chibi drawing by Aikeji, modeled and animated in 3D.

Made in Blender.

#Blender #3D #3DArt #Modeling #Animation #Chibi #Aikeji

Beware of the armored frog

Kikkerstein's tank made in Blender for the War Thunder quest.

#Blender #3D #3DArt #Modeling #Animation #Kikkerstein #Kikkertank #Tank #WarThunder

What's Your Favorite Video Game Console Of All Time?

PC - I've never had a console.

#GJAsks #Blender #3DArt #3D #PC #Room #Darkness

This week's Fan Art Friday celebrates Baldi's Basics in Education and Learning! Accept the quest in your quest log to get started.

Lord Vader decides to delete his Minecraft world

Made in Blender.

#StarWarsArt #FanArtFriday #ArtWeeklies #Minecraft #Blender #Animation #3D #3DArt #DeathStar #Space

Inayah - Life After Gods is OUT NOW on Steam!

Celebrate the game's release by completing our quests!

You can play the demo or get the full game at https://bit.ly/steaminayah

Comparison of view transforms in Blender using Christmas candles as an example

#Blender #3D #3DArt #ViewTransform #Christmas #Candles

Diglett as chocolate cake

Made in Blender.

#MyPokeCake #Pokemon #Diglett #Cake #Blender #3D #3DArt #Modeling

@FatBombStudios is a CCC+ Studio that makes games you love but don't know about!

They're the devs behind the fast paced hide and seek game Light Bearers 2: https://bit.ly/LightBearers2

We think you SHOULD know about them so complete the quest!

Spirit of the snowy forest

Made in Blender.

Anime girl model made in VRoid Studio (last image).

#Blender #3D #3DArt #Modeling #Animation #Anime #Girl #VRoid #VRoidStudio #Snow #Forest #Winter #Night #Blobcat