Unity3d Unity 2D我制造了一颗坠落的流星,我想让流星摧毁撞击圆形区域的瓷砖

Unity3d Unity 2D我制造了一颗坠落的流星,我想让流星摧毁撞击圆形区域的瓷砖,unity3d,2d,tile,Unity3d,2d,Tile,我怎样才能用流星循环摧毁瓷砖。换句话说,meteor是如何循环破坏瓷砖的。我有这个代码,Debug.Log(Hit!)可以工作,但瓷砖不会消亡。我怎样才能消灭它们?如果可能的话,我需要消灭它们,不是一个正方形一个正方形,而是球形的。非常感谢 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Tilemaps; public class TilemapD

我怎样才能用流星循环摧毁瓷砖。换句话说,meteor是如何循环破坏瓷砖的。我有这个代码,Debug.Log(Hit!)可以工作,但瓷砖不会消亡。我怎样才能消灭它们?如果可能的话,我需要消灭它们,不是一个正方形一个正方形,而是球形的。非常感谢

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);


    }
}
使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用UnityEngine.Tilemaps;
公共类TilemapDestroyer:单一行为
{
public ContactPoint2D[]contacts=新ContactPoint2D[10];
公共游戏对象粒子;
无效碰撞Stay2D(碰撞2D碰撞)
{
Log(“Hit!”);
如果(collision.gameObject.name==“Tilemap”)
{
Log(“点击tilemap!”);
int contactCount=collision.contactCount;
如果(contactCount>contacts.Length)
contacts=新的ContactPoint2D[联系人计数];
碰撞。GetContacts(contacts);
Vector2 hitPosition=Vector2.0;
对于(int i=0;i!=contactCount;++i)
{
hitPosition.x=触点[i]。点.x;
hitPosition.y=触点[i]。点.y;
collision.gameObject.GetComponent().SetTile(collision.gameObject.GetComponent().WorldToCell(hitPosition),null);
var newParticles=实例化(粒子、命中位置、四元数.identity);
这个.变换.位置,这个.变换.旋转);
Start例程(销毁粒子(新建粒子));
}
}
}
公共IEnumerator粒子(游戏对象粒子)
{
返回新的等待秒(3f);
破坏(颗粒);
}
}

我的第一个想法是在这颗流星上安装一个球体对撞机,然后使用Physics.spherestall来影响所有的瓷砖。 如果您是Unity中的新光线投射,我建议您先阅读一下它

您可以尝试以下方法: 流星接触地面后,使用Physics.CheckSphere()方法获取范围内的所有游戏对象。该方法将位置、直径和可选的LayerMask作为参数。它返回一个游戏对象数组。现在只需列出阵列中的游戏对象,并使用Destroy()方法销毁它们。(在方法中传递要销毁的游戏对象。)


我希望这有帮助。:)

我已经添加了对撞机,当流星撞击时,流星死亡。感谢物理。SphereStall函数我会尝试,但它是否会影响复合对撞机。这种方法会一块一块地破坏瓷砖,谢谢回答。我希望这种情况像蠕虫游戏一样发生