Move an object's position based on how you're facing?
Hi,
I have a first person script that when a mouse button is clicked:
Rotates the camera 75 degrees down to look at the ground.
Uses a Ray(Camera.main.transform.position, Camera.main.transform.forward) to determine where it hits the ground in the center of the viewport.
I want to place an object at that point on the ground, so I'm using: Vector3(closestHit.point.x, closestHit.point.y + 0.01f, closestHit.point.z);
This works fine. Now I want to move the object slightly down on the screen which would be towards the player, but still on the ground. I can't just modify x or z because the world axes do not line up with the screen ones. How can I do this so I position the object at the correct world coordinates?
Thanks for your time.
Answer by LazyElephant · Jan 10, 2016 at 08:02 AM
transform.forward
is a vector 3 pointing in the direction directly in front of the transform, so if the script is attached to the player, -1*transform.forward
will be a vector pointing backwards from the player. If you multiply this vector times a scale factor and add it to your hit vector, you can move it closer to your player.
Vector3 hit = new Vector3(closestHit.point.x, closestHit.point.y + 0.01f, closestHit.point.z);
Vector3 backwards = -1 * transform.forward;
Vector3 finalPosition = hit + scaleFactor*backwards;
Since you said that the camera is facing down towards the ground, this will also move the object upwards to some degree based on your scale factor. You'll have to account for that also if it causes a problem for your implementation.
Your answer
Follow this Question
Related Questions
Cell size to Canvas size 1 Answer
What would be best solution for adding different sized objects to world? 0 Answers
How to get objects to spawn in according to rules 1 Answer
UnityEngine.Component does not contain definition for ViewportPointToRay 0 Answers
Game looks different after build 0 Answers