- Home /
How can I make a unproject method in Unity?
I've been working on this for days. I want to make a intersection detected by calculating without using colliders due to the poor performance. And there is an unproject method in XNA, so I'd like to make one in Unity as well. This method can calculate the line implied by mouse position in world space with origin position and direction.
What I've written is as follows:
public void Unproject(VecXY point, out Vector3 origin, out Vector3 direction)
{
var viewProjectionInv = UnityEngine.Matrix4x4.Inverse(Camera.main.worldToCameraMatrix * Camera.main.projectionMatrix);
var normalizedPoint = new Vector2((float)(point.X - Camera.main.rect.x) / Camera.main.rect.width * 2 - 1, 1 + (float)(point.Y- Camera.main.rect.y) / Camera.main.rect.height * 2);
var nearPoint = viewProjectionInv * new Vector4(normalizedPoint.x, normalizedPoint.y, 0f, 1f);
var farPoint = viewProjectionInv * new Vector4(normalizedPoint.x, normalizedPoint.y, -1f, 1f);
origin = nearPoint / nearPoint.w;
direction = Vector3.Normalize((Vector3)farPoint / farPoint.w - origin);
}
But the results I've got for the origin and direction are quite strange. Neither of the origin and the direction is correct, therefore I think the problem might be the above lines. Can anyone help me about this? Any help would be welcomed. Thanks.
Answer by FortisVenaliter · Sep 01, 2015 at 09:15 PM
How about Camera.ScreenPointToRay()? Is there a reason you can't use that?
Thanks. This method is exactly what I want. I didn't notice the method.
Could you please answer me one another question? Or I need to post one more question. I've got really poor performance after have a large number of line renderers. Is that possible to optimize the line renderers or there is another way of drawing lines?
You can make custom meshes that use lines. They render much faster but they're not nearly as advanced as the renderer.
The GL class can only be used in OnPostRender method I think.
Your answer
Follow this Question
Related Questions
Hit box based off of a parabola 1 Answer
Find angle between two gameobjects? 1 Answer
Calculate a new position instead of using Vector3.back 1 Answer
How to draw the front view and top view of the model 0 Answers
Angle calculation not working?? 2 Answers