#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. этот метод уничтожает плитки квадрат за квадратом, спасибо за ответ