- Home /
multiple raycasts in sphere shape (grenade explosion)
I have a grenade script that sends out a bunch of raycasts, and if one of them hits and enemy, and the hit distance is small enough, the enemy gets killed. The thing I'm stuck on is trying to make a multitude of rays get generated at angles that end up making a sphere. I have a for loop that casts raynum amount of rays, and the angle is altered based on the int spread. My problem is that no matter what int i set spread to, the rays fire in a cone short cone shape and not a sphere.
//for loop amount of rays
for(int i = 0; i < raynum; i++)
{
RaycastHit hit;
float randspreadx = Mathf.Abs(Random.Range(-spread,spread));
float randspready = Mathf.Abs(Random.Range(-spread,spread));
float randspreadz = Mathf.Abs(Random.Range(-spread,spread));
Vector3 thedirection = transform.TransformDirection(randspreadx, randspready, randspreadz);
if (Physics.Raycast(transform.position, thedirection, out hit))
{
Debug.DrawLine(transform.position, hit.point, Color.red, 2);
if(hit.transform.tag == "enemy")
{
float enemydist = Vector3.Distance(transform.position, hit.transform.position);
if(enemydist <= blastradius)
{
Destroy(hit.transform.gameObject);
}
}
}
}
Answer by robertbu · Aug 11, 2013 at 07:23 PM
To answer your direct question, you will find a function called UniformPointsOnSphere() that generates an sphere of direction vectors at the question below. Once created, you can use the same array any time you want to raycast.
http://answers.unity3d.com/questions/410992/how-do-i-get-raycasts-to-cast-symmetrically.html
With that said, it may not be the most efficient approach to the problem. Depending on what you want to do, it might be better to Physics.Linecast() between your explosion point and the position of all the enemies rather than to cast about to see if the explosion hits anything. Here is one answer using that solution here:
http://answers.unity3d.com/questions/423174/bomberman-bombs-using-overlapsphere1st-person.html
The code in this answer checks the corners of the bounding box which may be more check that you need/want. But it gives you the idea of how this might work.