[TASK] Working on duck-catching minigame
This commit is contained in:
122
Assets/Polygon Arsenal/Demo/Scripts/PolygonProjectileScript.cs
Normal file
122
Assets/Polygon Arsenal/Demo/Scripts/PolygonProjectileScript.cs
Normal file
@@ -0,0 +1,122 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user