如何解决Unity 2D我做了一颗流星,我想让流星摧毁在圆形区域内撞击的瓷砖
我如何用流星循环摧毁瓷砖。换句话说,流星如何循环破坏瓷砖。我有这段代码,并且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。)
我希望这会有所帮助。 :)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。