x


Ray Cast not working for camera.

Hello,

I am trying to make a 3rd person camera script. But it does not work and I don't know what I am doing wrong.

First the explanation: There is a far-cam-point, this is the max distance between player and camera. The close cam point is the same with z=0. If the camera hits a wall, I just need to apply the (negative) distance between the closecampoint and the hit of the raycast to z of farcampoint and can then set the cam position to this new farcampoint.

I draw Debug-Lines all over here: Cyan is farcampoint to closecampoint. Yellow is closecampoint to hit and red is the raycast itself. All lines are aligned over each other, so that is fine. But it doesnt seem to hit anything when I approach a wall. Any help with this would be great.

(Ah, yes...lerp and slerp will come later... ;) )

Here is the code: //[new] Vector3 farCamPoint = player.position + camYRotation * pivotOffset+ aimRotation * camOffset; Vector3 closeCamOffset=new Vector3(camOffset.x, camOffset.y, 0.0f); Vector3 closeCamPoint= player.position+camYRotation*pivotOffset+aimRotation*closeCamOffset;

    Debug.DrawLine(farCamPoint, closeCamPoint, Color.cyan);

    RaycastHit hit;
    Vector3 raycastDir = farCamPoint - closeCamPoint;
    float distance=Vector3.Distance (farCamPoint, closeCamPoint);
    //raycastDir.Normalize();
    float padding = 0.3f;
    if (Physics.Raycast(closeCamPoint, raycastDir, out hit, distance, mask)) {
       farCamPoint=new Vector3(camOffset.x, camOffset.y, - Vector3.Distance (closeCamPoint, hit.point));
       Debug.Log ("Hit the wall");
    }

    cam.position=farCamPoint;
    Debug.DrawLine(farCamPoint, closeCamPoint, Color.yellow);

    Debug.DrawRay (closeCamPoint, raycastDir,Color.red);
more ▼

asked May 22 '12 at 09:21 AM

ben0bi gravatar image

ben0bi
46 3 3 4

Do the walls have colliders on them? And are they in layers which are not excluded from raycasting?

May 22 '12 at 08:22 PM DaveA

Also, how are you declaring your layerMask? Is it a public variable? Did you construct a bitwise statement yourself?

May 22 '12 at 08:34 PM dannyskim

How is it behaving currently?

May 22 '12 at 08:57 PM Swift_On_Fire

There is a Transform called "player" where the camera turns around.

This is how the mask is created, I think it should only exclude the player and nothing else - not?

And yes, the walls have colliders. I tried it with box-collided walls and with a mesh collider for a whole house, nothing works.

Here is the mask code:

mask = 1 << player.gameObject.layer;
// Add Ignore Raycast layer to mask
mask |= 1 << LayerMask.NameToLayer("Ignore Raycast");
// Invert mask
mask = ~mask;

cam = transform;
May 22 '12 at 09:58 PM ben0bi
(comments are locked)
10|3000 characters needed characters left

1 answer: sort voted first

[Solved]

It was the mask as you mentioned. I just copied it from the camera script in the 3rdPersonShooter example where it is also used for aiming at stuff. (Thats done in another script by me..)

so, set the mask to everything and it works.

mask=1<<LayerToMask.NameToLayer("Everything");
mask=~mask;

and it works... (not really tested yet but it already moves the camera...anywhere...hope its the right spot..i got another ray just now, hope it works with the ray above. ;) )

more ▼

answered May 23 '12 at 10:31 AM

ben0bi gravatar image

ben0bi
46 3 3 4

Yay it works. You're free to use it yourself ;)

May 23 '12 at 10:42 AM ben0bi

The other vars are: camOffset: the maximum camera offset from pivotoffset...and pivotOffset: the offset from the player-Transform.

May 23 '12 at 10:43 AM ben0bi

For future use case, you may want to consider making the mask variable declaration public. If you do so, you can view the mask in the inspector, and it will have a drop down check list like it does on any Camera where you can set the layers there. I find this method a lot easier than having to deal with bitwise statements.

May 23 '12 at 07:01 PM dannyskim
(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:

x3009
x1532
x354
x142
x101

asked: May 22 '12 at 09:21 AM

Seen: 676 times

Last Updated: May 23 '12 at 07:02 PM