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

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

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

To this day, I don't know how they did it

#PhotoDay

Our 2024 Advent Calendar has opened! Day 18: @Otis_Le_PoOtis is the Creator of Bondee’s Barnyard and posts updates about their dev journey and their work on the sequel!) Accept the quest and give them a follow to get Coins and a seasonal sticker!

Diglett as chocolate cake

Made in Blender.

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

Happy #WIPWednesday!

Are you working on a game?

Making some art?

Practicing a song?

Something else?

Tell us in the comments!

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

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

PC - I've never had a console.

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

Our 2024 Advent Calendar has opened! Day 17: @VuVuuInc is a great Creator who is a solo game dev and shares their progress on their various projects! Accept the quest and give them a follow to get Coins and a seasonal sticker!

What's Your Most Feared Minecraft Mob?

My first thought was this green guy who appears out of nowhere and erases all your efforts in one second

#MostFearedMob #ArtWeeklies #Blender #Animation #Minecraft #Cave #Creeper #3D #3DArt