- Home /
Question by
Karks · Dec 09, 2020 at 11:02 PM ·
2d gameraycasthit2dtop down shooter
My raycasting script stops on error in play mode and i can't find out why
Hi, im new to unity and im trying to implement a weapon into my 2d top down shooter, which hits enemies via raycast and with an explosion on hit, or mouse position if player missed an enemy, using this script
public class Player_MagdoomShooting : MonoBehaviour
{
public Transform MagdoomCannonmuzzle;
public Transform player;
public LayerMask enemyLayer;
public float blastRadius = 1f;
private float ContactPointDistance;
private Vector3 mousePos;
void Update()
{
mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 direction = mousePos - MagdoomCannonmuzzle.position;
ContactPointDistance = Vector2.Distance(MagdoomCannonmuzzle.position, mousePos);
if (Input.GetButtonDown("Fire2"))
{
Debug.DrawRay(MagdoomCannonmuzzle.position, direction, Color.yellow, ContactPointDistance);
RaycastHit2D hitInfo = Physics2D.Raycast(MagdoomCannonmuzzle.position, direction, ContactPointDistance);
if (hitInfo.collider.gameObject.CompareTag("enemy"))
{
Collider2D[] explosion = Physics2D.OverlapCircleAll(hitInfo.rigidbody.ClosestPoint(MagdoomCannonmuzzle.position), blastRadius, enemyLayer);
foreach(Collider2D enemy in explosion)
{
Debug.Log(enemy.name + " was hit by explosion");
}
Debug.Log(hitInfo.transform.name + " was hit by ray");
}
else if (hitInfo.collider.gameObject.CompareTag("enemyBullet"))
{
Collider2D[] explosion = Physics2D.OverlapCircleAll(hitInfo.rigidbody.ClosestPoint(MagdoomCannonmuzzle.position), blastRadius, enemyLayer);
foreach (Collider2D enemy in explosion)
{
Debug.Log(enemy.name + " was hit by explosion");
}
Debug.Log(hitInfo.transform.name + " was hit by ray");
}
else
{
Collider2D[] explosion = Physics2D.OverlapCircleAll(mousePos, blastRadius, enemyLayer);
foreach (Collider2D enemy in explosion)
{
Debug.Log(enemy.name + " was hit by explosion");
}
}
}
}
}
For a reason i can't understand it works fine only if it hits something. if ray doesn't hit anything game gets error paused but console writes no message. It has to be something in "If" part, because it works without it.
Comment
Best Answer
Answer by Karks · Dec 10, 2020 at 11:54 AM
Fixed it. It was NullExpeption type of poblem. Rewrote script to this
void Update()
{
mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector2 direction = mousePos - MagdoomCannonmuzzle.position;
ContactPointDistance = Vector2.Distance(MagdoomCannonmuzzle.position, mousePos);
if (Input.GetButtonDown("Fire2"))
{
Debug.DrawRay(MagdoomCannonmuzzle.position, direction, Color.yellow, ContactPointDistance);
RaycastHit2D hitInfo = Physics2D.Raycast(MagdoomCannonmuzzle.position, direction, ContactPointDistance);
if (hitInfo)
{
Debug.Log(hitInfo.transform.name + " was hit by ray");
if (hitInfo.collider.gameObject.CompareTag("enemy"))
{
Debug.Log(hitInfo.transform.name + " will suffer damage");
Collider2D[] explosion = Physics2D.OverlapCircleAll(hitInfo.rigidbody.ClosestPoint(MagdoomCannonmuzzle.position), blastRadius, enemyLayer);
foreach (Collider2D enemy in explosion)
{
Debug.Log(enemy.name + " was hit by explosion");
}
}
else if (hitInfo.collider.gameObject.CompareTag("enemyBullet"))
{
Debug.Log(hitInfo.transform.name + " will suffer damage");
Collider2D[] explosion = Physics2D.OverlapCircleAll(hitInfo.rigidbody.ClosestPoint(MagdoomCannonmuzzle.position), blastRadius, enemyLayer);
foreach (Collider2D enemy in explosion)
{
Debug.Log(enemy.name + " was hit by explosion");
}
}
}
else
{
Collider2D[] explosion = Physics2D.OverlapCircleAll(mousePos, blastRadius, enemyLayer);
foreach (Collider2D enemy in explosion)
{
Debug.Log(enemy.name + " was hit by explosion");
}
}
}
}
Your answer
Follow this Question
Related Questions
Enemy Line of Sight Help Needed 2 Answers
Need help with my melee system and arrays 0 Answers
Top down 2d shooter enemy control 2 Answers
Theyest Thou game Clone 0 Answers