TG9six 03a642d635 first push
first push
2025-09-06 17:17:39 +04:00

122 lines
4.5 KiB
C#

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, 5.0f);
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);
}
}
}
}*/
}
}