- Home /
Why is my Ray pointing in the wrong direction
Preface: A little background on what I am trying to do overall. I'm trying to do something like a Level of Detail, where as you get closer the object fades out and a new version fades in, but I'm doing it over 10 cameras that are synchronized. In order to get the higher detail object to spawn in the right location, I thought I would shoot a ray from the center of a sphere collider I have on a camera to the center of the collider on the object, then use the direction of the ray to repeat it exactly on the next camera. This should allow me to get a point 10x farther, letting me spawn in an object 10x larger... seems logical.
My problem at this early stage is that the ray seems to miss the mark! Instead of firing from the center of one sphere to the center of the sphere it just collided with, it seems to fire from the center of the camera Collider to the back of the camera collider, so z axis is backwards. It also misses completely on the x Axis. y Axis looks mirrored of what it should as well. All in all not a good showing.
I have the script on the camera collider, the camera collider is a Trigger, the Object is not a trigger but is a rigidbody, and I have my code in OnTriggerEnter. That all seems OK as the collision happens, and if I check other.name it shows the name of the object I want to interact with. Here is the pretty simple code that isn't working. What am I missing?
void OnTriggerEnter(Collider other)
{
Vector3 camCenter = transform.GetComponent<Collider>().bounds.center;
Vector3 hitCenter = other.bounds.center;
Ray ray = new Ray(camCenter, hitCenter - camCenter);
Debug.DrawRay(camCenter, hitCenter - camCenter, Color.red, 200f);
}
edit: The link provided by JChester held the correct answer. Here is my code. It's not quite right in that the higher-detail larger version is popping in slightly wrong, but the question I asked was about getting the Ray pointing in the right direction and this code works for that.
Vector3 camCenter = transform.GetComponent<Collider>().bounds.center;
Vector3 hitCenter = other.bounds.center;
Vector3 hitDirNN = (hitCenter - camCenter);
Debug.DrawRay(camCenter, hitDirNN * 10, Color.red, 200f);
As a note, whether it's specifically relevant for you or not, Raycasts may not be perfectly accurate at ridiculously small scale. That said, this is when you're down to sizes along the lines of an object at x- 0.001
firing a ray toward an object at x- 0.002
.
Your answer
Follow this Question
Related Questions
Custom Collision Detection 4 Answers
Collision Detection If Raycast Source Is inside A Collider? 4 Answers
Help with a field of sight 3 Answers
raycast hit point is wrong 1 Answer
Camera raycast? 2 Answers