It might be a little late to mention, but if your effect can't dissapear after it finished playing, try these steps: 1. Go to the animation tab of your effect and add an event on frame n+1(3rd block on the right of 'Samples') 2. Create a destroy script and add it under your effect prefab 3. Go to the inspector of the animation event you just added, type 'Destroy' into the function column, no brackets And that shall do the work. My script looks like below: public class DestroyGameObject : MonoBehaviour { public void Destroy() { Destroy(gameObject); } } I got this solution from chat-GPT and it worked like magic. Hope it helps :)
Not gonna lie but he is better at speaking then my teachers, he inspires people to do stuff, he makes people positive by his smile dude, i just love watching him
No man, thank you! Thank you for connecting with your viewers even tough you have 570,000 subscribers. It really shows that you're one of those rare youtubers who actually interact with their viewers which makes me feel happy and exited every time I watch your videos!
To be honest, he's definitely the person I'm gonna go to whenever I get started with unity. The videos seem so helpful A different kind of helpful, like I'd actually learn from them
If it seems like even after you edit the CharacterController2D script your FirePoint doesn't flip on the y-axis, click on your Local/Global button at the top of the editor. The FirePoint is flipping, but if you have one of those on and not the other, it will appear as if it's not. Regardless, as long as you've inserted the code as instructed, the bullet will come out of the FirePoint in the correct direction no matter if you have Local or Global selected.
For those who cant get the Firing Point to flip with the sprite, copy lines 114-124 which can be seen seen at 2:47, this ties in with the lines at the bottom.
Interesting, I could not figure this out and somehow managed to get the bullets to switch direction when the player turns but the firepoint is still fixed. So basically it's still broken, I will look into your suggestion. Thank you!!
Your tutorials are so easy to follow, and really fun. They are really positive, and user friendly too. You have helped me so much, as a beginner game dev. Thanks Asbjorn! :)
If u want that the bullet disappears after leaving the camera screen use: public class Bullet : MonoBehaviour { public float speed = 20f; public int damage = 20; public Rigidbody2D rb; public GameObject impactEffect; // Start is called before the first frame update void Start() { rb.velocity = transform.right * speed; } private void OnTriggerEnter2D(Collider2D hitInfo) { Enemy enemy = hitInfo.GetComponent(); if (enemy != null) { enemy.TakeDamage(damage); } Destroy(gameObject); } void OnBecameInvisible() { enabled = false; Destroy(gameObject); } } It's important for the level design i think.
If anyone had an issue with the animation not disappearing after it's end, the solution is to add a script to the gameobject that is animated by it (in that case, impactEffect and destroyEffect) that has a function that destroys the gameobject. Than all you've gotta do is to add an extra frame to the animation and place an animation event that will trigger the destroy function
@@shwk77 Hey, don't know if you were able to fix it or not, but here is what I did. Since we are instantiating a impact/hit effect prefab rather than changing the animation state, you need to attach a script to the hit/impact effect prefab and create a public function which the destroys the gameObject, this function would be called after the final frame of impact effects using the animation event.
@@SDSFDSF631 What I did (a pretty dumb way) is created a script in the destroyEffect prefab in the Start frame like "Destroy(GameObject, 0.5f)" which makes it looks like that destroyEffect dissapeared right after it finished animation, but you can change the time to whatever you feel is right.
I'm seven minutes in and you're already providing a lot of clarity to my shooting script. Other tutorials works but their rather overly complicated and don't explain much- you fix both issues. Very good job :D
For people using the Prefab approach, please do remember to utilize object pooling in order to maximize performance. I believe Brackeys has a video set up for this.
You SAVED me life. I've been trying for 2 hours to figure how to get the bullet to shoot across. (Using other tutorials) This one nailed it step by step. Thanks!!!!
For anyone trying to get their bullet to shoot forward instead of right, use forward in place of right, or if that doesnt work, use up. You 2D game might be oriented so that forward to your camera view is actually the green axis, or up.
Alright if anyone is wondering how they can get their character to shoot while crouching here's how: 1. Make another firepoint for the crouching position 2. go into the weapon script and change it to this: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Weapon : MonoBehaviour { public Transform firePoint; public GameObject bulletPrefab; public Transform firePointcrouch; // Update is called once per frame private void Update() { if ((Input.GetButton("Crouch") == true && Input.GetButtonDown("Fire1"))) { CrouchShot(); } else if (Input.GetButtonDown("Fire1")) { Shoot(); } void CrouchShot() { Instantiate(bulletPrefab, firePointcrouch.position, firePointcrouch.rotation); } void Shoot() { Instantiate(bulletPrefab, firePoint.position, firePoint.rotation); } } } 3. back into unity, place the crouching firepoint into the new firepoint slot on the weapon component That should make it so you can crouch and shoot.
I know this is an old video so I don't know if you'll see this but this helped me so much. I was at a dead end with my game and it was really disheartening. I felt like I couldn't progress if I hadn't got this part sorted and even though it's not exactly the type of shooting I wanted, I was lucky to find this and I'm glad I switched it out to shooting just along the X axis. Thank you!!
While you wait, there are some cool tutorials about this subject already! :) Here's one: th-cam.com/video/EOSjfRuh7x4/w-d-xo.html. This stuff also really helped me a lot: juhakeranen.com/dev-mistakes-pdf/
If you have a problem with the animation not disappearing after it's over, the solution is to add a script to the Object "DeathEffect" that has a function that destroys the gameobject after a bit of time (the time the animation takes). This Code worked for me : using System.Collections; using System.Collections.Generic; using UnityEngine; public class DeathEffect : MonoBehaviour {
Tip to prevent lag (if you have large open areas or if it some how gets through a barrier) You can make a script that delays the bullet after a while such as Void start () { Invoke(“despawn”, 20); } Public void despawn () { Destroy(Gameobject); }
I just love your tutorials. Even If I don't really need that at this moment it's so useful and helpful for further struggles. Always find what I was looking for and even more. And you do always smile and make it all interesting. Just great job, thank you :D.
If anyone has a problem when shoot to right or left and bullet doesn't appear try to modify the position Z = 0 on the FirePoint, it's because bullet spawns out of the camera. PD: Hope this solve your problem :)
Amazing, all your tutorials are dope, easy to understand and simply the best unity tutorials. Please provide us with more awesome tutorials like these. Looking forward. Much love😊
Glad to see both of the methods covered! :D I'm personally a RayCast-guy, because Vector performance lol but I use ; Ray ray = new Ray(transform.position , transform.left); RaycastHit Block ; if(Physics.Raycast(ray , out Block , 6f)) { Enemy enemy= Block.transform.GetComponent(); if(enemy != null) { enemy.TakeDamage(10); } }
Thank you so much, I just started with Unity and wasn't sure how to create objects that kept the same components. Because of this video I learnt what a Prefab was, which solved my issue.
Using colliders on the bulletsbis quite inefficient. It is much better to do a linecast from the bullet's last position to it's current one. This also means you can make bullets that can go through walls and find the out point.
On your bullet script, you have a variable that keeps track of the last position it was in. Every frame you do a linecast from the last position, to the current position. If the bullet collided with something during that last frame of movement, the linecast will pass through what the bullet hit. This solves the collision system not resolving a hit, because no matter how far the bullet travels in that one frame, the linecast will still pass through whatever the bullet hit. Regarding the wall part, if you want penetration, when you do the linecast, you can check if the linecast passed through a wall. If it did, you can use vector math to figure out where the bullet came out of the wall and at what angle.
@cooldude 4172 I don't have any experience with that engine, but a quick google search brought up the collision_line method which may help you docs.yoyogames.com/source/dadiospice/002_reference/movement%20and%20collisions/collisions/collision_line.html
19:50 if you want to wait for exactly 1 frame, then imo it's more accurate to use yield return Time.deltaTime because that's the length of the last frame. of course it's not 100% accurate because of varying frame lengths but it should be closer than 0.02 seconds
If ur enemy doesn't disappear if it's health goes under 0 health just delete the line "Instantiate(deathEffect, transform.position, Quaternion.identity);" in the enemy script.
Could you go over the controller script in an upcoming video? It would be really helpful to understand what's happening in it step-by-step so when we start our own projects we don't have to rely on other people's scripts
Quick tip: Add a float: impactEffectTime This is the time the impact effect animation plays, roughly. The effect should end on an invisible frame, so it doesn't show, but if you look at the inspector, the prefab is still there. After a few thousand shots, this could slow down your game. With a timer of, say, half to one second, you could destroy the effect prefab as well. By having this as a variable, you can use much longer effects, in case you have special weapons with much longer effects in the future. Like a rocket with secondary explosions. This will then clean up the effect prefabs for you and you shouldn't have more than maybe 10 effect prefabs at any given time, and no significant impact on performance. To implement, just copy the Destroy command from the bullet itself, place right before the bullet, change the variable name from the bullet game object to the effect game object and add the timer as a second parameter. It looks like it would destroy the effect prefab first, but the second parameter is actually a timer, so the bullet would be destroyed instantly, and the effect would be destroyed impactEffectTime seconds later.
Brackeys. I know this request might be pointless, but could you please, I beg you, make tutorial with shader graph related to rain ripples and rainy window drops and if you find time, character that looks like a ghost, but shaped like character :)
BEST shooting tutorial for 2D out there, thank you! I got a question tho and I really hope you'll answer, how did you turn the impact animation into a useable prefab? I'm banging my head over this and it should'nt be so hard haha
For people who want the shots to not affect the player, here is a fix: in the bullet rigidbody, press layer overrides, then add a new layer called player to the excludes. add the player to this layer, and the bullet will ignore it.
I had the same problem, i downloaded an empty png then add it to end of the impact animation and enemy death animation it fixed mine but im sure there is much better solution
To people who have trouble with gunpoint flipping issue(Gun point changing direction) you can use this Have 2 Variables private bool isFacingRight = true; private bool isFacingLeft = false; Then the rest of the logic is below Also this is a script if you designed your player facing right if (movementX > 0) { anim.SetBool(WALK_ANIMATION, true); anim.SetBool(JUMP_ANIMATION, false); if (isFacingRight == true) { transform.Rotate(0f, 0f, 0f); isFacingRight = true; isFacingLeft = false; } else { transform.Rotate(0f, 180f, 0f); isFacingRight = true; isFacingLeft = false; } } else if (movementX < 0)//we are going to the left { anim.SetBool(WALK_ANIMATION, true); anim.SetBool(JUMP_ANIMATION, false); if (isFacingLeft == true) { transform.Rotate(0f, 0f, 0f); isFacingLeft = true; isFacingRight = false; } else { transform.Rotate(0f, 180f, 0f); isFacingLeft = true; isFacingRight = false; } } Note: The anim.SetBool stuff are my animation code you can ignore that but the logic should work Hope it helps anyone :D
TIP:- 1. what if i'm shooting hundreds of bullet? -Object pooling is best technique while handling numerous bullets 2. Is Rigid Body really necessary? -Rigid body on each bullet should be avoided 3. Should i really need to rotate Shooting point ? -For shooting point simply use local direction instead of vector3.right use transform.right, no need to rotate it by 0-180 deg
Hi, If someone could help me, I am doing the prefab method but whenever I shoot the bullet just stops in front of the enemy and doesn't destroy or print Enemy(or "Frog" in my case) in the console.
In your animations, attach a collider trigger and animate it to follow the weapon, then apply damage with that collider similar to how the bullet detects impacting an enemy
that's a good start but how should i go about balancing the weight of my enemies and forces of each attack to allow for things like juggle combos, launchers, wall bounce, these kinds of things?
@@guigondi7671 well you could make it that when you perform a launching attack it moves the enemy up a certain distance, and that when you when you attack an enemy they enter a stagger animation that keeps them from attacking. Each hit could move the enemy up a certain distance to keep them in the air, or each hit could freeze them in place for a split second so you can continue your combo. Then make the last hit of your combo a finisher that launches the enemy far away so that you can't do zero to death combos. Understanding basic physics equations like the kinematic equations, and work will help you precisely control the physics of the combo system to make it feel the way you want.
Thanks bro. Just one request from me - you can leave it if you don't find it worth teaching. Can you make video on a game where we hit the api to send data to server and then again hit the get api to receive the data back from server... It could be a series of tutorials where first we login through social media and save our email and pswd to server and then save the details of user like coins,win%,powerups,loose% etc. What do you think ?
Hi! Can someone help me? I've been trying to add an animation when my character is shooting but I can't find a way to make it work... Either the character stays stuck at the end of the animation or the animation straight up doesn't play ;^; I've tried animation events and pretty much everything else...
for the "the character stays stuck at the end of the animation " problem, destroy the character animation when it's done and instantiate the origional object
I have a really big problem! After I create OnTriggerEnter2D, when I play the game my bullet just shows up in front of me for a split second then disappears. I would imagine this happens because the bullet doesn't know what is an enemy or not. Can someone please tell me how I can fix this problem?
3 ways to do it... Using ray-cast but spawning a prefab to follow from birth to end of ray cast! Making it more realistic and good! And you can easily adjust speed of following or reduce or what ever lol! Its very effective, stable and great way to make a battlefield 4 like shooter! (Realistic) the key between the two lol
Danian D. No problemo! But i havent tested it yet, i see no reason this wiuldnt work, infact the first point he said which was the one i used in my 2d game and believe me... that was messy lol...specially with my inability to understand a good approach to coding! But his method i believe is closer to the perfection that is real life physics!
Lol, that’s just the same as using a prefab. The only difference is the mode of travel for the prefab. Real life physics also have bullet drop, so that method alone wouldn’t make anything more realistic.
I think he meant more stable because the hit calculation doesn't rely on an actual prefab flying towards the target. Knowing some of the weird glitches with physics in game engines, raycast seems like the safer alternative. Also let's you do whatever you want with the now-only visual bullet prefab.
thank GOD u corrected that character controller part, i used that 2d movement script and couldnt for the life of me figure out why my player was acting drunk af
for the player sprite turning left or right and you want the GameObject FirePoint to move left or right depending on where the player is facing, instead of doing: //spriteRenderer.flipX = false;
//spriteRenderer.flipX = true; you could do: transform.rotation = Quaternion.Euler(transform.rotation.x, 0, transform.rotation.z); transform.rotation = Quaternion.Euler(transform.rotation.x, 180, transform.rotation.z);
Hello Guys if u have the same struggle like that the animation dont want to dissapear create the effects new and add a script in that script u will put in using System.Collections; using System.Collections.Generic; using UnityEngine; public class Destroy : MonoBehaviour { void Update() { Destroy(gameObject,0.5f); } } and then i will dissapear quickly :) hope i had can help anyone :)
Great tutorial, but one personal problem I'm having is that my bullets like to be invisible. Now I understand their new to the world, but I kind of don't like it when their invisible...
Well... I suppose you know that this channel is a damn work of art. I have a particular doubt. My character is pixelated, and I've put a material type "Sprite> Difuse" so that it can receive light. Before watching the video I turned my character from the scale, and there was no problem. But turning it 180º for some reason looks dark. Ideas?
How do you clean up those lingering "Impact Effect" game objects? You can see them build up at: th-cam.com/video/wkKsl1Mfp5M/w-d-xo.html The way I handled this: 1) Added a new script to the "ImpactEffect" game object called "AnimationComplete" 2) Created that script with these contents: public class AnimationComplete : MonoBehaviour { public void OnAnimationComplete() { Destroy(this.gameObject); } } 3) Added an event to the end of the ImpactEffect animation whicah calls the "OnAnimationComplete()" event.
I think it's a good idea to always destroy the instantiated object after a certain amount of time. If you don't trigger any collision you will eventually have many objects created but never deleted, right?
Try using this public class Gun : MonoBehaviour { public Transform firePoint; public GameObject bulletPrefab; public float Cooldown1 = 0f; // Update is called once per frame void Update() { Cooldown1 -= Time.deltaTime; if (Input.GetButtonDown("Fire1")) { if (Cooldown1
Found a better solution for what Brackeys talks about at 3:00 private void Flip() { // Switch the way the player is labelled as facing. m_FacingRight = !m_FacingRight; if (m_FacingRight) { transform.localRotation = Quaternion.Euler(0, 0, 0); } else { transform.localRotation = Quaternion.Euler(0, 180, 0); } } Quaternion.Euler rotations are better for when you want to control the aim with your mouse, his way works fine for what he's doing but I think this is better for other projects.
I have run into a problem, for both the enemy and the projectile the last frame of the deathEffect/impactEffect lingers on screen permanently. Can some one help please?
It might be a little late to mention, but if your effect can't dissapear after it finished playing, try these steps:
1. Go to the animation tab of your effect and add an event on frame n+1(3rd block on the right of 'Samples')
2. Create a destroy script and add it under your effect prefab
3. Go to the inspector of the animation event you just added, type 'Destroy' into the function column, no brackets
And that shall do the work. My script looks like below:
public class DestroyGameObject : MonoBehaviour
{
public void Destroy()
{
Destroy(gameObject);
}
}
I got this solution from chat-GPT and it worked like magic. Hope it helps :)
Got it working thanks!
never too late! thankuuu
Not gonna lie but he is better at speaking then my teachers, he inspires people to do stuff, he makes people positive by his smile dude, i just love watching him
Thanks man, really appreciate the kind words! :D
No man, thank you! Thank you for connecting with your viewers even tough you have 570,000 subscribers. It really shows that you're one of those rare youtubers who actually interact with their viewers which makes me feel happy and exited every time I watch your videos!
Yeah, exactly! I became a game developer because of him! Thank you for everything!
To be honest, he's definitely the person I'm gonna go to whenever I get started with unity. The videos seem so helpful
A different kind of helpful, like I'd actually learn from them
Gay
If it seems like even after you edit the CharacterController2D script your FirePoint doesn't flip on the y-axis, click on your Local/Global button at the top of the editor. The FirePoint is flipping, but if you have one of those on and not the other, it will appear as if it's not. Regardless, as long as you've inserted the code as instructed, the bullet will come out of the FirePoint in the correct direction no matter if you have Local or Global selected.
Thx man, it was driving me crazy xD
Made my day. This comment should be pinned up.
Сябос из Украины, чел)))
Thank you so much
Saved me and my project. Thank you man!
For those who cant get the Firing Point to flip with the sprite, copy lines 114-124 which can be seen seen at 2:47, this ties in with the lines at the bottom.
OMG thanks dude. I’ve been trying to fix it in my game but this totally helps. 👍
Interesting, I could not figure this out and somehow managed to get the bullets to switch direction when the player turns but the firepoint is still fixed. So basically it's still broken, I will look into your suggestion. Thank you!!
Thank you very much bro
10:54
"Then we want to die"
- Brackeys 2018
"well then we want to..., Die"
ftfy
Story of my life
And then:
"I live... again!"
@@igorthelight Then off in the distance:
"CRUDUX CRUO!"
@@johndobersworth4224 Right :-)
after 20 + years of playing video games I finally understand how they are made :)
:D
:]
Glad to see both of the methods covered! :D I'm personally a prefab-guy, because screw performance lol
Object Pooling my dude.
really?? performance is my top priority than anything else, like MY GAWD!!
yea, its the real sykoo, so what??
no! friend
Screw performance?
Well not like you are making anything performance intensive like triple a titles.
Dude, I teach an intro to game design class and these 2D videos are the perfect start to the school year. Keep it going!
Your tutorials are so easy to follow, and really fun. They are really positive, and user friendly too. You have helped me so much, as a beginner game dev. Thanks Asbjorn! :)
If u want that the bullet disappears after leaving the camera screen use:
public class Bullet : MonoBehaviour
{
public float speed = 20f;
public int damage = 20;
public Rigidbody2D rb;
public GameObject impactEffect;
// Start is called before the first frame update
void Start()
{
rb.velocity = transform.right * speed;
}
private void OnTriggerEnter2D(Collider2D hitInfo)
{
Enemy enemy = hitInfo.GetComponent();
if (enemy != null)
{
enemy.TakeDamage(damage);
}
Destroy(gameObject);
}
void OnBecameInvisible()
{
enabled = false;
Destroy(gameObject);
}
}
It's important for the level design i think.
Thank you
Very helpful tip man! Works perfectly!!!
Thank you!
Thankzzz Man
thanks g
If anyone had an issue with the animation not disappearing after it's end, the solution is to add a script to the gameobject that is animated by it (in that case, impactEffect and destroyEffect) that has a function that destroys the gameobject. Than all you've gotta do is to add an extra frame to the animation and place an animation event that will trigger the destroy function
i have exactly that problem but i cant even solve it with your description :(
@@mrmiyagi5398 yeah I added an event and still cannot add a function to it.. it just doesn't come up in the options under functions.
@@shwk77 Hey, don't know if you were able to fix it or not, but here is what I did. Since we are instantiating a impact/hit effect prefab rather than changing the animation state, you need to attach a script to the hit/impact effect prefab and create a public function which the destroys the gameObject, this function would be called after the final frame of impact effects using the animation event.
Can u create the script and paste it as a comment it would really help
@@SDSFDSF631 What I did (a pretty dumb way) is created a script in the destroyEffect prefab in the Start frame like "Destroy(GameObject, 0.5f)" which makes it looks like that destroyEffect dissapeared right after it finished animation, but you can change the time to whatever you feel is right.
I'm seven minutes in and you're already providing a lot of clarity to my shooting script. Other tutorials works but their rather overly complicated and don't explain much- you fix both issues. Very good job :D
For people using the Prefab approach, please do remember to utilize object pooling in order to maximize performance. I believe Brackeys has a video set up for this.
You SAVED me life. I've been trying for 2 hours to figure how to get the bullet to shoot across. (Using other tutorials)
This one nailed it step by step. Thanks!!!!
I bought the masterclass; so far I´m loving it!
Idk if you still use this account but did it work? Also is it still up even?
For anyone trying to get their bullet to shoot forward instead of right, use forward in place of right, or if that doesnt work, use up. You 2D game might be oriented so that forward to your camera view is actually the green axis, or up.
Can you make a tutorial about melee weapons
BTW
love you videos
he has one
LouisLemur he might have one now as this comment was made a year ago
Alright if anyone is wondering how they can get their character to shoot while crouching here's how:
1. Make another firepoint for the crouching position
2. go into the weapon script and change it to this:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Weapon : MonoBehaviour
{
public Transform firePoint;
public GameObject bulletPrefab;
public Transform firePointcrouch;
// Update is called once per frame
private void Update()
{
if ((Input.GetButton("Crouch") == true && Input.GetButtonDown("Fire1")))
{
CrouchShot();
}
else if (Input.GetButtonDown("Fire1"))
{
Shoot();
}
void CrouchShot()
{
Instantiate(bulletPrefab, firePointcrouch.position, firePointcrouch.rotation);
}
void Shoot()
{
Instantiate(bulletPrefab, firePoint.position, firePoint.rotation);
}
}
}
3. back into unity, place the crouching firepoint into the new firepoint slot on the weapon component
That should make it so you can crouch and shoot.
Ty bro
actual legend
this is actually genius
or just move the firepoint with the animation of crouching
Hey Asbjorn, I am really happy that you returned to the coding part as u were just showcasing stuff earlier. WooHoo!!!
@CHUA RUI FENG Moe me too, because he's a legend
I know this is an old video so I don't know if you'll see this but this helped me so much. I was at a dead end with my game and it was really disheartening. I felt like I couldn't progress if I hadn't got this part sorted and even though it's not exactly the type of shooting I wanted, I was lucky to find this and I'm glad I switched it out to shooting just along the X axis. Thank you!!
I legit cracked up when the cameraman shot Brackeys. Great video as always, man, thank you! How about a stealth themed video?
OH NO... The udemy ads are spreading from before the videos to INSIDE the videos.
ABORT MISSION
my sentiment exactly... (((
Lol
Coding your own games is easier than you think...you know..you should take this online unity course on Udemy.
I'm already paying for a freaking game dev college I DONT WANT UDEMY STAAAHP
loooooooooool )) and while you're at it, check out that shader development course, too ))
hey Brackeys can you do a 2D tutorial on ledge grabbing and wall jumping?
While you wait, there are some cool tutorials about this subject already! :) Here's one: th-cam.com/video/EOSjfRuh7x4/w-d-xo.html. This stuff also really helped me a lot: juhakeranen.com/dev-mistakes-pdf/
I want AR tutorial..
that would be pretty cool.
th-cam.com/video/_UBpkdKlJzE/w-d-xo.html
Hes gone now sadly...
really loving these unity tutorials! it's always nice to see how to make a game from the perspective of an experienced game dev
If you have a problem with the animation not disappearing after it's over, the solution is to add a script to the Object "DeathEffect" that has a function that destroys the gameobject after a bit of time (the time the animation takes).
This Code worked for me :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DeathEffect : MonoBehaviour
{
void Start()
{
Invoke("EndEffect", 0.5f);
}
void EndEffect()
{
Destroy(gameObject);
}
}
I love you so much : ) thank you
@@RhinoCringe Anytime 😊
It works!
It worked like a charm, thank you so much! :D
Dude the way you approach your videos is so positive. You emit good vibes
13:17 for the raycast based shooting.
Tip to prevent lag (if you have large open areas or if it some how gets through a barrier)
You can make a script that delays the bullet after a while such as
Void start ()
{
Invoke(“despawn”, 20);
}
Public void despawn ()
{
Destroy(Gameobject);
}
I just love your tutorials. Even If I don't really need that at this moment it's so useful and helpful for further struggles. Always find what I was looking for and even more. And you do always smile and make it all interesting. Just great job, thank you :D.
Brackeys is back at it again with the amazing 2d tutorials
I just made a AR app in unity, I feel so accomplished in life!
Cool!!!!
Name of the app so we can spam 5 stars? :D
@@MaThMaTa1000 hey thanks man, but it's just a fun little project I made, it isnt on the app store.
Dj Khaled (andrew) suffering from success
This is the happiest man on youtube (Machalla)
If anyone has a problem when shoot to right or left and bullet doesn't appear try to modify the position Z = 0 on the FirePoint, it's because bullet spawns out of the camera.
PD: Hope this solve your problem :)
Dude I love you
MAN I FUCKING LOVE YOUUUU
Yooooo finally, you some hella legend😭😭😭
Amazing, all your tutorials are dope, easy to understand and simply the best unity tutorials. Please provide us with more awesome tutorials like these. Looking forward. Much love😊
Who else is just trying to be like Dani
Same...
But kinda THICK
X Gamer X Really THICCCCC
Me
But is it just me or is the gun locking kinda THICK
Is it me or is this comment lookin kinda THICK?
Glad to see both of the methods covered! :D I'm personally a RayCast-guy, because Vector performance lol
but I use ;
Ray ray = new Ray(transform.position , transform.left);
RaycastHit Block ;
if(Physics.Raycast(ray , out Block , 6f))
{
Enemy enemy= Block.transform.GetComponent();
if(enemy != null)
{
enemy.TakeDamage(10);
}
}
Man, I can’t sleep without hearing your voice lol, so soothing and professional
Thank you so much, I just started with Unity and wasn't sure how to create objects that kept the same components. Because of this video I learnt what a Prefab was, which solved my issue.
Using colliders on the bulletsbis quite inefficient. It is much better to do a linecast from the bullet's last position to it's current one. This also means you can make bullets that can go through walls and find the out point.
This method also solves the problem of collision detection not resolving a hit when the bullet is moving too fast.
Could you elaborate please?
On your bullet script, you have a variable that keeps track of the last position it was in. Every frame you do a linecast from the last position, to the current position. If the bullet collided with something during that last frame of movement, the linecast will pass through what the bullet hit. This solves the collision system not resolving a hit, because no matter how far the bullet travels in that one frame, the linecast will still pass through whatever the bullet hit.
Regarding the wall part, if you want penetration, when you do the linecast, you can check if the linecast passed through a wall. If it did, you can use vector math to figure out where the bullet came out of the wall and at what angle.
@@Swirlstudios thanks dude! Any idea whether we can do this on gamemaker?
@cooldude 4172 I don't have any experience with that engine, but a quick google search brought up the collision_line method which may help you docs.yoyogames.com/source/dadiospice/002_reference/movement%20and%20collisions/collisions/collision_line.html
19:50 if you want to wait for exactly 1 frame, then imo it's more accurate to use
yield return Time.deltaTime
because that's the length of the last frame. of course it's not 100% accurate because of varying frame lengths but it should be closer than 0.02 seconds
If ur enemy doesn't disappear if it's health goes under 0 health just delete the line "Instantiate(deathEffect, transform.position, Quaternion.identity);" in the enemy script.
Thank you man, saved my day!
huge thanks dude, my shooting just skyrocketed thanks to you
Thank you so much, this helped me more than anything ive seen yet (not saying much since this is the second video ive watched but still Its good)
For a beginner like me the salto jump at 2:08 was just a huge flex
Could you go over the controller script in an upcoming video? It would be really helpful to understand what's happening in it step-by-step so when we start our own projects we don't have to rely on other people's scripts
Quick tip:
Add a float: impactEffectTime
This is the time the impact effect animation plays, roughly. The effect should end on an invisible frame, so it doesn't show, but if you look at the inspector, the prefab is still there. After a few thousand shots, this could slow down your game. With a timer of, say, half to one second, you could destroy the effect prefab as well. By having this as a variable, you can use much longer effects, in case you have special weapons with much longer effects in the future. Like a rocket with secondary explosions.
This will then clean up the effect prefabs for you and you shouldn't have more than maybe 10 effect prefabs at any given time, and no significant impact on performance.
To implement, just copy the Destroy command from the bullet itself, place right before the bullet, change the variable name from the bullet game object to the effect game object and add the timer as a second parameter. It looks like it would destroy the effect prefab first, but the second parameter is actually a timer, so the bullet would be destroyed instantly, and the effect would be destroyed impactEffectTime seconds later.
"Let's not jump the gun on this one" - Dad Joke level 100
You are a very good teacher. You know how to explain a complicated things in a simple way. I like this tutorial 😊. Keep making such tutorials.
Brackeys. I know this request might be pointless, but could you please, I beg you, make tutorial with shader graph related to rain ripples and rainy window drops and if you find time, character that looks like a ghost, but shaped like character :)
You could make a ghost by making a character transparent, ramping up its emission + using an bloom aftereffect to blur the edges
I want the ghost that looks like in call of duty black ops 4
th-cam.com/video/h_fKrz85o8I/w-d-xo.html
10:46 skip
your english is so clear and understandable
Can you do a tutorial on making particle clouds pls. I need help for making one in my game. I don’t want to use a skybox by the way.
BEST shooting tutorial for 2D out there, thank you!
I got a question tho and I really hope you'll answer, how did you turn the impact animation into a useable prefab? I'm banging my head over this and it should'nt be so hard haha
7:19 just my bookmark
For people who want the shots to not affect the player, here is a fix:
in the bullet rigidbody, press layer overrides, then add a new layer called player to the excludes. add the player to this layer, and the bullet will ignore it.
I know this is late but does this work with raycast shooting as well??
@@curlyfries1013 I dont even remember making this comment, and have not used unity in months
Has anyone else had an issue where your impactEffect prefab plays through it's animation and then doesn't go away?
make sure the animation isn't looping
I have the same problem. The animation will play and then stop, but the impact is sticking to the wall. The animation loop is off.
I had the same problem, i downloaded an empty png then add it to end of the impact animation and enemy death animation it fixed mine but im sure there is much better solution
Mee too. Has anyone solved it?
You need to put an empty frame at the end of the animation. I also had to create a destroy object script for it to delete it from the hierarchy.
Miss good old days when you used to create Intermediate to advanced series of videos. Now you have gone back to lesson 1
I really hope to see "shooting as particle system" guide in some future, cause alot of prefabs hit ur frame rate pretty hard
To people who have trouble with gunpoint flipping issue(Gun point changing direction) you can use this
Have 2 Variables
private bool isFacingRight = true;
private bool isFacingLeft = false;
Then the rest of the logic is below
Also this is a script if you designed your player facing right
if (movementX > 0)
{
anim.SetBool(WALK_ANIMATION, true);
anim.SetBool(JUMP_ANIMATION, false);
if (isFacingRight == true)
{
transform.Rotate(0f, 0f, 0f);
isFacingRight = true;
isFacingLeft = false;
}
else
{
transform.Rotate(0f, 180f, 0f);
isFacingRight = true;
isFacingLeft = false;
}
}
else if (movementX < 0)//we are going to the left
{
anim.SetBool(WALK_ANIMATION, true);
anim.SetBool(JUMP_ANIMATION, false);
if (isFacingLeft == true)
{
transform.Rotate(0f, 0f, 0f);
isFacingLeft = true;
isFacingRight = false;
}
else
{
transform.Rotate(0f, 180f, 0f);
isFacingLeft = true;
isFacingRight = false;
}
}
Note: The anim.SetBool stuff are my animation code you can ignore that but the logic should work
Hope it helps anyone :D
Don't forget to destroy the impacts effects after a few seconds because of performance issues
How do you do that?
@@thewiitard5515 Destroy (gameObject, lifetime);
@@DayMoniakkEdits It says that lifetime is an error
The Wiitard lol don't write "lifetime", put the amount of time in seconds, for example "3f" to destroy the bullet after 3 secs :)
@@DayMoniakkEdits my problem is that the animation doesn't delete when its done it just stays at the last frame of animation
This video has so much value, keep up the good content!!
0:49 the second guy has aimbot !
lmao
maybe brackeys is into hacking :O
TIP:-
1. what if i'm shooting hundreds of bullet?
-Object pooling is best technique while handling numerous bullets
2. Is Rigid Body really necessary?
-Rigid body on each bullet should be avoided
3. Should i really need to rotate Shooting point ?
-For shooting point simply use local direction instead of vector3.right use transform.right, no need to rotate it by 0-180 deg
Really an amazing tutorial! Love from Pakistan
Haha the look on your face when the handgun showed up. Amazing. 😂
Haha
Brackeys, your video is make me to learn about Unity. Please make 2D Melee Attack in Unity. Thank you.
Very highly polished tutorial!
Hi, If someone could help me, I am doing the prefab method but whenever I shoot the bullet just stops in front of the enemy and doesn't destroy or print Enemy(or "Frog" in my case) in the console.
I DON'T HAVE A SOLUTION BUT IM BOOSTING THE COMMENT SO MORE PEOPLE CAN SEE IT AND MAYBE ONE OF THEM CAN HELP YOU
do you have isTrigger enabled under your bullet's box collider ?
Same and if I turn on isTrigger it just phases through
Nevermind: Solution: I wrote OntriggerEnter2D instead of OnTriggerEnter2D
Im so glad I found this video :D super easy to understand, and exactly what I was looking for. Thank you!
@Brackeys
Please, do a 2D tutorial on how to make melee atacks and combos.
I'd really like to try to make a 2D Devil May Cry
Gui G Dias yeah thats a good idea
In your animations, attach a collider trigger and animate it to follow the weapon, then apply damage with that collider similar to how the bullet detects impacting an enemy
that's a good start but how should i go about balancing the weight of my enemies and forces of each attack to allow for things like juggle combos, launchers, wall bounce, these kinds of things?
Hey I saw your comment on making a 2d devil may cry i'm interested in helping if you want some help?
@@guigondi7671 well you could make it that when you perform a launching attack it moves the enemy up a certain distance, and that when you when you attack an enemy they enter a stagger animation that keeps them from attacking. Each hit could move the enemy up a certain distance to keep them in the air, or each hit could freeze them in place for a split second so you can continue your combo. Then make the last hit of your combo a finisher that launches the enemy far away so that you can't do zero to death combos. Understanding basic physics equations like the kinematic equations, and work will help you precisely control the physics of the combo system to make it feel the way you want.
Wow I am actually currently following a course by Panjuta so I was really surprised to see him as a sponsor here.
Why is TH-cam showing me this exactly after he left ?
Thank you you are my favourite youtuber i watch you every day
Thanks bro. Just one request from me - you can leave it if you don't find it worth teaching.
Can you make video on a game where we hit the api to send data to server and then again hit the get api to receive the data back from server... It could be a series of tutorials where first we login through social media and save our email and pswd to server and then save the details of user like coins,win%,powerups,loose% etc.
What do you think ?
Thumbs Up.
FINALLY! I have been looking for AGES!
Hi! Can someone help me? I've been trying to add an animation when my character is shooting but I can't find a way to make it work... Either the character stays stuck at the end of the animation or the animation straight up doesn't play ;^; I've tried animation events and pretty much everything else...
for the "the character stays stuck at the end of the animation " problem, destroy the character animation when it's done and instantiate the origional object
this video came out just when i needed it, thanks
I have a really big problem! After I create OnTriggerEnter2D, when I play the game my bullet just shows up in front of me for a split second then disappears. I would imagine this happens because the bullet doesn't know what is an enemy or not. Can someone please tell me how I can fix this problem?
Same problem here! Someone help usssss
Omg I'm having this exact issue and it's making me crazy. I can get it to injure the enemy but that's it.
disable gravity of the bullet from rigidbody and mark body type as kinematic
Same problem
same
Awesome video's! Newbie to Unity really appreciate your thorough explanations.
3 ways to do it...
Using ray-cast but spawning a prefab to follow from birth to end of ray cast!
Making it more realistic and good!
And you can easily adjust speed of following or reduce or what ever lol!
Its very effective, stable and great way to make a battlefield 4 like shooter! (Realistic) the key between the two lol
I was really hoping he would show this method, thank you for confirming it's existence!
Danian D. No problemo!
But i havent tested it yet, i see no reason this wiuldnt work, infact the first point he said which was the one i used in my 2d game and believe me... that was messy lol...specially with my inability to understand a good approach to coding!
But his method i believe is closer to the perfection that is real life physics!
Lol, that’s just the same as using a prefab.
The only difference is the mode of travel for the prefab.
Real life physics also have bullet drop, so that method alone wouldn’t make anything more realistic.
I think he meant more stable because the hit calculation doesn't rely on an actual prefab flying towards the target. Knowing some of the weird glitches with physics in game engines, raycast seems like the safer alternative. Also let's you do whatever you want with the now-only visual bullet prefab.
Danian D. Yes, also you can tell your ray-cast to fall towards gravity over distance with some coding ways...
Making it stable AND realistic.
Man love your tutorials ever since I'm learning from ya I want to add a Easter egg of you in one of my games because you deserve one!!
"Well then we want to DIE"
thank GOD u corrected that character controller part, i used that 2d movement script and couldnt for the life of me figure out why my player was acting drunk af
i ran into an issue where my bullet wasnt moving at all, i had to re-assign the rigidbody in the inspector, in case this helps anyone
I ran into the same bug, but it didn't work. What do you mean by re-assign
Zachary Lamar so if you click on it in the inspector, then drag it into the slot where it is on the script
for the player sprite turning left or right and you want the GameObject FirePoint to move left or right depending on where the player is facing, instead of doing:
//spriteRenderer.flipX = false;
//spriteRenderer.flipX = true;
you could do:
transform.rotation = Quaternion.Euler(transform.rotation.x, 0, transform.rotation.z);
transform.rotation = Quaternion.Euler(transform.rotation.x, 180, transform.rotation.z);
Hello Guys if u have the same struggle like that the animation dont want to dissapear create the effects new and add a script in that script u will put in
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Destroy : MonoBehaviour
{
void Update()
{
Destroy(gameObject,0.5f);
}
}
and then i will dissapear quickly :) hope i had can help anyone :)
Thank you very much!! You helped me a lot!
For those who doesn’t know, shooting a bullet that hits something instantly without travel time is called “hitscan”.
" And I will see you in the next video! "
Okay let's just scroll down and see the next on-
" *SCREAMS INTO MIC* : *AHGHGHGAHFHAGHGAHGA* "
thanks, I have been struggling to make my player fire but this tutorial helped me a lot
10:54 “Well then we want to die”
Excuse me?
This was really helpful
wish i was here 3 years ago before i started become a salaryman.
Thank you for this. You have been a great help for all of my projects.
Great tutorial, but one personal problem I'm having is that my bullets like to be invisible. Now I understand their new to the world, but I kind of don't like it when their invisible...
Check the bullet prefabs Sorting Layer / Order in layer, it's probably layered behind stuff.
It's either too low on the sorting layers or your FirePoint is too close to your Player
Well... I suppose you know that this channel is a damn work of art. I have a particular doubt. My character is pixelated, and I've put a material type "Sprite> Difuse" so that it can receive light. Before watching the video I turned my character from the scale, and there was no problem. But turning it 180º for some reason looks dark. Ideas?
How do you clean up those lingering "Impact Effect" game objects? You can see them build up at: th-cam.com/video/wkKsl1Mfp5M/w-d-xo.html
The way I handled this:
1) Added a new script to the "ImpactEffect" game object called "AnimationComplete"
2) Created that script with these contents:
public class AnimationComplete : MonoBehaviour {
public void OnAnimationComplete() {
Destroy(this.gameObject);
}
}
3) Added an event to the end of the ImpactEffect animation whicah calls the "OnAnimationComplete()" event.
All you have to do is to do Destroy(this.gameObject, 2f) the 2, or any var acts like a delay for destroying
Thanks
I think it's a good idea to always destroy the instantiated object after a certain amount of time. If you don't trigger any collision you will eventually have many objects created but never deleted, right?
yes just need to add deathzone in object script
How do you make it wait time before next fire???(very important)
Try using this
public class Gun : MonoBehaviour
{
public Transform firePoint;
public GameObject bulletPrefab;
public float Cooldown1 = 0f;
// Update is called once per frame
void Update()
{
Cooldown1 -= Time.deltaTime;
if (Input.GetButtonDown("Fire1"))
{
if (Cooldown1
Found a better solution for what Brackeys talks about at 3:00
private void Flip()
{
// Switch the way the player is labelled as facing.
m_FacingRight = !m_FacingRight;
if (m_FacingRight)
{
transform.localRotation = Quaternion.Euler(0, 0, 0);
}
else
{
transform.localRotation = Quaternion.Euler(0, 180, 0);
}
}
Quaternion.Euler rotations are better for when you want to control the aim with your mouse, his way works fine for what he's doing but I think this is better for other projects.
I have run into a problem, for both the enemy and the projectile the last frame of the deathEffect/impactEffect lingers on screen permanently. Can some one help please?
same here!, did you find a solution?
@@bomber_g in the video the effect never "dies" he just added an extra animation frame where it goes invisible, but they are still there.
@ozmega do you know how to add empty keyframes? I can't seem to make it happen
Too bad I just found out about this pretty epic channel now. But I'm very glad that he made it, thanks for the epic tutorials