- Home /
[SOLVED]: Bullets passing through platforms - Brackeys Tutorial
I'm following the tutorial for 2D Platformer tutorial and currently at video 17. Wherein Brackeys changed how the bullet trail works and added hitEffect when hitting objects.
When shooting at the enemies it works but when I tried shooting the platforms it just passes through. I tried following and recreating the script many times but just couldn't make it work. I'm thinking there's something wrong with the platform themselves?
I'm new to unity and game development itself and would appreciate any help.
Here is a photo of what's happening
Or maybe I overlooked some things on the Weapon script used:
using UnityEngine;
using System.Collections;
public class Weapon : MonoBehaviour {
public float fireRate = 0;
public int Damage = 10;
public LayerMask whatToHit;
public Transform BulletTrailPrefab;
public Transform HitPrefab;
public Transform MuzzleFlashPrefab;
float timeToSpawnEffect = 0;
public float effectSpawnRate = 10;
float timeToFire = 0;
Transform firePoint;
// Use this for initialization
void Awake () {
firePoint = transform.Find ("FirePoint");
if (firePoint == null) {
Debug.LogError ("No firePoint? WHAT?!");
}
}
// Update is called once per frame
void Update () {
if (fireRate == 0) {
if (Input.GetButtonDown ("Fire1")) {
Shoot();
}
}
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);
Debug.DrawLine (firePointPosition, (mousePosition-firePointPosition)*100, Color.cyan);
if (hit.collider != null) {
Debug.DrawLine (firePointPosition, hit.point, Color.red);
Enemy enemy = hit.collider.GetComponent<Enemy>();
if (enemy != null) {
enemy.DamageEnemy (Damage);
Debug.Log ("We hit " + hit.collider.name + " and did " + Damage + " damage.");
}
}
if (Time.time >= timeToSpawnEffect)
{
Vector3 hitPos;
Vector3 hitNormal;
if (hit.collider == null) {
hitPos = (mousePosition - firePointPosition) * 30;
hitNormal = new Vector3(9999, 9999, 9999);
}
else
{
hitPos = hit.point;
hitNormal = hit.normal;
}
Effect(hitPos, hitNormal);
timeToSpawnEffect = Time.time + 1 / effectSpawnRate;
}
}
void Effect(Vector3 hitPos, Vector3 hitNormal)
{
Transform trail = Instantiate (BulletTrailPrefab, firePoint.position, firePoint.rotation) as Transform;
LineRenderer lr = trail.GetComponent<LineRenderer>();
if (lr != null)
{
lr.SetPosition(0, firePoint.position);
lr.SetPosition(1, hitPos);
}
//Destroy(trail.gameObject, 0.04f);
if (hitNormal != new Vector3(9999, 9999, 9999))
{
Transform hitParticle = Instantiate(HitPrefab, hitPos, Quaternion.FromToRotation (Vector3.right, hitNormal)) as Transform;
//Destroy(hitParticle.gameObject, 1f);
}
Transform clone = Instantiate (MuzzleFlashPrefab, firePoint.position, firePoint.rotation) as Transform;
clone.parent = firePoint;
float size = Random.Range (0.6f, 0.9f);
clone.localScale = new Vector3 (size, size, size);
//Destroy (clone.gameObject, 0.02f);
}
}
Any help or advice is greatly appreciated! Thanks!
Answer by devondyer · Jan 15, 2021 at 09:56 PM
You are likely not including the platforms in your "whatToHit" LayerMask variable. The platforms will also need to have the correct layer applied for them to be seen by the Raycast.
Here is some information on LayerMasks.
Dang, how could I overlook such simple thing. The platforms wasn't checked out on my whatToHit.
Thank you so much for your time sir. A new set of eyes is exactly what I needed.
Your answer
Follow this Question
Related Questions
How to make objects spawn at the same time without colliding ? 1 Answer
How to instantiate a sprite after it has been destroyed? 2 Answers
Distribute terrain in zones 3 Answers
How Can I Make My Fire Effect Disappear After I Shoot Object? 1 Answer
How to access Instantiated GameObject's attached script's values? 1 Answer