- Home /
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?
Answer by Piflik · May 05, 2012 at 05:50 PM
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.
Answer by DGArtistsInc · May 05, 2012 at 05:54 PM
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.
http://www.unifycommunity.com/wiki/index.php?title=Headbobber
Answer by chrissa · May 06, 2012 at 09:03 PM
ah, that sounds like a good idea.. Just one problem, I'm not so good at coding :D 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 :),
Answer by John-S206 · Oct 18, 2016 at 07:21 AM
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);
}
}
Your answer
![](https://koobas.hobune.stream/wayback/20220613071128im_/https://answers.unity.com/themes/thub/images/avi.jpg)