public void CreateLightningStrike() { RaycastHit hit; int Roll = Random.Range(1, 101); if (Roll <= GroundStrikeOdds) { RaycastDistance = 150; } else { RaycastDistance = 1; } if (!ObjectDetected) { HitPosition = transform.position; } if (Physics.Raycast(new Vector3(HitPosition.x, HitPosition.y + 40, HitPosition.z), -transform.up, out hit, RaycastDistance, DetectionLayerMask)) { Vector3 pos = hit.point; LightningGenerated = true; if (hit.collider.GetComponent <Terrain>() != null && !ObjectDetected) { HitPosition = new Vector3(pos.x, hit.collider.GetComponent <Terrain>().SampleHeight(hit.point) + 0.5f, pos.z); } else { HitPosition = new Vector3(HitPosition.x, pos.y + 0.5f, HitPosition.z); } if (!PlayerDetected) { //If our hit object contains a LightningFireTag, start a fire. if (LightningFireTags.Contains(hit.collider.tag)) { GameObject HitEffect = UniStormPool.Spawn(LightningStrikeFire, HitPosition, Quaternion.identity); HitEffect.transform.SetParent(hit.collider.transform); } UniStormPool.Spawn(LightningStrikeEffect, HitPosition, Quaternion.identity); } else if (PlayerDetected) { if (LightningFireTags.Contains(hit.collider.tag)) { UniStormPool.Spawn(LightningStrikeFire, HitPosition, Quaternion.identity); } UniStormPool.Spawn(LightningStrikeEffect, HitPosition, Quaternion.identity); } LightningGenerated = false; ObjectDetected = false; PlayerDetected = false; HitObject = null; } }
IEnumerator Despawn() { yield return(new WaitForSeconds(Seconds)); UniStormPool.Despawn(this.gameObject); }