void AddAboveWaterForces() { List <TriangleData> aboveWaterTriangleData = modifyBoatMesh.aboveWaterTriangleData; for (int i = 0; i < aboveWaterTriangleData.Count; i++) { TriangleData triangleData = aboveWaterTriangleData[i]; Vector3 forceToAdd = Vector3.zero; forceToAdd += BoatPhysicsMath.AirResistanceForce(rhoAir, triangleData, boatRB.drag); boatRB.AddForceAtPosition(forceToAdd, triangleData.center); } }
//Add all forces that act on the squares above the water void AddAboveWaterForces() { //Get all triangles List <TriangleData> aboveWaterTriangleData = modifyBoatMesh.aboveWaterTriangleData; //Loop through all triangles for (int i = 0; i < aboveWaterTriangleData.Count; i++) { TriangleData triangleData = aboveWaterTriangleData[i]; //Calculate the forces Vector3 forceToAdd = Vector3.zero; //Force 1 - Air resistance //Replace VisbyData.C_r with your boat's drag coefficient forceToAdd += BoatPhysicsMath.AirResistanceForce(rhoAir, triangleData, gameObject.GetComponent <Rigidbody>().drag); //Add the forces to the boat boatRB.AddForceAtPosition(forceToAdd, triangleData.center); //Debug //The normal //Debug.DrawRay(triangleCenter, triangleNormal * 3f, Color.white); //The velocity //Debug.DrawRay(triangleCenter, triangleVelocityDir * 3f, Color.black); if (triangleData.cosTheta > 0f) { //Debug.DrawRay(triangleCenter, triangleVelocityDir * 3f, Color.black); } //Air resistance //-3 to show it in the opposite direction to see what's going on //Debug.DrawRay(triangleCenter, airResistanceForce.normalized * -3f, Color.blue); } }