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

Lord Vader decides to delete his Minecraft world

Made in Blender.

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

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

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

It's just rain

Made in Blender using Dynamic Paint and particles.

#Blender #3D #3DArt #Animation #Rain #Storm #Window #DynamicPaint

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

My Pokémon Baking Book arrived today

#MyPokemonBakingBook #InsightEditions #Giveaway

The Knightling launches on August 28! Wishlist it now so you don't miss out: https://bit.ly/KnightlingSteam

To celebrate the game's impending release, we've added The Knightling Pack and The Knightling Community Pack back to the Shop!

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

PC - I've never had a console.

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