Problem with mathf.clamp on rigid body without gravity
I have a rigid body game object (boat) with gravity turned off. When the object collides, it shoots off into space. I wanted to use mathf.clamp to create a ceiling where the boat will not leave the water on collision . So far I've been unsuccessful making this happen referring to the C# documentation. Does anyone have a sample code snippet showing how this may be done. Thanks.
Answer by Inok · Apr 01, 2016 at 01:12 PM
If you need instantly stop moving boat upside after collision you can check positive velocity on y axis and make it zero instantly or slow down to zero by some time passed with coroutine:
1) Instant zero:
void FixedUpdate()
{
if (rigidbody.velocity.y > 0)
rigidbody.velocity.y = 0
}
2) Gradual lowering to zero:
bool slow_down_in_progress;
float speed;
void FixedUpdate()
{
if (rigidbody.velocity.y > 0 && !slow_down_in_progress)
{
slow_down_in_progress = true;
StartCoroutine(Slow_Down_Upward())
}
IEnumerator Slow_Down_Upward()
{
while (rigidbody.velocity.y > 0)
{
Mathf.Clamp(rigidbody.velocity.y -= Time.deltaTime * speed, 0, rigidbody.velocity.y);
yield return new WaitForFixedUpdate;
}
slow_down_in_progress = false;
}
}
Your answer
Follow this Question
Related Questions
Random.Range producing values outside its range. 1 Answer
Help with clamping rotation, and using animations 0 Answers
Please help me! Correct script) , 0 Answers
Space Shooter tutorial - Mathf.clamping boundaries 0 Answers
Mathf.clamp cancels my trigger 0 Answers