Я делаю работу для школы: играю как бомбардировщик.
Моя проблема в том, что когда бомба взрывается, частицы должны перестать появляться после стены. Вот изображение проблемы:
У меня есть этот код, чтобы создать бомбу и запустить сопрограмму для создания частиц во всех направлениях:
void Explode()
{
Instantiate(explosionPrefab, transform.position, Quaternion.identity);
StartCoroutine(CreateExplosions(Vector3.forward));
StartCoroutine(CreateExplosions(Vector3.right));
StartCoroutine(CreateExplosions(Vector3.back));
StartCoroutine(CreateExplosions(Vector3.left));
GetComponent<MeshRenderer>().enabled = false;
exploded = true;
GetComponent<CapsuleCollider>().enabled = false;
Invoke("desativar_particulas", 0.4f);
Destroy(gameObject, .45f);
}
А вот моя сопрограмма для создания частиц:
private IEnumerator CreateExplosions(Vector3 direction)
{
for (int i = 1; i < 3; i++)
{
RaycastHit hit;
Physics.Raycast(transform.position + new Vector3(0, .5f, 0), direction * 10, out hit, i, levelMask);
if (!hit.collider)
{
Instantiate(explosionPrefab, transform.position + (i * direction * 10), explosionPrefab.transform.rotation);
}
else
{
break;
}
yield return new WaitForSeconds(.05f);
}
}
Этот оператор if должен помочь: у стены есть компонент коллайдера коробки, а у частицы есть компонент коллайдера коробки в качестве триггера. Я что-то пропустил? Пожалуйста, помогите, спасибо.
В этом:
Physics.Raycast(transform.position + new Vector3(0, .5f, 0), direction * 10, out hit, i, levelMask)
Похоже, вы увеличиваете расстояние каждого броска, чтобы каждый раз достигать следующего блока (кстати, умный ход. Я бы сделал это гораздо более запутанным способом), но только на расстояние, равное 3, тогда как во всех ссылках на место взрывов вы увеличили его в десять раз.
Возможно, вы имели в виду сделать что-то вроде этого:
Physics.Raycast(transform.position + new Vector3(0, .5f, 0), direction, out hit, i * 10, levelMask)
При этом направление raycast — это просто направление, которое вы вводите в функцию, а расстояние увеличивается в десять раз?
Из любопытства, почему вы создаете несколько систем частиц вместо того, чтобы использовать одну со встроенным меню столкновений? Утраченный потенциал...
У ParticleSystems есть компонент для столкновения, вы можете использовать его, чтобы уничтожить их или отскочить от стены, если они ударятся о стену.