- Home /
Bullet Trail not destroying on collision
Currently I have it setup to Debug when it hits "X" layer (which works fine) and it replies with the Debug message, however the Bullet Trail goes thru the object. I want it to destroy on contact and be replaced with explosionprefab. (keep in mind my coding is atrocious. I need to clean it up)
Gun Script: public class Gun : MonoBehaviour {
public float FireRate = 0;
public float Damage = 10;
public LayerMask WhatToHit;
public Transform BulletTrailPrefab;
public Transform explosionPrefab;
float SpawnRate = 10;
float TimeToSpawnEffect = 0;
float timeToFire = 0;
Transform firePoint;
// Use this for initialization
void Awake () {
firePoint = transform.FindChild ("FirePoint");
if (firePoint == null)
{
Debug.LogError("No firepoint? POR QUEEEEEE!!!");
}
}
// Update is called once per frame
void Update () {
//Is it a single fire weapon? (Pistol)
if (FireRate == 0)
{
if (Input.GetButtonDown("Fire1"))
{
Shoot();
}
}
//Not Single Fire? This checks and makes it calculate the time between shots.
else
{
if (Input.GetButton ("Fire1") && Time.time > timeToFire)
{
timeToFire = Time.time + 1 /FireRate;
Shoot();
}
}
}
void Shoot ()
{
Vector2 mousePosition = new Vector2 (Camera.main.ScreenToWorldPoint (Input.mousePosition).x, Camera.main.ScreenToWorldPoint(Input.mousePosition).y);
Vector2 firePointPosition = new Vector2(firePoint.position.x, firePoint.position.y);
RaycastHit2D hit = Physics2D.Raycast (firePointPosition, mousePosition-firePointPosition, 100, WhatToHit);
if (Time.time >= TimeToSpawnEffect)
{
Effect();
TimeToSpawnEffect = Time.time + 1 / SpawnRate;
}
//Debug.DrawLine(firePointPosition, (mousePosition - firePointPosition)*100);
if (hit.collider != null) {
Debug.Log("We hit" + hit.collider.name + " and did" + Damage + " damage.");
}
}
void Effect()
{
Instantiate(BulletTrailPrefab, firePoint.position,firePoint.rotation);
}
void OnCollisionEnter(Collision collision)
{
ContactPoint contact = collision.contacts[0];
Quaternion rot = Quaternion.FromToRotation(Vector3.up, contact.normal);
Vector3 pos = contact.point;
Instantiate(explosionPrefab, pos, rot);
Destroy(gameObject);
}
}
Bullet Script: public class Bullet : MonoBehaviour {
public int moveSpeed = 220;
// Update is called once per frame
void Update()
{
transform.Translate(Vector3.right * Time.deltaTime * moveSpeed);
Destroy(gameObject, 1);
}
void OnCollsionEnter(Collision collision)
{
foreach (ContactPoint contact in collision.contacts)
{
Debug.DrawRay(contact.point, contact.normal, Color.cyan);
Destroy(gameObject);
}
}
}
Hoping to get this fixed soon, maybe I can't find a solution because I've been looking at it too long... Or I'm just too new.
Your answer
Follow this Question
Related Questions
Make 2D projectile collide only from the outside 1 Answer
How to make a little wiggle room for the collision? 1 Answer
How to select the trigger layer on a Box Collider 2D 2 Answers
Limiting Physics to X and Y 5 Answers
What is the best/easiest way to align a 2D rigidbody to specific sections of a sprite? 1 Answer