Home > Software design >  Range bound x-axis movement
Range bound x-axis movement

Time:09-30

I am working in unity/C# and trying to make a function that keeps an character in certain x range (-3 to 3). Below isthe code I got to work. Is there a way to simplify it?

//function creation to limit movement in the x axis
float rangeBoundX(int upperBound, int lowerBound, Vector3 i, float horMoveSpe = 0)
{

    //will change velocity to keep the x value in the desired range. - velocity to mvoe away from the upper bound and positive velocity goes away from the lowerBound. 

    if (i.x > upperBound)
    {
        horMoveSpe = -1;
    }

    else if (i.x < lowerBound)
    {
        horMoveSpe = 1;
    }

    return horMoveSpe;
}

'private void FixedUpdate()'

{
    Vector3 enemyforwardMove = transform.forward * enemySpeed * Time.fixedDeltaTime;

    Vector3 horizontalMove = transform.position;

    magn = rangeBoundX(3, -3, horizontalMove, magn);

    horizontalMove = transform.right * magn * freq;


        enemyRB.MovePosition(enemyRB.position   enemyforwardMove   horizontalMove);
}

CodePudding user response:

Yes, there is a way to simplify it. You can use Mathf.Clamp method https://docs.unity3d.com/ScriptReference/Mathf.Clamp.html

example of usage of it: float xPos = Mathf.Clamp(xValue, xMin, xMax);

CodePudding user response:

Yes you can use Math.Clamp to bound any value Like this.

void update(){
       float xPos = Mathf.Clamp(transform.position.x, -3, 3);
       transform.position = new Vector3(xPos, transform.position.y, transform.position.z);
}

using this code you can bound the position of object horizontaly.

  • Related