Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 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 gl03 · Apr 28, 2012 at 10:39 PM · cameraraycasttouchorthographic

Orthographic Camera Raycast using ScreenPointToRay

Hi... I am trying to select objects in my 3d world via a touch event.

I am using this fairly simplistic piece of code to cast a ray from the camera through the touched screen point using ScreenPointToRay:

 private var hit : RaycastHit;
 private var ray : Ray;
 
 function FixedUpdate () {
     if(Input.touchCount == 1) {
         ray = Camera.main.ScreenPointToRay(Input.touches[0].position);
         Debug.DrawLine(ray.origin,ray.direction * 10);
         if(Physics.Raycast(ray.origin, ray.direction * 10, hit)){
           Debug.Log(hit.transform.name);
         }
     }
 } 

This works perfectly fine using a perspective camera, but problems arise if I switch the camera to orthographic mode.

The ray's origin does move according to touch position, while its direction remains fixed - this seems fine, as I need a ray parallel to my (orthographic) camera's z axis.

BUT: the visible ray drawn by DrawLine is not parallel to the camera's z - it always ends in the same fixed vanishing point, regardless of its (screenpoint) origin. This is weird, as intuitively I'd say a ray's direction vector would always be relative to its origin's local space. Instead direction seems to be a fixed point relative to world space (normalized somewhere at -0.5, -0.7, 04).

Furthermore, using the Unity remote, I seem to be able to select objects as expected, i.e. the ray cast with Raycast does point straight in my orthographic camera's view direction and is not identical to the 'confluent' rays drawn with DrawLine.

Is it possible that Raycast and DrawLine are behaving differently using the same input variables? Do I have to TransformDirection on the ray's direction? (can't seem to make this work).

It's entirely possible that I have some misconceptions about the relationship between camera/screenspace/viewport as well as the difference between points and directions in general. Suggested reading to help get me up to speed on this would be highly appreciated as well.

Thank you!

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

2 Replies

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

Answer by Bluntweapon · Apr 29, 2012 at 01:43 PM

Reason why it looks weird is that DrawLine takes 2 world space coordinates, but ray.direction is a local vector.

Instead, you'll have to find the direction vector in world space, like

 Debug.DrawLine( ray.origin, (ray.direction - Camera.main.transform.poisition) * 10 );

Or simply just use DrawRay instead.

Comment
Add comment · 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
0

Answer by gl03 · May 04, 2012 at 01:59 PM

Thank you for restoring my sanity, Blunt - I was thinking of DrawRay, not DrawLine!

Comment
Add comment · 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

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

4 People are following this question.

avatar image avatar image avatar image avatar image

Related Questions

camera switch on touch error 1 Answer

Touch different Gameobjects using camera array and raycast hit 3 Answers

Orthographic camera movement clamping 1 Answer

Touch not working if camera is moved 0 Answers

perspective camera into android 0 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