Unity 2D Я создал падающий метеор и хочу, чтобы метеор уничтожал плитки, попадающие в область круга

#unity3d #2d #tile

#unity3d #2d #плитка

Вопрос:

Как я могу уничтожать плитки по кругу с помощью meteor. Другими словами, как метеор уничтожает плитки по кругу.У меня есть этот код и выполняется отладка.Регистрация (попадание!) работает, но плитки не умирают. Как я могу их уничтожить, и если это возможно, мне нужно уничтожить их не квадрат за квадратом, а сферически. Большое спасибо.

 using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;

public class TilemapDestroyer : MonoBehaviour
{
    public ContactPoint2D[] contacts = new ContactPoint2D[10];

    public GameObject particles;


    void OnCollisionStay2D(Collision2D collision)

    {

        Debug.Log("Hit!");

        if (collision.gameObject.name == "Tilemap")

        {

            Debug.Log("Hit tilemap!");

            int contactCount = collision.contactCount;
            if (contactCount > contacts.Length)
                contacts = new ContactPoint2D[contactCount];
            collision.GetContacts(contacts);


            Vector2 hitPosition = Vector2.zero;
            for (int i = 0; i != contactCount;   i)

            {

                hitPosition.x = contacts[i].point.x;
                hitPosition.y = contacts[i].point.y;
                collision.gameObject.GetComponent<Tilemap>().SetTile(collision.gameObject.GetComponent<Tilemap>().WorldToCell(hitPosition), null);
                var newParticles = Instantiate(particles, hitPosition, Quaternion.identity);
                 this.transform.position, this.transform.rotation);
                StartCoroutine(DestroyParticles(newParticles));

            }

        }

    }

    public IEnumerator DestroyParticles(GameObject particles)

    {

        yield return new WaitForSeconds(3f);
        Destroy(particles);


    }
}
  

Комментарии:

1. Я хочу, чтобы это происходило так, как в игре Worms

Ответ №1:

Ну, моя первая мысль — прикрепить к этому метеору сферический коллайдер, а затем использовать физику.SphereCastAll воздействует на все плитки. Если вы новичок в радиовещании в Unity, я предлагаю сначала прочитать об этом

Комментарии:

1. я уже добавил коллайдер, и когда метеор попадает, метеор умирает. Спасибо за физику. Функция SphereCastAll, которую я попробую, но влияет ли это на составной коллайдер.

Ответ №2:

вы могли бы попробовать это: после того, как метеор коснется земли, вы используете физику.Метод CheckSphere () для получения всех игровых объектов в диапазоне. Метод принимает положение, диаметр и, необязательно, LayerMask в качестве аргументов. Он возвращает массив GameObjects. Теперь просто перечислите GameObjects в массиве и, используя метод Destroy(), уничтожьте их. (Вы передаете GameObject, который хотите уничтожить в методе.)

Надеюсь, это помогло. 🙂

Комментарии:

1. этот метод уничтожает плитки квадрат за квадратом, спасибо за ответ