x


Rigidbody of empty bullet shell collision problem.

Hi, Im quite new to unity (started about a month ago) and Ive been working on a mock up of a FPS using unity primitives to help me learn the ropes before I go into anything major. So far Ive created some basic movement controls and a pistol that shoots bullets. The problem Im having is that when the gun fires the bullets I also made it eject a small cube with a rigid body component to represent an empty shell, but for some reason the shell passes through the floor (a flat plane with a mesh collider).

This person http://answers.unity3d.com/questions/2666/rigidbody-sphere-falls-through-collider-plane sounds like they had a similar problem, but if I scale cube that represents the shell to 1,1,1 it works but makes it half the size of the character and if I scale everything else to match it causes everything to run very slowly.

Another problem Im having is that if the character is moving while he shots it adds way too much force onto the rigid body causing it to behave oddly. For example, the shell flies out the left side of the gun after I instantiate it (Rigidbody. velocity = transform. TransformDirection(Vector3 (-1,0,0)); ) to simulate the force of the ejection. But if Im strafing left at the time it sort of cancels out the initial force of the shell causing it to fall through the gun or appear to fly right.

Im really sorry if this doesnt make much sense, I have dyslexia so I find stuff like this exceptionally difficult.

Is there any way I can make this work or should I give up on it?

more ▼

asked Feb 19, 2010 at 01:34 PM

Guildenstern gravatar image

Guildenstern
3 1 3 3

Hears an image of the game, dont know if this helps it make any more sense.

http://tinypic.com/view.php?pic=np2vpz&s=6

Feb 19, 2010 at 01:34 PM Guildenstern
(comments are locked)
10|3000 characters needed characters left

2 answers: sort oldest

The reason you shell is falling through the floor is probably that it is too small to detect the collision. In one frame it's fully above the floor, in the next frame it's fully below the floor, it never touches it.

We are working on adding features to solve this in an easy way, but for now, you'll have to work around this. You could manually check for collisions, by storing the position of the bullet each frame in a script, and then do a Raycast from the old position to the new one, to see if it passed through anything on it's way.

more ▼

answered Feb 19, 2010 at 04:25 PM

jonas echterhoff gravatar image

jonas echterhoff ♦♦
10.3k 8 30 113

Thanks I will give that a try!

Feb 20, 2010 at 12:19 PM Guildenstern
(comments are locked)
10|3000 characters needed characters left

About your question #2: You need to set ignore collisions between your gun shells and your character. The easiest way to do that is:

  • First set the tag and layer of your gun, character and bullet shells to be tha same, i.e "Player".

  • Use this script when you are moving, shooting or using anything that is detecting collisions. Look at this example:

    void Start() {

    // Add objects's own layer to mask
    mask = 1 << gameObject.layer;
    // Add Igbore Raycast layer to mask
    mask |= 1 << LayerMask.NameToLayer("Ignore Raycast");
    // Invert mask
    mask = ~mask;
    

    }

! Hope that helps!

more ▼

answered Jul 03, 2010 at 10:29 PM

Tuti gravatar image

Tuti
405 1 3 9

(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:

x4001
x2972
x626
x478
x10

asked: Feb 19, 2010 at 01:34 PM

Seen: 3065 times

Last Updated: Feb 19, 2010 at 01:34 PM