- Home /
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?
Hears an image of the game, dont know if this helps it make any more sense.
Answer by jonas-echterhoff · Feb 19, 2010 at 04:25 PM
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.
Answer by Tuti · Jul 03, 2010 at 10:29 PM
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!