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?

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.

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!