Je moet als eerst een goede weight systeem maken voor een boot.
Hierbij heb ik systeem gebruikt waar meerdere virtuele punten op de waterlijn van de boot bevinden.
Als de punt onder water zit zou er een force aan de boot worden toegevoegd bij dat punt om de boot terug naar boven te duwen
Groen: Boven water
Rood: Onder water
Ook moet er dus uitgerekend kunnen worden hoe je zeilboot moet reageren tussen de richting van de wind en de manier hoe je zeil staat. Dit is een semi realistisch model. Los van dat je niet kan varen bij een in de windse koers. kan je in pricipe dit stuk code gebruiken om je optimale aanvalshoek te berekenen
public void Update()
{
//get input from user
float delta = (Input.mouseScrollDelta.y * ScrollInputSpeed + Input.GetAxisRaw("RotateSail") * ButtonInputSpeed);
InputValue = Mathf.Clamp(InputValue + delta * Time.deltaTime,0,1);
//calculate the wind direction relative to boat
_windDir = (WindDirection + transform.rotation.eulerAngles.y) % 360 - 180;
LocalWindDirectionUpdate.Invoke(_windDir);
//calculate efficienty
OptiomalDirection = _windDir / 2;
CurrentDirection = InputValue * 90 * (OptiomalDirection > 0 ? 1 : -1);
//set masts to look at the current direction
FrontMast.localRotation = Quaternion.Euler(0, CurrentDirection * -1f, 0);
BackMast.localRotation = FrontMast.localRotation;
//calculate efficenty
Efficienty = (90 - Mathf.Abs(CurrentDirection - OptiomalDirection)) / 90;
BoatController.WindMaxSpeed = 90 * Efficienty;
}