x


Move GameObject along a line according to the players look direction

I have two GameObjects: The Main Camera, which the player can rotate, and a box, which only moves in the z-axis. I need the box to always be in the Main Camera's forward position, and newer move away from it's line.

I've tried to illustrate it: alt text

Additional information: I'm coding in C# and have tried different solutions with vectors, but just can't get my head around a solution.

movego.png (6.3 kB)
more ▼

asked Apr 18 '12 at 07:09 PM

Kmulla gravatar image

Kmulla
258 1 3 8

(comments are locked)
10|3000 characters needed characters left

3 answers: sort voted first

You can also use the Plane object so you have an infinite large "collider" plane.

A mathematical plane is defined by it's normal vector and the distance from 0,0,0. You can create a plane be hand in the normal vector to define in which direction the plane should face and any point in world coordinates that is on the plane:

private Plane m_Plane;

void Start()
{
    // This plane will be at 0,0,20 and face towards the origin(0,0,0)
    m_Plane = new Plane(-Vector3.forward, new Vector3(0,0,20));
}

//[...]
Ray ray = Camera.main.ViewportPointToRay (new Vector3(0.5,0.5,0));
float dist;
if (m_Plane.Raycast(ray, out dist))
{
    Vector3 hitPoint = ray.GetPoint(dist);
    // use it
}

The plane object isn't a visual component. It's just the mathematical representation of a plane.

more ▼

answered Apr 19 '12 at 11:44 AM

Bunny83 gravatar image

Bunny83
45.2k 11 49 207

Thank you so much! This works exactly as intended, and it's so simple!

Apr 19 '12 at 01:30 PM Kmulla
(comments are locked)
10|3000 characters needed characters left

you can use a ray cast hitting an invisible collier which will act as your line and place the gameObject at the raycast contact point.

see: http://unity3d.com/support/documentation/ScriptReference/RaycastHit-point.html and: http://unity3d.com/support/documentation/ScriptReference/RaycastHit.html

for help

more ▼

answered Apr 18 '12 at 08:33 PM

TheDarkVoid gravatar image

TheDarkVoid
904 12 22 28

This is the solution! Since there's a place where the line isn't straight, this would work great there too. I wasn't even aware that the Raycast had a point-function. Thank you :) … And it's a great excuse for finally learning how to use the layer masks!

Apr 19 '12 at 09:54 AM Kmulla
(comments are locked)
10|3000 characters needed characters left

Just use the camera transforms forward direction and zero out the y axis. that's important because the camera always "looks down" on the player, but you don't want to move in that direction (cause you'd go through the ground :P)

Vector3 forward = Camera.main.transform.foward;
forward.y = 0f;    
// Move the box    
transform.Translate(forward * speed * Time.deltaTime);
more ▼

answered Apr 18 '12 at 08:54 PM

Tseng gravatar image

Tseng
1.5k 6 8 23

This solution needs a few adjustments to work, like locking the x-axis as well :) When I tried it out, the box kept moving in the direction the player was looking, and I couldn't think of a quick solution to make it stop at the wanted place, but I'm sure it would work with additional coding! … nevertheless kingk614's solution is the answer to this problem AND another I wasn't looking forward to. But thanks anyway :)

Apr 19 '12 at 10:00 AM Kmulla
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

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

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x4155
x1278
x576
x206

asked: Apr 18 '12 at 07:09 PM

Seen: 1292 times

Last Updated: Apr 19 '12 at 02:09 PM