【问题标题】:Unity 2D I made a falling meteor and I want meteor to destroy tiles that hits in a circle areaUnity 2D我制作了一颗坠落的流星,我想让流星摧毁撞击圆形区域的瓷砖
【发布时间】:2020-08-20 09:06:04
【问题描述】:

我怎样才能用流星循环破坏瓷砖。换句话说,流星如何循环破坏瓷砖。我有这个代码和 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);


    }
}

【问题讨论】:

  • 我希望像蠕虫游戏一样发生这种情况

标签: unity3d 2d tile


【解决方案1】:

我的第一个想法是在这个流星上附加一个球体对撞机,然后使用 Physics.SphereCastAll 来影响所有的瓷砖。 如果您是 Unity 中的新 Raycasting,我建议您首先阅读它

【讨论】:

  • 我已经添加了对撞机,当流星撞击流星时死亡。感谢 Physics.SphereCastAll 功能我会尝试,但它会影响复合对撞机。
【解决方案2】:

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

我希望这会有所帮助。 :)

【讨论】:

  • 那个方法是按方格破坏瓷砖吗,谢谢回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 2020-02-13
相关资源
最近更新 更多