- Home /
Use RayCasting and simulate collision physics
Hi,
I want to write a First Person shooting game. I want all elements of the same to collide with my shots.
I want to use raycasting, but it will not make the box move.
What is the proper way to implement what I want?
Answer by fafase · Aug 04, 2013 at 08:43 AM
Raycasting is just a geometrical calculation to report information. It will only tell you if there is a collision and provide information about it like the position of the hit, how far from the starting point, the normal of the triangle on which the raycast hit.
It is now up to you to develop a method to make things move on impact.
For instance is you want a blood splatter on hit:
void BloodSplaatter(RaycastHit hit){
Quaternion rot = Quaternion.LookRotation(hit.normal);
Instantiate(bloodParticle,hit.position, rot)
}
That will take the normal of the triangle to spurt the blood from the impact position. You can also use decal to place a texture on a wall to show an impact instead of blood.
Finally, if you need object to fly around on hit, it is a little more complicated. You would have to use the distance traveled to define the velocity of the object, not so hard though, but then you need the mass of the other object, its own velocity and using some Newton's formula, you can get the velocity of the two objects...it is not impossible.
http://www.physicsclassroom.com/class/momentum/u4l2a.cfm
Or you can use a rigidbody instead and Unity does it for you. In this case, instead of projecting the raycast ahead of your gun, you throw the rigidbody with addforce, but because of the velocity you may miss collision, the frame miss principle.
To avoid this, you can linecast between the previous position of the projectile and its actual position, that will report if the projectile should have hit something. Then you are back to the top of that answer.