Home > other >  How to allow raycasting when the player is at a certain distance from object?
How to allow raycasting when the player is at a certain distance from object?

Time:07-27

I've implemented opening drawers/doors features on my game but the issue I'm facing is that when The player opens a drawer, it gets pushed back so the drawer has some room to be opened. sometimes it jitters when pushed back.

 Physics.Raycast(mainCamera.transform.position, mainCamera.transform.forward, out hit, 3f); 
        if (hit.transform)
        {
            interactiveObjects = hit.transform.GetComponent<InteractiveObjects>();
        }
        else
        {
            lookObject = null;
            interactiveObjects = null;
        }
        if (Open)
        {
            if (interactiveObjects)
            {
                interactiveObjects.OnOpen();
            }
        }  

I'm using raycast to open the drawer. Is there a way to only allow the raycasting, when the player is not too close to the drawer? so it doesn't get pushed back by the drawer.

CodePudding user response:

You can check the distance after doing the raycast. If the distance is within the tolerable range, execute the rest of your code.

if (Physics.Raycast(mainCamera.transform.position, mainCamera.transform.forward, out hit, 3f))
{
    if (hit.distance >= minDistance)
    {
         // Code to execute when range is acceptable
    }
    else
    {
        Debug.Log("Player is too close to object!");
    }
}

The distance used above does not take into account the height difference between the hit point and the camera. You can get a much more consistent distance by setting the y component of both vectors equal before getting the distance.

var cameraPos = mainCamera.transform.position;
cameraPos.y = hit.point.y;

var distance = Vector3.Distance(hit.point, cameraPos);
  • Related