private void InstanciateBlastTail(string name, Direction dirKey, Vector2 startPosition, Vector3 direction, float gridSize, float angle) { RaycastHit2D ray2D = Physics2D.Raycast(startPosition, direction, range * gridSize - 0.1f, contactLayer); int grids = 0; if (ray2D.transform != null) { grids = Mathf.RoundToInt(ray2D.distance / gridSize); //Check damageable collision game object IDamageable damageable = ray2D.transform.GetComponent <IDamageable>(); if (damageable != null && damageable.CanDamageIt()) { damageable.Damage(strength); } } else { grids = range; } distance[dirKey] = grids * gridSize - 0.1f; //print(direction + " -> grids " + grids + ", distance: " + distances[distanceIndex]); int spriteRendererCount = 0; for (int i = 0; i < grids; i++) { GameObject go = new GameObject(name + i); spriteRenderers[dirKey].Add(go.AddComponent <SpriteRenderer>()); spriteRendererCount = spriteRenderers[dirKey].Count - 1; spriteRenderers[dirKey][spriteRendererCount].sortingLayerID = SpriteRenderer.sortingLayerID; go.transform.parent = transform; go.transform.position = transform.position + direction * (i + 1) * gridSize; spriteRenderers[dirKey][spriteRendererCount].sprite = ResourcesProvider.Instance.ExplosionSprites[horizontalAnimationBegin]; go.transform.localScale = Vector2.one; go.transform.localRotation = Quaternion.Euler(Vector3.forward * angle); } //troca o último Sprite para ponta da explosão caso exista if (grids > 0) { spriteRenderers[dirKey][spriteRendererCount].sprite = ResourcesProvider.Instance.ExplosionSprites[horizontalEndAnimationBegin]; } }
private void CheckBoxCollision() { BoxCollider2D box = GetComponent <BoxCollider2D>(); RaycastHit2D[] hits = Physics2D.BoxCastAll(box.bounds.center, box.size, 0f, Vector2.zero, 0f, contactLayer); foreach (RaycastHit2D hit in hits) { if (hit.transform != null) { IDamageable damageable = hit.transform.GetComponent <IDamageable>(); if (damageable != null && damageable.CanDamageIt()) { damageable.Damage(strength); } } } }