As per this video, whenever I hit the “corners” between 2 blocks I get a stack overflow exception as shown in video below.
Here’s the code.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Block : MonoBehaviour {
// Config Parameters
[SerializeField] AudioClip breakSound;
[SerializeField] GameObject blockSparklesVFX;
[SerializeField] int maxHits;
// Cached Reference
Level level;
// State Variables
[SerializeField] int timesHit; // TODO only serialized for debug purposes
private void Start()
{
CountBreakableBlocks();
}
private void CountBreakableBlocks()
{
level = FindObjectOfType<Level>();
if (tag == "Breakable")
{
level.CountBlocks();
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
if(gameObject.tag == "Breakable")
{
HandleHit();
}
}
private void HandleHit()
{
timesHit++;
if (timesHit >= maxHits)
{
DestroyBlock();
}
}
private void DestroyBlock()
{
AddScore();
PlayBlockDestroyedSFX();
Destroy(gameObject);
level.BlockDestroyed();
TriggerSparklesVFX();
}
private void PlayBlockDestroyedSFX()
{
AudioSource.PlayClipAtPoint(breakSound, Camera.main.transform.position);
}
private void AddScore()
{
FindObjectOfType<GameSession>().AddToScore(); DestroyBlock();
}
private void TriggerSparklesVFX()
{
GameObject sparkles = Instantiate(blockSparklesVFX, transform.position, transform.rotation);
Destroy(sparkles, 1f);
}
}