TIPS: 1. Hold control while you click and drag a node from the scene hierarchy to the script to create a full @onready var 2.There is a Translate() function that changes the nodes position. Could simplify the bullet movement slightly.
@@legiongames2400are you sure you didn’t leave any major details out when spawning bullets? I’ve looked at this video countless and still can’t get them to show up even when I used nodes and code. Don’t dodge the comment.
I tried this an the is_playing function returned null, crashing the game. I had to manually type $ name of 3d node attached to player / camera of player /... and then the animation player node and its animation appeared.
I had a problem where my bullet had multiple problems, so here is my solution for future generations. The problems; my bullet spawned way over my head and fired in a direction that wasn't quite where I was looking but picked a direction relative to how rotated my camera was. the bullet also curved as I turned my camera mid-flight. the solution; I replaced "get_parent().add_child(instance)" with "get_tree().root.add_child(instance)". this gets the root node of your level and makes the new bullet a child of that.
that seems like a much more proper way to do it in general, i thought it was kinda jank that he assumed the player would be a direct child of the world
You have a fantastic foundation to create a simple COD zombies game, maybe. i have near zero experience in game dev so i truly wouldnt know regardless, these tutorials are awesome
I think the collision boxes now work with the animationtree without having to redo them. They reworked AnimationPlayer and AnimationTree between 4.1 and 4.2 so it could be related to that.
When I press the fire button, the bullets aren't where the ray cast is. They also change position (On the Y axis) depending on where I am in the play space Bullet: extends Node3D const SPEED = 40.0 @onready var mesh = $MeshInstance3D @onready var ray = $RayCast3D # Called when the node enters the scene tree for the first time. func _ready(): pass # Replace with function body. # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): position += transform.basis * Vector3(0,0,-SPEED) *delta Gun: @onready var gun_animation = $Sketchfab_Scene/AnimationPlayer @onready var gun_barrel = $Sketchfab_Scene/RayCast3D var bullet = load("res://Scenes/bullet.tscn") var instance func _process(delta): if Input.is_action_pressed("Click"): if !gun_animation.is_playing(): gun_animation.play("shoot") instance = bullet.instantiate() instance.position = gun_barrel.global_position instance.transform.basis = gun_barrel.global_transform.basis get_parent().add_child(instance)
Another great tutorial with all the code working as it should. It is fast paced which allows you to put more ideas and solutions into the video without dragging on.
@@memze1148 Coding tutorials are like learning foreighn language but the teacher speaks only that languahe, without explaining things in english lol XDXD
Your tutorials are amazing. I'm upset with myself for the ways I did things. Being new to Godot I did not know about "clear inheritance" and had no idea how to get hitboxes to be children of the bones. So, I grabbed the skeleton object in GDScript, found positions of two bones I wanted the hitbox between, and applied linear interpolation between them to place the hitboxes where I wanted. It looks a lot easier being able to make the hitboxes child nodes of the bones. lol
really helpful series, it would be nice if the video about enemies with skeletons had a warning that the 'generate skeleton' thing is kinda broken, i had problems with it as well.
Not sure who needs to hear this but you need to make sure the RayCast3D on your bullet is set to Collide with Area3D objects (do this in the inspector tab), otherwise the bullets will sail straight through the enemy hurtbox and do no damage.
Hi, i have an issue, whenever i shoot my bullets, they should collide with collision shapes like static body and area 3d. But when they kinda collide with them they dont queue free, they continue flying. The script is 1 to 1 like yours. Any idea why i could have this issue? thnx
10:25 well this is awkward now... in your previous tutorial you were only talking about the three animations "standup", "run", "attack", not about the "die" animation. How can I now add a fourth animation to the already existing model? If I reimport from blender, all the previous work (position track in standup, hit-frame in attack, animation-renaming) will overriden right? Can I somehow retarget an existing animation onto a different model (import 2nd zombie model just with "die" animation and then retarget to existing zombie)?
Well I can tell you that the offical guide in the godot docs regarding animation retargeting... did not work for me ^^ Godot does not seem to find the right bones unfortunately... What do I do now?
I figured something out: If you wanna add a new animation to an already existing model, reopen the existing zombie.glb in Blender, then import the glb with the new animation (in this case "die") stash it into the NLA, and then when it its reimported in Godot you cann see the new animation there. Just for info: animation retargeting did NOT work for me, I had to do it this way...
Figured out how to copy the animation keyframes to a new animation. You have to click the "Edit" -> "Copy Tracks" to copy it (took me forever to find this)
Línea 39:Unexpected "if" in class body. Línea 40:Unexpected "Indent" in class body. Línea 41:Unexpected "Indent" in class body. Línea 43:Expected end of file.
@@Gerex_001 Have you fixed this? If you haven't, elect that whole section and press tab, it will indent the text so it will go from if Input.is_action_pressed("shoot"): if !gun_anim.is_playing(): gun_anim.play("shoot") to if Input.is_action_pressed("shoot"): if !gun_anim.is_playing(): gun_anim.play("shoot") Hope this helps :)
For some reason when I walk forward my bullets go in reverse here's my code: var input_dir = Input.get_vector("Left", "Right", "Up", "Down") var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() if direction: velocity.x = direction.x * SPEED velocity.z = direction.z * SPEED else: velocity.x = move_toward(velocity.x, 0, SPEED) velocity.z = move_toward(velocity.z, 0, SPEED) move_and_slide()
i had an issue where my bullet would spawn and immediately crash. i fixed it by replacing the movement in _process for the bullet with " translate(Vector3(0, 0, -SPEED) * delta) ". no idea why the other one wasn't working, but this does, and i think it's simpler anyway
For me sometimes the collision wont trigger, using simple boxes and spheres on a level. From specific angles and distances the bullet collides correctly and sometimes couple inches to the side the bullet goes right through. Not sure this is a limitation of the engine for fast moving objects or i got something wrong.
@@kaliss6110 Yeah i did some of these changes but it really seems like a limitation of the collision shapes at higher speeds, since even with the bullet at really slow speeds it did skip some collisions but more rarely, i tested in a clean project with nothing except the bullet instantiation and it persists, since i mostly like to mess around with 2D games i ended up not searching a lot more. The things i did: Slow bullet, longer raycast, swap raycast for a collision shape and use signals, faster bullet (because why not), and changing some physics options in the project settings. The only thing really worked was wit scan bullets using a raycast, those detect correctly, i just spawn a instance of the particle where my raycast collides when i click.
@@Mikael._ don't use the raycast, use the physics body. i'm using rigidbody because i want bullet drop so i can't tell you exactly what to do, but just detecting the collisions of that physics object worked for me, after i couldn't get the raycast to work reliably.
what to do if it reports an error that there is no function is_playing in the code: if Input.is_action_pressed("shoot"): if !gun_anim.is_playing(): gun_anim.play("Shoot") instance = bullet.instance() instance.position = gun_barrel.position instance.transform.basis = gun_barrel.globale_transform_basis get_parent().add_child(instance)
@@stefanbiedron4021 you need to ensure that "gun_anim" is a variable in your script. This variable would be the animation player, which when dragged in, is called "animation_player" and looks like this: @onready var animation_player: AnimationPlayer = $AnimationPlayer If you rename that variable to "gun_anim", it should work.
Awesome tutorial!! I'm just having trouble getting the bullets to start at the gun barrel. I've followed the tutorial closely but for some reason the bullets are not aligning with the gun barrel.
i make 3d fps game for mobile, but i will try to play in mobile , i will touch(swipe) mouse motion only, it will work properly, and i will touch (move) joystick only, then joystick work properly, but i will use both of them, first i will touch mouse motion and after touch joystick, both of them work properly but first i will touch joystick and after touch mouse motion , joystick will work but mouse motion not work, 😢😢how to solve please help
Question, i just finished the body part script, and it works with headshots which the original signal and stuff is attached to, but whenever i hit a non head body part, it crashes and says "Invalid call. Nonexistent function 'hit' in base 'Area3D' im confused and not sure what is wrong here, how did he set up the signal again? he did it so fast maybe i did something wrong
im a total goober and didnt realize this, he skipped over it, but you are supposed to attach the same script and signal to every body part, look at the before and after of him saying so @@themindlesstruffle
No plans atm. Not because I'm not interested in doing more, just not sure what people would want to see. What other FPS topics would you like me to cover?
@@legiongames2400 Here are some suggestions! Different weapons, wave based combat, upgrades and perks, different enemy types, nav mesh links, ammo count. Maybe you could take a look into one of those?
@@legiongames2400 Range-based enemies and more gunplay stuff would be interesting. (Shotguns melee etc) Perhaps aesthetic stuff like bullet impacts and footstep sound effects? I don’t mean to overwhelm, I hope these give you some ideas!
@@catjox_45 That's a lot of ideas, thank you. I think I will take a look at some of those like more weapons and ranged enemies. Ragdolls I really wanted to get done for this one but the physical skeleton breaking kind of threw a wrench in my plans so probably worth revisiting. Seriously, thank you haha
i mean, why not use the animation player to just queue_free the zombies? you can call methods from the tracks themselves, you just have to set the condition to play and save a few lines of code with no timers and anything
been trying to make a 3rd person shooter and its just not happening. not sure why, even with testing everything logically is there, but nothing works EDIT: after bouncing back and forth with a legend of a friend, i have concluded that you must not adjust the transform of your main root node. and also, printing positions of your instance and or players was a huge help in finding my issues example: print(position) print(instance.name) print(instance.position) print(instance.global_position)
@@legiongames2400 i believe its the weapon speed or the raycast 3D not working correctly as if i slow down my bullet speed it works more than if i increase it, any fixes?
Please help the following line from the bullet just does nothing at all, the bullet spawns but doesn't move, position += global_position * Vector3(0, 0, -SPEED) * delta I tried adding a print(position) below this to have it print it's position, more to see if it was even running the code in the script, but IDK if that is a valid way of doing it, but if it is it seems like once it's spawned the code on the script isn't running?
When the player is strafing, the rifle muzzle raycast is offset (to the left if strafing left, to the right if strafing right), before lerping back to its position (only after the pressed button for strafing is let go). Does anyone know how I could solve this issue?
Z is depth so doesn't it kind of track that it represents the objects distance from the screen instead of up and down like blender? In 2D Y is vertical and X is horizontal, converting to 3D is just adding the element of depth or Z. This is one of those things that should really be developed according to one standard just like introducing a system of measurement or adding right angles.
yeah, it was an awful decision from the godot devs. they defend it by saying there's no standard, but their examples are really cherry picked, almost everything uses z-up.
I can't change the materials on the models for some reason. When i try that it says that i cant change materials on imported models. Does anyone know how i can fix this? Because i've seen other people do it
dude, like seriously, the eight guns thing makes this look like a mech game. and honestly, you would probably have a minor successful game if you make an 8 guns game where you can shift out each gun depending on their energy usage, size, weight and recoil for instance. Making it such that players have to make decisions on which guns to bring and so fort and each gun should obviously have a specific use such that it actually matters. then you can add on top of that mech parts like legs, reactor, shield and so on such that you have to balance your mech to support the guns. and then of course add tons of zombie mech enemies players can demolish for fun.
@@BoiNatty I hate it everytime Godot gives me an error just because I'm using a slightly newer version, all this error happening because of version difference, If you don't want error, you have to use EXACT same version as the version that the tutorial is using, so basically you need 5 months old version of Godot if you don't want any error, typical Godot problem, Godot keep change everything each version I hate them
Loved this video for the tutorial but got stuffed over on the particle bit. I'm trying to change the direction in the process material at 5:42 but for me I don't have that as an option in the inspector. can someone please help, how do i change the direction
I can't put the bullet speed to high, more than 40 and the bullets are not colliding, it probably has to do with the raycast not detecting the collision thanks to the speed? I would like the bullets to travel faster, so it's less time to make it to the enemies. If someone know what it could be, I would appreciate the help.
hey, i was having this problem and i could fixed it adding this line of code before the if on the raycast.is_colliding(): it should look like this: raycast3D.force_raycast_update() if raycast3D.is_colliding():
@@legiongames2400 hey, i know this is kind of a long shot, but i'll take a shot in the dark as i'm having the same issue. the original error i got was "Invalid set index 'position' (on base: Callable) with value of type 'Vector3.'" So, realising that position returns a Vector2 value I replaced both position and global position with .global_transform.origin, and now get the error code "Invalid get index 'global_transform' (on base: Callable)." Is there any way you could help me?
@@blakerau6167 thank you!! i commented off the _process(delta) for the bullet script and it doesn't crash anymore, the bullets just sit there. issue isn't fixed but you narrowed it down a lot, i just need to find another way to move the bullet
Hi Which programing language use in this engine c plus or c sharp or both of them are use in this engine and if we know just one programing language is it benefit for use godot or not.
Controllers are a little trickier with partial inputs on the different axis for walking, so it might be easier to write the controller script first and then transform that to support the keyboard.
TIPS:
1. Hold control while you click and drag a node from the scene hierarchy to the script to create a full @onready var
2.There is a Translate() function that changes the nodes position. Could simplify the bullet movement slightly.
Oh my god thank you LOL that's gonna save me so much time :D :D
#1 for some reason doesnt work on mac :(
@@neptun3189 try command
@@legiongames2400are you sure you didn’t leave any major details out when spawning bullets? I’ve looked at this video countless and still can’t get them to show up even when I used nodes and code. Don’t dodge the comment.
I tried this an the is_playing function returned null, crashing the game. I had to manually type $ name of 3d node attached to player / camera of player /...
and then the animation player node and its animation appeared.
Just started on the 3D game development journey in Godot and the 3 tutorials are super helpful. Thanks!
Thank you! :)
Thanks for the tutorial! There is not many godot 4 tutorials so yours are a huge help to beginners
Thank you, I'm glad you're enjoying my videos!
@@legiongames2400 can you make a video showing how to make a player interact with rigidbody3ds and be able to pick it up and throw it?
3d btw
I had a problem where my bullet had multiple problems, so here is my solution for future generations.
The problems; my bullet spawned way over my head and fired in a direction that wasn't quite where I was looking but picked a direction relative to how rotated my camera was. the bullet also curved as I turned my camera mid-flight.
the solution; I replaced "get_parent().add_child(instance)" with "get_tree().root.add_child(instance)". this gets the root node of your level and makes the new bullet a child of that.
Thanks you!!! You fix My problem
Thanks man this fixed my issue
that seems like a much more proper way to do it in general, i thought it was kinda jank that he assumed the player would be a direct child of the world
You're a god damn hero!
This has been one of the most helpful tutorials I’ve found so far. Thank you!
Glad it was helpful!
These are incredible. I love how succinct they are. Keep this style up!
This is some of the best godot content I've come across so far
awesome workaround for the collision shapes of enemies. Thank you
You have a fantastic foundation to create a simple COD zombies game, maybe. i have near zero experience in game dev so i truly wouldnt know
regardless, these tutorials are awesome
yeah it was actually the inspiration for the series haha :D thank you!
I think the collision boxes now work with the animationtree without having to redo them. They reworked AnimationPlayer and AnimationTree between 4.1 and 4.2 so it could be related to that.
After working with nodes in Unreal for a long time is't such a joy to see the real code. Thank you.
Looking great, thank you. I’ve added sound and made it quite a bit darker. Very fun to shoot those undead.
Nice, the bullets prob look cool flying around in the dark haha
PERFECT : simple, fast and very well explain for newbies
This series is going really well!
Thank you! :) Any other FPS topics you would be interested in?
@@legiongames2400 close range Melee weapon would be a good idea I suppose :)
When I press the fire button, the bullets aren't where the ray cast is. They also change position (On the Y axis) depending on where I am in the play space
Bullet:
extends Node3D
const SPEED = 40.0
@onready var mesh = $MeshInstance3D
@onready var ray = $RayCast3D
# Called when the node enters the scene tree for the first time.
func _ready():
pass # Replace with function body.
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
position += transform.basis * Vector3(0,0,-SPEED) *delta
Gun:
@onready var gun_animation = $Sketchfab_Scene/AnimationPlayer
@onready var gun_barrel = $Sketchfab_Scene/RayCast3D
var bullet = load("res://Scenes/bullet.tscn")
var instance
func _process(delta):
if Input.is_action_pressed("Click"):
if !gun_animation.is_playing():
gun_animation.play("shoot")
instance = bullet.instantiate()
instance.position = gun_barrel.global_position
instance.transform.basis = gun_barrel.global_transform.basis
get_parent().add_child(instance)
Another great tutorial with all the code working as it should.
It is fast paced which allows you to put more ideas and solutions into the video without dragging on.
What a legend, fantastic video mate, keep them coming.
Thank you! :)
Nice tutorial. GJ on being crispy clear on ur words!
I i hate the way people always rush to do stuff without letting viewers see it
I know right, really annoying!
fr, which is why you shouldn't get dependent on tutorials
@@memze1148 exatly
@@memze1148 Coding tutorials are like learning foreighn language but the teacher speaks only that languahe, without explaining things in english lol XDXD
I liked this video months ago, but I keep coming back for top tips ♥
I recalled your video many times, so many good and essential stuff around it! Thanks for the knolage shortcut!!!
Thank you friend! :)
10/10 tutorials need more!
God Bless you bro, this tutorial is amazing!
Thank you! :)
Your tutorials are amazing. I'm upset with myself for the ways I did things. Being new to Godot I did not know about "clear inheritance" and had no idea how to get hitboxes to be children of the bones. So, I grabbed the skeleton object in GDScript, found positions of two bones I wanted the hitbox between, and applied linear interpolation between them to place the hitboxes where I wanted. It looks a lot easier being able to make the hitboxes child nodes of the bones. lol
really helpful series, it would be nice if the video about enemies with skeletons had a warning that the 'generate skeleton' thing is kinda broken, i had problems with it as well.
thank you man! you're a real life saver
Glad to help :)
Love the tutorials so far ❤
Yay! :)
Love your tutorials man. Keep them up =)
Thank you friend! :)
only thing missing is multible weapon types and ammo to pick up
What kind of weapons would you like to see?
@@legiongames2400 the usual or something "fun" to take out zombies, like a chainsaw, scythe or a ladle 🤣
melee, rockets and switching between them
@@tonnypedersen5915 I freaking love chainsaws
it looks great, thanks for sharing
Thank you friend! :)
Great tutorial, thanks
Thank you!
You are an Excellent Teacher !
Thank you friend! :)
@@legiongames2400 Excellent Keep up the Great work . Thank you for the video .
The 8 guns joke was...very satisfying.
Not sure who needs to hear this but you need to make sure the RayCast3D on your bullet is set to Collide with Area3D objects (do this in the inspector tab), otherwise the bullets will sail straight through the enemy hurtbox and do no damage.
I love you so much you don't understand
nice if you did a weapon pick up and drop system. And thanks for this tutorial
Thank you for watching! :) :)
Great Tutorial Keep Going 💪
Thank you 🙌
Your tutorials are the best😎
You have the best fps tutorials for godot thanks for sharing and contributing to the godot community
Thank you for watching them! :)
What's better than 8 guns....
Neo: "Guns, lots of guns."
Hi, i have an issue, whenever i shoot my bullets, they should collide with collision shapes like static body and area 3d. But when they kinda collide with them they dont queue free, they continue flying. The script is 1 to 1 like yours. Any idea why i could have this issue? thnx
ارجوك رد علي ما هو الكود المسؤل عن تغيير جهة الرصاصة حسب الكاميرا ؟
Your 8 guns joke convinced me to sub, like and keep the bell active haha 😂😂
Thank you friend! :)
10:25 well this is awkward now... in your previous tutorial you were only talking about the three animations "standup", "run", "attack", not about the "die" animation.
How can I now add a fourth animation to the already existing model? If I reimport from blender, all the previous work (position track in standup, hit-frame in attack, animation-renaming) will overriden right?
Can I somehow retarget an existing animation onto a different model (import 2nd zombie model just with "die" animation and then retarget to existing zombie)?
Well I can tell you that the offical guide in the godot docs regarding animation retargeting... did not work for me ^^
Godot does not seem to find the right bones unfortunately...
What do I do now?
I figured something out: If you wanna add a new animation to an already existing model, reopen the existing zombie.glb in Blender, then import the glb with the new animation (in this case "die") stash it into the NLA, and then when it its reimported in Godot you cann see the new animation there.
Just for info: animation retargeting did NOT work for me, I had to do it this way...
You can copy the animation keyframes into a new animation if you import another model with the extra animations.
Figured out how to copy the animation keyframes to a new animation. You have to click the "Edit" -> "Copy Tracks" to copy it (took me forever to find this)
@@asdfhjklacew How come the "Edit" button for this is greyed out for me? How do I enable it so I can copy the track?
thank u very much i learn a lot
very neat well done
Thank you :)
Thank you
if Input.is_action_pressed("shoot"):
if !gun_anim.is_playing():
gun_anim.play("shoot") bro this thing didn t work
Línea 39:Unexpected "if" in class body.
Línea 40:Unexpected "Indent" in class body.
Línea 41:Unexpected "Indent" in class body.
Línea 43:Expected end of file.
@@Gerex_001 Have you fixed this? If you haven't, elect that whole section and press tab, it will indent the text so it will go from
if Input.is_action_pressed("shoot"):
if !gun_anim.is_playing():
gun_anim.play("shoot")
to
if Input.is_action_pressed("shoot"):
if !gun_anim.is_playing():
gun_anim.play("shoot")
Hope this helps :)
HUGE thanks ♥♥♥♥♥♥♥♥♥♥♥
For some reason when I walk forward my bullets go in reverse here's my code: var input_dir = Input.get_vector("Left", "Right", "Up", "Down")
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
velocity.x = direction.x * SPEED
velocity.z = direction.z * SPEED
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
velocity.z = move_toward(velocity.z, 0, SPEED)
move_and_slide()
which video you make animation for "die" ? i miss it. :))
i had an issue where my bullet would spawn and immediately crash. i fixed it by replacing the movement in _process for the bullet with " translate(Vector3(0, 0, -SPEED) * delta) ". no idea why the other one wasn't working, but this does, and i think it's simpler anyway
The Best!
Hehe
For me sometimes the collision wont trigger, using simple boxes and spheres on a level.
From specific angles and distances the bullet collides correctly and sometimes couple inches to the side the bullet goes right through.
Not sure this is a limitation of the engine for fast moving objects or i got something wrong.
Hi, sorry if im a bit late, but for me making the raycast longer and lowering the bullet speed worked.
@@kaliss6110 Yeah i did some of these changes but it really seems like a limitation of the collision shapes at higher speeds, since even with the bullet at really slow speeds it did skip some collisions but more rarely, i tested in a clean project with nothing except the bullet instantiation and it persists, since i mostly like to mess around with 2D games i ended up not searching a lot more.
The things i did:
Slow bullet, longer raycast, swap raycast for a collision shape and use signals, faster bullet (because why not), and changing some physics options in the project settings.
The only thing really worked was wit scan bullets using a raycast, those detect correctly, i just spawn a instance of the particle where my raycast collides when i click.
@@Mikael._ don't use the raycast, use the physics body. i'm using rigidbody because i want bullet drop so i can't tell you exactly what to do, but just detecting the collisions of that physics object worked for me, after i couldn't get the raycast to work reliably.
Sometimes the bullets just hit the floor without showing the particles. Is there a reason for this?
can u make a Tutorial for a 3rd person shooter (Tps) ?
How would you handle bullet drop, with projectiles using just a 3d node?
what to do if it reports an error that there is no function is_playing in the code: if Input.is_action_pressed("shoot"):
if !gun_anim.is_playing():
gun_anim.play("Shoot")
instance = bullet.instance()
instance.position = gun_barrel.position
instance.transform.basis = gun_barrel.globale_transform_basis
get_parent().add_child(instance)
im getting the same error
me to
@@stefanbiedron4021 you need to ensure that "gun_anim" is a variable in your script. This variable would be the animation player, which when dragged in, is called "animation_player" and looks like this:
@onready var animation_player: AnimationPlayer = $AnimationPlayer
If you rename that variable to "gun_anim", it should work.
How do I make specific Huns do different damage
when i run the game the bullets only colide some times only i tried every thing but its not working????😥😥😥😥
I JUST NEED TO KNOW HOW TO MAKE THE BULLETS APEAR AND GO FOWARD
With every bullet the memory goes higher and higher....
did you queue_free()?
Awesome tutorial!! I'm just having trouble getting the bullets to start at the gun barrel. I've followed the tutorial closely but for some reason the bullets are not aligning with the gun barrel.
Use global_position instead position
i used marker instead of a raycast for gun's barrel.
Question can you import gun animations from blender?
I have a doubt. If the fps goes down, maybe the bullets pass through the enemy and other colliders?
Would you also be going over animations for the gun?
Working on gun switching right now
Help my bullet phases past objects then on the other side explodes into particles.
i make 3d fps game for mobile, but i will try to play in mobile ,
i will touch(swipe) mouse motion only, it will work properly, and i will touch (move) joystick only, then joystick work properly, but i will use both of them, first i will touch mouse motion and after touch joystick, both of them work properly but first i will touch joystick and after touch mouse motion , joystick will work but mouse motion not work, 😢😢how to solve please help
Question, i just finished the body part script, and it works with headshots which the original signal and stuff is attached to, but whenever i hit a non head body part, it crashes and says
"Invalid call. Nonexistent function 'hit' in base 'Area3D'
im confused and not sure what is wrong here, how did he set up the signal again? he did it so fast maybe i did something wrong
I got the same issue, if you figured it out let me know!
im a total goober and didnt realize this, he skipped over it, but you are supposed to attach the same script and signal to every body part, look at the before and after of him saying so @@themindlesstruffle
I had a script attached to every area 2D with a hit function that passes it on to the the parent enemy script. Thank you for watching!
Nice tutorial! Are we getting anymore content in this zombie-shooter series?
No plans atm. Not because I'm not interested in doing more, just not sure what people would want to see. What other FPS topics would you like me to cover?
@@legiongames2400 Here are some suggestions! Different weapons, wave based combat, upgrades and perks, different enemy types, nav mesh links, ammo count. Maybe you could take a look into one of those?
@@legiongames2400 Range-based enemies and more gunplay stuff would be interesting. (Shotguns melee etc) Perhaps aesthetic stuff like bullet impacts and footstep sound effects? I don’t mean to overwhelm, I hope these give you some ideas!
Ooh! May I also recommend ragdolls?
@@catjox_45 That's a lot of ideas, thank you. I think I will take a look at some of those like more weapons and ranged enemies. Ragdolls I really wanted to get done for this one but the physical skeleton breaking kind of threw a wrench in my plans so probably worth revisiting. Seriously, thank you haha
How can I use function "is_playing" on AnimationTree?
i mean, why not use the animation player to just queue_free the zombies? you can call methods from the tracks themselves, you just have to set the condition to play and save a few lines of code with no timers and anything
Yeah you right, might as well have done that
so it doesn't work in godot 4.1? i can't seem to find the "get_simple_path". is there another method for it?
been trying to make a 3rd person shooter and its just not happening. not sure why, even with testing everything logically is there, but nothing works
EDIT: after bouncing back and forth with a legend of a friend, i have concluded that you must not adjust the transform of your main root node. and also, printing positions of your instance and or players was a huge help in finding my issues
example:
print(position)
print(instance.name)
print(instance.position)
print(instance.global_position)
My particles only emit a fraction of the time. Most hits don't emit, even though it is colliding. Any idea what I'm doing wrong?
That's a weird problem, I'm blanking out tbh. What's your bullet velocity? Also what's the particle velocity?
@@legiongames2400 i believe its the weapon speed or the raycast 3D not working correctly as if i slow down my bullet speed it works more than if i increase it, any fixes?
same problem here. going to mess with the raycast length and collision layers.
EDIT: Lowering the speed and increasing the raycast length worked.
Can you do a tutorial of blood particles when you hit an enemy?
Did that in my hitscan tutorial video
Please help the following line from the bullet just does nothing at all, the bullet spawns but doesn't move,
position += global_position * Vector3(0, 0, -SPEED) * delta
I tried adding a print(position) below this to have it print it's position, more to see if it was even running the code in the script, but IDK if that is a valid way of doing it, but if it is it seems like once it's spawned the code on the script isn't running?
I am having an issue where my player now just moves when moving the camera in any direction
no problem , got it , it was cause my gun collider was colliding with my player collider
The 8 guns got me 😂😂
Glad you like :D
When the player is strafing, the rifle muzzle raycast is offset (to the left if strafing left, to the right if strafing right), before lerping back to its position (only after the pressed button for strafing is let go). Does anyone know how I could solve this issue?
Z is depth so doesn't it kind of track that it represents the objects distance from the screen instead of up and down like blender? In 2D Y is vertical and X is horizontal, converting to 3D is just adding the element of depth or Z. This is one of those things that should really be developed according to one standard just like introducing a system of measurement or adding right angles.
People who made Blender like strategy games too much. :D
@@legiongames2400 lol
yeah, it was an awful decision from the godot devs. they defend it by saying there's no standard, but their examples are really cherry picked, almost everything uses z-up.
Can you add a melee weapon?
I can't change the materials on the models for some reason. When i try that it says that i cant change materials on imported models. Does anyone know how i can fix this? Because i've seen other people do it
why douse my bullets shoot horizontally?
dude, like seriously, the eight guns thing makes this look like a mech game. and honestly, you would probably have a minor successful game if you make an 8 guns game where you can shift out each gun depending on their energy usage, size, weight and recoil for instance. Making it such that players have to make decisions on which guns to bring and so fort and each gun should obviously have a specific use such that it actually matters. then you can add on top of that mech parts like legs, reactor, shield and so on such that you have to balance your mech to support the guns. and then of course add tons of zombie mech enemies players can demolish for fun.
I should be paying you that's a whole game right there LOL
the engine is telling me that the function instantiate doesn't exist any idea how to fix it? because you're using it to spawn them in
What version of Godot are you using?
@@legiongames2400 at the @onready bullet I had put the wrong thing from resources after i copied the correct one in it worked
I am using the latest and getting the same problem
@@legiongames2400
@@BoiNatty I hate it everytime Godot gives me an error just because I'm using a slightly newer version, all this error happening because of version difference, If you don't want error, you have to use EXACT same version as the version that the tutorial is using, so basically you need 5 months old version of Godot if you don't want any error, typical Godot problem, Godot keep change everything each version I hate them
@@999dunkins instantiate() hasn't changed for like 3 versions though
ur probably just using it wrong
can you pls make tutorial for weapon system so can easily add more type of weapons
Yep! Working on that right now! :)
Loved this video for the tutorial but got stuffed over on the particle bit. I'm trying to change the direction in the process material at 5:42 but for me I don't have that as an option in the inspector. can someone please help, how do i change the direction
Solved this one, for anyone wondering they changed the UI for the GPU particles and the direction change is now found in spawn/velocity :)
It is not working can u help me
my bullets are getting stuck midair and colliding with nothing :c as soon as i added the collision code
Try to rewatch it and try to do it all over again and maybe that can fix it or if u fix it already lol
I can't put the bullet speed to high, more than 40 and the bullets are not colliding, it probably has to do with the raycast not detecting the collision thanks to the speed?
I would like the bullets to travel faster, so it's less time to make it to the enemies.
If someone know what it could be, I would appreciate the help.
hey, i was having this problem and i could fixed it adding this line of code before the if on the raycast.is_colliding():
it should look like this:
raycast3D.force_raycast_update()
if raycast3D.is_colliding():
@@revn45 Thank you very much, had the problem that some of my bullets just didn't collide with the floor and that fixed it.
@@revn45 thank you!!!!
For some reason, my bullets won’t spawn in when I try to shoot them and instead the game crashes?
I'm having the exact same problem where I'm getting an error that says Invalid set index 'position' with value of type Vector3
What error is it giving you?
@@legiongames2400 hey, i know this is kind of a long shot, but i'll take a shot in the dark as i'm having the same issue. the original error i got was "Invalid set index 'position' (on base: Callable) with value of type 'Vector3.'" So, realising that position returns a Vector2 value I replaced both position and global position with .global_transform.origin, and now get the error code "Invalid get index 'global_transform' (on base: Callable)." Is there any way you could help me?
@@blakerau6167 thank you!! i commented off the _process(delta) for the bullet script and it doesn't crash anymore, the bullets just sit there. issue isn't fixed but you narrowed it down a lot, i just need to find another way to move the bullet
@@blakerau6167 FIXED! replace the transform line in the bullet script with translate(Vector3(0, 0, -SPEED) * delta)
Hey, if I have 1 spawner, how to make 1 zombie come out of it and not appear again?
what do you mean by not appear again?
@@legiongames2400 I think they mean that 1 spawner will only -spwan- spawn one zombie!
@@StrangeStar141 yes
Hi
Which programing language use in this engine c plus or c sharp or both of them are use in this engine and if we know just one programing language is it benefit for use godot or not.
This tutorial is in GDScript. Godot has a lagging support for C# and as far as I know there's an extension for C++.
🔥🔥🔥🔥🔥
Amazing!!! can u add audio to it??
U should just add the sound when u push the shot button if u know what I’m trying to say lol
Is there an easy way to transform the keyboard and mouse input to a simple controller input script?
Controllers are a little trickier with partial inputs on the different axis for walking, so it might be easier to write the controller script first and then transform that to support the keyboard.
@@legiongames2400 cheers I will give that a try
How do you import the animations after you already have the character?
You can copy the keyframes over if you import another character with the extra animations you want to add.
the animations aren’t playing
Does it play at least once?
my bullets are shooting to the left not straight.
Probably has something to do with where the "barrel" raycast is facing. Could you double check what happens when you rotate it?
just flip the gun raycast to -90 °
How do you combine all the scenes into one called world, and also can you use arms to holding the ❤nice video by the way❤
What do you mean by combine the scenes?
@@legiongames2400 nvm I figured it out, by the way do you any discord group bro? Iam currently working on a similar game (iam a beginner)
@@who_tf_asked Yeah theres a link to the discord in the video description!