Boat Animation

Hi,

I want to make a boat bob up and down in the water and thought the best way to do this is to make an animation for it. How would i got about doing this? Do i create the animation in 3ds max then import it? If so, does the animation require bones for it to work in unity? Or can it be animated in a much easier way?

You don’t have to use bones to animate in Max. Simply bake the animation on export (there is a chckbox in the FBX export window), and it should work.

No actually the best way to do that is not through animations, but it is through scripting. Make the transform on the y change on a SIN wave. Its like an FPS head bob script if you ever have made one of those.

ah, that sounds like a good idea… Just one problem, I’m not so good at coding :smiley: Could someone help me change the code so that the bobbing motion works without a button needing to be pressed and works on a loop? Here’s the code:

private var timer = 0.0;
 var bobbingSpeed = 0.18;
 var bobbingAmount = 0.2;
 var midpoint = 2.0;
 
 function Update () {
    waveslice = 0.0;
    horizontal = Input.GetAxis("Horizontal");
    vertical = Input.GetAxis("Vertical");
    if (Mathf.Abs(horizontal) == 0 && Mathf.Abs(vertical) == 0) {
       timer = 0.0;
    }
    else {
       waveslice = Mathf.Sin(timer);
       timer = timer + bobbingSpeed;
       if (timer > Mathf.PI * 2) {
          timer = timer - (Mathf.PI * 2);
       }
    }
    if (waveslice != 0) {
       translateChange = waveslice * bobbingAmount;
       totalAxes = Mathf.Abs(horizontal) + Mathf.Abs(vertical);
       totalAxes = Mathf.Clamp (totalAxes, 0.0, 1.0);
       translateChange = totalAxes * translateChange;
       transform.localPosition.y = midpoint + translateChange;
    }
    else {
       transform.localPosition.y = midpoint;
    }
 }

Thanks in advance :),

Try This I Found It

var waterLevel: float;
var floatHeight: float;
var buoyancyCentreOffset: Vector3;
var bounceDamp: float;



function FixedUpdate () {
	var actionPoint = transform.position + transform.TransformDirection(buoyancyCentreOffset);
	var forceFactor = 1f - ((actionPoint.y - waterLevel) / floatHeight);
	
	if (forceFactor > 0f) {
		var uplift = -Physics.gravity * (forceFactor - GetComponent.<Rigidbody>().velocity.y * bounceDamp);
		GetComponent.<Rigidbody>().AddForceAtPosition(uplift, actionPoint);
	}
}