问题描述
我如何用流星循环摧毁瓷砖。换句话说,流星如何循环破坏瓷砖。我有这段代码,并且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);
}
}
解决方法
我的第一个想法是将一个球体碰撞器附加到此流星上,然后使用Physics.SphereCastAll影响所有瓦片。 如果您是Unity中的新Raycasting,建议您先阅读一下
,您可以尝试以下操作: 流星触地后,您可以使用Physics.CheckSphere()方法获取该范围内的所有GameObject。该方法将位置,直径和可选的LayerMask作为参数。它返回一个GameObjects数组。现在,只需列出数组中的GameObject,然后使用Destroy()方法销毁它们即可。 (您在方法中传递了要销毁的GameObject。)
我希望这会有所帮助。 :)