Loading...
678
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

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 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

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

PC - I've never had a console.

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

Doki Doki Literature Club is celebrating Monika's birthday and the 8th anniversary of DDLC with exclusive stickers, avatar frames and backgrounds on Game Jolt! 

Head over to the shop to collect yours 👉 https://gamejolt.com/#shop

#gjbroadcast

Dive into the cozy post-apocalyptic open world of Critter Cove!

Gentleman Rat Studios (@GR-Rob ) describe it as “a little bit Animal Crossing, a little bit Stardew Valley. Maybe even a little bit Windwaker, too."

Wishlist the game: https://bit.ly/CritterCove

My Pokémon Baking Book arrived today

#MyPokemonBakingBook #InsightEditions #Giveaway

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

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

Mae Borowski is the main character of Night in the Woods! It's an adventure game that tells the story of her return to her hometown of Possum Springs. She was confirmed as canonically pan in a social media post by the game's creator Scott Benson.

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