- Home /
Maintain object position when using raycasting to multiple height
I am working on a game that allows you to pick up objects with the mouse and move them around a table. I am using a raycast on a layer to detect the table and then move the object around so it hovers .5 units off the table surface, and it is working good. I am running into an issue when I move the object off the table it stops at the edge of the table. I then set up another layer on the floor and setup a floor layer mask so it will detect the table and the floor. Now I can move the mouse off the table but it snaps .5 units off the floor. I have tried setting offsets but I when ever I move the object off the table it the movement is erratic and unpredictable. My goal is when you move the object off the table the location remains at the same height as it moves away from the table and back onto it. I would basically like to move the object across the table over the edge of the table at the same height as it was when it was lifted from the table. Any assistance with working this out is much appreciated.
void FixedUpdate() {
if (isDragging == true) {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;
int maskTable = LayerMask.GetMask("Table");
int maskFloor = LayerMask.GetMask("Floor");
if(Physics.Raycast(ray,out hitInfo,maxRayDistance,maskTable)) {
Debug.DrawLine(transform.position, transform.position + Vector3.down * maxRayDistance, Color.red);
gameObject.transform.position = new Vector3(hitInfo.point.x,hitInfo.point.y + hoverHeight,hitInfo.point.z);
}
else if (Physics.Raycast(ray, out hitInfo, maxRayDistance, maskFloor)) {
Debug.DrawLine(transform.position, transform.position + Vector3.down * maxRayDistance, Color.red);
gameObject.transform.position = new Vector3(hitInfo.point.x, hitInfo.point.y, hitInfo.point.z);
}
}
}
Answer by Zaeran · Sep 18, 2020 at 03:03 AM
If you don't need to pick up anything that isn't on the table, why not just create a large invisible collider that's the height of the table?
You can put it on a separate layer, so that you can raycast against it, but your objects will still fail through it if dropped.
Your answer
Follow this Question
Related Questions
Raycast does not work with touch input but works well with mouse input why? 0 Answers
Unable to apply "transform" on gameobject from Raycast 1 Answer
Change game-cursor on gameobjects within range 0 Answers
Slant Physics Raycast Implementation 0 Answers
Raycast length must be equal to the target distance 2 Answers