Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by sys12 · Sep 01, 2015 at 06:05 PM · mathprojectioncalculationxna

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.

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by FortisVenaliter · Sep 01, 2015 at 09:15 PM

How about Camera.ScreenPointToRay()? Is there a reason you can't use that?

Comment
Add comment · Show 4 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image sys12 · Sep 03, 2015 at 02:48 PM 0
Share

Thanks. This method is exactly what I want. I didn't notice the method.

avatar image sys12 · Sep 03, 2015 at 02:50 PM 0
Share

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?

avatar image FortisVenaliter sys12 · Sep 08, 2015 at 07:50 PM 0
Share

You can make custom meshes that use lines. They render much faster but they're not nearly as advanced as the renderer.

avatar image sys12 · Sep 03, 2015 at 03:35 PM 0
Share

The GL class can only be used in OnPostRender method I think.

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

2 People are following this question.

avatar image avatar image

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


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges