Hi all, I am currently trying to implement a shotgun into my game. Originally I was using multiple collision spheres shot from the gun to detect what is hit but found this technique didn’t feel it gave the right spread of damage.
I read about using an overlapsphere to get the amount of objects hit by the shotgun but this is not giving any real results, not sure where im going wrong with this so any help would be very much appreciated.
Thanks
void ShotGunUpdate()
{
RaycastHit Hit;
var colliders = Physics.OverlapSphere(new Vector3(Aim.transform.position.x,Aim.transform.position.y-2,Aim.transform.position.z + 9), ShotgunRadius);
var count = Physics.OverlapSphereNonAlloc(new Vector3(Aim.transform.position.x, Aim.transform.position.y - 2, Aim.transform.position.z + 9), ShotgunRadius, Util.Colliders);
//Vector3 explosionPos = transform.position;
for (int i = 0; i < count; i++)
{
var collider = Util.Colliders[i];
if (!collider.isTrigger)
{
var part = collider.GetComponent<BodyPartHealth>();
if (part == null)
{
var closest = collider.transform.position;
if (collider.GetType() == typeof(MeshCollider))
if (((MeshCollider)collider).convex)
closest = collider.ClosestPoint(transform.position);
var vector = transform.position - closest;
var distance = vector.magnitude;
if (distance < ShotgunRadius)
{
if (Physics.Raycast(collider.transform.position,transform.TransformDirection(Vector3.forward), out Hit, Mathf.Infinity))
{
Vector3 normal;
if (distance > float.Epsilon)
normal = vector / distance;
else
normal = (closest - collider.transform.position).normalized;
if (collider.tag == "Player")
{
}
else
{
Apply(collider.gameObject, closest, normal, (1 - distance / ShotgunRadius));
}
}
}
}
}
}
Destroy(gameObject);
}