Hello everyone.
I’m trying to check when I throw the grenade if all effected object in the range are in sight. I’m doing that by casting a ray from the grenade object to the each of the effected objects. And if the ray hits the effected object only then damage the object. But everytime I try to do that I noticed that the ray goes through other objects and still damages the effected object even if it’s behind the wall… Can someone please help me with this? Thank you!
Picture:
The Script:
void AddExplosiveForce(Vector3 centerOfEx, float damage)
{
explosionRadius = Random.Range(defaultExplosionRadius, defaultExplosionRadius + defaultExplosionRadius / 2);
Collider[] thingsToHit = UnityEngine.Physics.OverlapSphere(centerOfEx, explosionRadius, effectedLayers);
foreach (Collider hit in thingsToHit)
{
RaycastHit hitInfo;
Ray rayToCameraPos = new Ray(transform.position, hit.transform.position - transform.position);
Debug.DrawRay(transform.position, hit.transform.position - transform.position, Color.red, 5f);
if (Physics.Raycast(rayToCameraPos, out hitInfo, 1000, effectedLayers))
{
if (hitInfo.collider.tag == hit.tag)
{
Debug.Log(hit.name + " TRUE");
if (hit.GetComponent<Rigidbody>() != null && hit.gameObject.GetComponent<LandMine>() == null)
{
hit.GetComponent<Rigidbody>().AddExplosionForce(explosionForce, centerOfEx, explosionRadius, 1, ForceMode.Impulse);
}
float proximity = (centerOfEx - hit.transform.position).magnitude;
float effect = 1 - (proximity / explosionRadius);
if (hit.gameObject.GetComponent<LandMine>() != null)
{
hit.gameObject.GetComponent<LandMine>().time = 0.25f;
}
hit.gameObject.SendMessage("ApplyDamage", damage * effect, SendMessageOptions.DontRequireReceiver);
}
else
{
Debug.Log(hit.name + " FALSE");
}
}
}
}