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 Nishok · May 30, 2014 at 07:04 PM · rotationtransformpositionvector3

Player not facing the mouse correctly

Hello everyone,

I am having trouble with getting the player to face the mouse correctly, When I aim for the corners, the aiming is very inaccurate.

Here is an image displaying what I mean (I shot 1 bullet in each corner): http://therealnishok.com/screensnapr/2014-05-30_2058.png

As you can see, the ones shot at the corners (the ones with the arrows pointing at them) are really inaccurate, they aren't even shooting to the corners. But the ones shot at the sides (horizontally and vertically) are correct.

Here is my code for the aiming:

 Vector3 mousePos = Input.mousePosition;
 mousePos = cam.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, cam.transform.position.y - transform.position.y));
 targetRotation = Quaternion.LookRotation(mousePos - new Vector3(transform.position.x, 0, transform.position.z));
 transform.eulerAngles = Vector3.up * Mathf.MoveTowardsAngle(transform.eulerAngles.y, targetRotation.eulerAngles.y, rotationSpeed * Time.deltaTime); //smoothens the rotation

Also as an extra note: When I make the camera right on top of the character, it aims perfectly (because at the moment the camera is angled a little bit so you can see the whole camera). So it has to do something with that, but I don't have a clue how I could fix it without having to change the camera back.

Thanks inadvance!

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

Answer by Dazdingon · May 30, 2014 at 08:50 PM

Your script is not taking the camera angle in consideration. (That is why it only works if the camera is facing directly down)

Here is two ways to fix this :

The Plane.Raycast method : (does not work with uneven ground)

  • Get the ray from the camera.

  • Create a Plane parallel to the ground (This can be done once at Start)

  • Then do a raycast along the ray towards the plane.

  • Get your look position from the returned distance.

var ray : Ray; var plane : Plane; var rayDistance: float;

 //This code replaces the second line of your code
 ray = cam.ScreenPointToRay(mousePos);
 plane = new Plane(Vector3.up, 0);
 plane.Raycast(ray, rayDistance);
 mousePos = ray.GetPoint(rayDistance);

The Physics.Raycast method : (use a layerMask to ignore everything exept the ground)

  • Get the ray from the camera.

  • Then do a raycast that uses the layerMask (that you set up in the inspector).

  • Get your look position from the returned RaycastHit.

var ray : Ray; var hitInfo : RaycastHit; var layerMask : LayerMask; // public

 //This code replaces the second line of your code
 ray = cam.ScreenPointToRay(mousePos);
 Physics.Raycast(ray, hitInfo, Mathf.Infinity, layerMask);
 mousePos = hitInfo.point;

Physics.Raycast uses colliders

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

21 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

gravity causes transform.position not to work 0 Answers

Input.mousePosition returns coordinates as integers. 1 Answer

How to rotate an object to face the direction it's going? 1 Answer

How do you get the vector3 of one object and assign that vector3 to another object? 1 Answer

Instant Transform.Rotate? 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