You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.3 KiB
70 lines
2.3 KiB
3 years ago
|
using System;
|
||
|
using System.Collections;
|
||
|
using UnityEngine;
|
||
|
using Random = UnityEngine.Random;
|
||
|
|
||
|
namespace UnityStandardAssets.Effects
|
||
|
{
|
||
|
public class ExplosionFireAndDebris : MonoBehaviour
|
||
|
{
|
||
|
public Transform[] debrisPrefabs;
|
||
|
public Transform firePrefab;
|
||
|
public int numDebrisPieces = 0;
|
||
|
public int numFires = 0;
|
||
|
|
||
|
|
||
|
private IEnumerator Start()
|
||
|
{
|
||
|
float multiplier = GetComponent<ParticleSystemMultiplier>().multiplier;
|
||
|
|
||
|
for (int n = 0; n < numDebrisPieces*multiplier; ++n)
|
||
|
{
|
||
|
var prefab = debrisPrefabs[Random.Range(0, debrisPrefabs.Length)];
|
||
|
Vector3 pos = transform.position + Random.insideUnitSphere*3*multiplier;
|
||
|
Quaternion rot = Random.rotation;
|
||
|
Instantiate(prefab, pos, rot);
|
||
|
}
|
||
|
|
||
|
// wait one frame so these new objects can be picked up in the overlapsphere function
|
||
|
yield return null;
|
||
|
|
||
|
float r = 10*multiplier;
|
||
|
var cols = Physics.OverlapSphere(transform.position, r);
|
||
|
foreach (var col in cols)
|
||
|
{
|
||
|
if (numFires > 0)
|
||
|
{
|
||
|
RaycastHit fireHit;
|
||
|
Ray fireRay = new Ray(transform.position, col.transform.position - transform.position);
|
||
|
if (col.Raycast(fireRay, out fireHit, r))
|
||
|
{
|
||
|
AddFire(col.transform, fireHit.point, fireHit.normal);
|
||
|
numFires--;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
float testR = 0;
|
||
|
while (numFires > 0 && testR < r)
|
||
|
{
|
||
|
RaycastHit fireHit;
|
||
|
Ray fireRay = new Ray(transform.position + Vector3.up, Random.onUnitSphere);
|
||
|
if (Physics.Raycast(fireRay, out fireHit, testR))
|
||
|
{
|
||
|
AddFire(null, fireHit.point, fireHit.normal);
|
||
|
numFires--;
|
||
|
}
|
||
|
testR += r*.1f;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
private void AddFire(Transform t, Vector3 pos, Vector3 normal)
|
||
|
{
|
||
|
pos += normal*0.5f;
|
||
|
Transform fire = (Transform) Instantiate(firePrefab, pos, Quaternion.identity);
|
||
|
fire.parent = t;
|
||
|
}
|
||
|
}
|
||
|
}
|