• 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
Question by noobunity · Oct 08, 2014 at 07:31 PM · cameraquaternionscreentoworldpoint

Need explanation for this code

Hi all

Following is the code to fire bullet in the direction of mouse for a 2D platformer.(thanks Robertbu for the answer)

Can somebody please explain me the code from pos.z to var q? those three lines in below code? what exactly its doing

var prefab : GameObject;

 function Update () {
 if (Input.GetMouseButtonDown(0)) {
 var pos = Input.mousePosition;
  
 pos.z = transform.position.z - Camera.main.transform.position.z;
 pos = Camera.main.ScreenToWorldPoint(pos);
 var q = Quaternion.FromToRotation(Vector3.up, pos - transform.position);
  
 var go = Instantiate(prefab, transform.position, q);
 go.rigidbody.AddForce(go.transform.up * 500.0);
 }
 }

Thanks

Comment

People who like this

0 Show 0
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
Best Answer

Answer by robertbu · Oct 08, 2014 at 07:39 PM

  pos.z = transform.position.z - Camera.main.transform.position.z;

The code I posted assumes the camera is facing positive 'z' and has rotation (0,0,0). This line of code calculates the distance from the camera plane to the object. The 'z' value of the position passed to ScreenToWorldPoint() must contain the distance when using a perspective camera. If the camera is orthographic, the code will still work, but there are other ways to do the calculation.

 pos = Camera.main.ScreenToWorldPoint(pos);

This converts the screen position to a world position at the specified distance from the camera plane.

 var q = Quaternion.FromToRotation(Vector3.up, pos - transform.position);


'pos - transform.position' produces a vector that would point from the current game object to pos. The FromToRotation() calculates the rotation necessary to convert a vector pointing 'up' to a vector pointing in the direction of 'pos'. This code is assuming that in the prefab, the top side is what you want to point at 'pos'. This is a bit unusual. For 3D, usually you want the front side pointing at things (so that Transform.LookAt() and Quaternion.LookRotation() work correctly).

Comment

People who like this

0 Show 1 · 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 noobunity · Oct 08, 2014 at 08:41 PM 0
Share

Thanks man, for the explanation.

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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

2 People are following this question.

avatar image avatar image

Related Questions

How do I properly rotate an FPS camera with a joystick? 1 Answer

Camera.ScreenToWorldPoint with Perspective camera 1 Answer

allows users to view 360º content without a VR headset 0 Answers

ScreenToWorldPoint not working 1 Answer

Workaround for Quaternion.eulerAngles 360 Degree Limit? 1 Answer


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