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.
69 lines
2.3 KiB
69 lines
2.3 KiB
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; |
|
} |
|
} |
|
}
|
|
|