123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- using UnityEngine;
- using System.Collections;
- namespace PolygonArsenal
- {
- public class PolygonProjectileScript : MonoBehaviour
- {
- public GameObject impactParticle;
- public GameObject projectileParticle;
- public GameObject muzzleParticle;
- public GameObject[] trailParticles;
- [Header("Adjust if not using Sphere Collider")]
- public float colliderRadius = 1f;
- [Range(0f, 1f)]
- public float collideOffset = 0.15f;
- void Start()
- {
- projectileParticle = Instantiate(projectileParticle, transform.position, transform.rotation) as GameObject;
- projectileParticle.transform.parent = transform;
- if (muzzleParticle)
- {
- muzzleParticle = Instantiate(muzzleParticle, transform.position, transform.rotation) as GameObject;
- Destroy(muzzleParticle, 1.5f); // Lifetime of muzzle effect.
- }
- }
- void FixedUpdate()
- {
- RaycastHit hit;
- float rad;
- if (transform.GetComponent<SphereCollider>())
- rad = transform.GetComponent<SphereCollider>().radius;
- else
- rad = colliderRadius;
- Vector3 dir = transform.GetComponent<Rigidbody>().velocity;
- if (transform.GetComponent<Rigidbody>().useGravity)
- dir += Physics.gravity * Time.deltaTime;
- dir = dir.normalized;
- float dist = transform.GetComponent<Rigidbody>().velocity.magnitude * Time.deltaTime;
- if (Physics.SphereCast(transform.position, rad, dir, out hit, dist))
- {
- transform.position = hit.point + (hit.normal * collideOffset);
- GameObject impactP = Instantiate(impactParticle, transform.position, Quaternion.FromToRotation(Vector3.up, hit.normal)) as GameObject;
- if (hit.transform.tag == "Destructible") // Projectile will destroy objects tagged as Destructible
- {
- Destroy(hit.transform.gameObject);
- }
- foreach (GameObject trail in trailParticles)
- {
- GameObject curTrail = transform.Find(projectileParticle.name + "/" + trail.name).gameObject;
- curTrail.transform.parent = null;
- Destroy(curTrail, 3f);
- }
- Destroy(projectileParticle, 3f);
- Destroy(impactP, 3.5f);
- Destroy(gameObject);
- ParticleSystem[] trails = GetComponentsInChildren<ParticleSystem>();
- //Component at [0] is that of the parent i.e. this object (if there is any)
- for (int i = 1; i < trails.Length; i++)
- {
- ParticleSystem trail = trails[i];
- if (trail.gameObject.name.Contains("Trail"))
- {
- trail.transform.SetParent(null);
- Destroy(trail.gameObject, 2f);
- }
- }
- }
- }
- //private bool hasCollided = false;
- /*void OnCollisionEnter(Collision hit)
- {
- if (!hasCollided)
- {
- hasCollided = true;
- impactParticle = Instantiate(impactParticle, transform.position, Quaternion.FromToRotation(Vector3.up, impactNormal)) as GameObject;
- if (hit.gameObject.tag == "Destructible") // Projectile will destroy objects tagged as Destructible
- {
- Destroy(hit.gameObject);
- }
- foreach (GameObject trail in trailParticles)
- {
- GameObject curTrail = transform.Find(projectileParticle.name + "/" + trail.name).gameObject;
- curTrail.transform.parent = null;
- Destroy(curTrail, 3f);
- }
- Destroy(projectileParticle, 3f);
- Destroy(impactParticle, 5f);
- Destroy(gameObject);
- ParticleSystem[] trails = GetComponentsInChildren<ParticleSystem>();
- //Component at [0] is that of the parent i.e. this object (if there is any)
- for (int i = 1; i < trails.Length; i++)
- {
- ParticleSystem trail = trails[i];
- if (trail.gameObject.name.Contains("Trail"))
- {
- trail.transform.SetParent(null);
- Destroy(trail.gameObject, 2f);
- }
- }
- }
- }*/
- }
- }
|