deg2rad() has been renamed to deg_to_rad() in Alpha 15, if anybody's having an error.
@mustafamohamud52122 жыл бұрын
thank you!
@wordrc2 жыл бұрын
thanks!!
@wellhellotherekyle2 жыл бұрын
You're a life saver!
@LynnWinx2 жыл бұрын
Good. That 2 was cringey as hell :D
@jameswashington47042 жыл бұрын
@@LynnWinx no it wasnt u mf I will fight u
@wellhellotherekyle2 жыл бұрын
So two things had changed since this video was published... 1. The _unhandled_input part, the code should read like this now: _unhandled_input(event): (All the stuff after on that line in Branwell's code is no longer necessary) 2. deg2rad() has been renamed to deg_to_rad() (Thank you to Andy Reed for pointing this one out) Thanks for the wonderful tutorial Bramwell!
@mando15702 жыл бұрын
thank you so much my guy your comment really helped me ❤
@gustaafmilzink2 жыл бұрын
Thank you!
@recker7017 Жыл бұрын
point 1 is invalid, typehints never were necessary
@Micahtmusic Жыл бұрын
maybe not necessary, but definitely polite
@sechmascm Жыл бұрын
The other stuff on that line improves performance by a huge margin. The engine doesn't have to guess what everyting is supposed to be and it runs those operations faster. If you want a good game, it is necessary.
@erin15692 жыл бұрын
Btw, if you want to have the same autocomplete as Bramwell at 11:47, you should go to Editor>Editor Settings>Text Editor>Completion>Add type hints
@BobaBallz_the2nd Жыл бұрын
TYSMMMMMMM
@trxlly Жыл бұрын
Thanks
@mayodiff2245 Жыл бұрын
what a legend
@Marandal Жыл бұрын
Thank you.
@Zetsu_Org Жыл бұрын
Bro thanks alot I was scared that's I did wrong
@alechussak3750 Жыл бұрын
set_mouse_mode() and get_mouse_mode() have been removed since this video was made. You can now get/set the Input.mouse_mode property directly: SET: Input.mouse_mode = Input.MOUSE_MODE_CAPTURED GET: if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
@gregoriodelimaalves6862 Жыл бұрын
how do I do this properly
@StephenCodess Жыл бұрын
thanks!
@NerdWithABeard Жыл бұрын
This, along with the tip for how to access the other command auto-fills, are much appreciated
@351c4v7111 ай бұрын
thanks, that was very helpful
@351c4v7111 ай бұрын
func _unhandled_input(event): if event is InputEventMouseButton: Input.mouse_mode = Input.MOUSE_MODE_CAPTURED@koolgabieboi2816
@I_can-t_GAMING Жыл бұрын
والله انا كنت واقف على ان الشخصية بتخترق الارض لكن دا اكتر فيديو فادني فشكرا جدا 💖💖💖💖❤❤ By God, I was standing on the fact that the character penetrates the ground, but this is the most useful video, so thank you very much
@Drachenbauer Жыл бұрын
i didn´t add a neck node, i rotate the whole character around y instead with the mouse, so i just didn´t get the problem of fixed forward direction, that´s described at 16:15. It feels just like a fully functional first person charecter.
@sweetdog23989 ай бұрын
A cool thing you can do with this part: var input_dir := Input.get_vector("move_left", "move_right", "move_forward", "move_backwards") var direction = (neck.transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() if direction: if is_on_floor(): velocity.x = direction.x * SPEED velocity.z = direction.z * SPEED else: if is_on_floor(): velocity.x = move_toward(velocity.x, 0, SPEED) velocity.z = move_toward(velocity.z, 0, SPEED) is right before the velocity stuff you can add a if is_on_floor so that you cant change directions midair, or you can use an else comman so that you can but its less.
@madphoenix9826 Жыл бұрын
Always nice to find a information dense tutorial for the specific thing you wanna do ^^ Thank you very much!
@YOZA. Жыл бұрын
extends CharacterBody3D const SPEED = 5.0 const JUMP_VELOCITY = 4.5 # Get the gravity from the project settings to be synced with RigidDynamicBody nodes. var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity") @onready var neck := $Neck @onready var camera := $Neck/Camera3d func _unhandled_input(event: InputEvent) -> void: if event is InputEventMouseButton: Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) elif event.is_action_pressed("ui_cancel"): Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED: if event is InputEventMouseMotion: neck.rotate_y(-event.relative.x * 0.01) camera.rotate_x(-event.relative.y * 0.01) camera.rotation.x = clamp(camera.rotation.x, deg_to_rad(-30), deg_to_rad(60)) func _physics_process(delta: float) -> void: # Add the gravity. if not is_on_floor(): velocity.y -= gravity * delta # Handle Jump. if Input.is_action_just_pressed("ui_accept") and is_on_floor(): velocity.y = JUMP_VELOCITY # Get the input direction and handle the movement/deceleration. # As good practice, you should replace UI actions with custom gameplay actions. var input_dir := Input.get_vector("left", "right", "forward", "back") var direction = (neck.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_t
@tornstrashcontent2 ай бұрын
THANK YOU SO MUCH! I've been searching for a game engine to move up from scratch and eventually settled on Godot. This video taught me heaps and can't thank you enough.
@kevindean8312 Жыл бұрын
I am complete noob to Godot and this tutorial was excellent. Easy to follow and loved how you actually explained everything. Thank you!
@BlobFish-BlobFish2 ай бұрын
This is the only tutorial that actually explains what each line of code means. Thank you, Bramwell!
@petethorne50942 жыл бұрын
This is absolutely brilliant! I just downloaded the Beta (woo!) and within a few mins I had a player running around my test scene. Bought your course a while back and now that things are getting more stable, I'm going to have to stop avoiding building a game!
@kevindean8312 Жыл бұрын
So was Godot 3.x not very stable?
@DEXA_Entertainment Жыл бұрын
Very on point, short and helpful! Thank you for teaching not only me but a lot of people too. 😊👍
@theaussieninja8176 Жыл бұрын
thank your Bramwell for these tutorials I love how you go into great depths on everything I wish more tutorials went into such depth
@PanIsTrying10 ай бұрын
Thank you kindly for your help in this tutorial. It made me a subscriber
@emilyallen791210 ай бұрын
same
@jwt772 ай бұрын
This helped me a lot to get started. Thank you!
@studiophazer-zw7dd3 ай бұрын
i looked at two tutorials and yours worked. liked
@hayleypeterson700710 ай бұрын
This is still such a great tutorial, but I wanted to add that if anyone's gotten a bug when adding camera movement, the fix for me was this line to check MouseMotion was the event type: if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED and event is InputEventMouseMotion:
@pisel5945 Жыл бұрын
thank you i had no idea how to do something in godot because there was always errors, i didnt think that i will succed following the first tutorial that i clicked on
@harryudal311511 ай бұрын
Thank you so much for all the work you have done, this has given me so much help. And I thank you
@anarchicpancake28402 ай бұрын
15:51 i got up to here with no errors but when i copied the code and ran the game the camera glitched, now it's constantly staring at the ground and i can't rotate it up
@sailorkitty58532 ай бұрын
same, hope someone replies soon.
@zirathar5 ай бұрын
thank you bro really you help my life and you make me happy❤
@apersimmon11 ай бұрын
I applied this to a 3rd person player but it was very useful, thanks!!
@aullvrch2 жыл бұрын
this made me subscribe! By far the most useful and educational vid on this topic I I have seen thus far, with the added bonus of being in godot 4!!
@cultofape2 жыл бұрын
Love your tutorials! If I can make a request - 3rd person 3d with LMB click on ground movement and proper player rotation. I just can´t make it 100%right
@BramwellWilliams2 жыл бұрын
I could do something like that for sure ^^ I've done something like that with gridmaps for tiles you can move to: twitter.com/bramreth/status/1453508866134663174
@grarldbrown6812 Жыл бұрын
I'm just hoping to use LMB method for camera3D, similar as the way of tutorials does but classic rpg.
@Dave-n5d Жыл бұрын
12:22 Where did he get this string of code from i dont understand how he got it
@kitsunemusicisfire3 ай бұрын
copied and pasted it from a document he had on his pc, just retype all the code and it'll work fine
@dairygecko10 ай бұрын
thank you so much, i was watching another tutorial and it skipped the part in which the player was created, im a complete newbie, now i can continue the other tutorial (which was about creating a map)
@footballCartoon914 ай бұрын
@7:46, the movement is quite buggy if you "move left" or "move right" because the CharacterBody3D should either strafing left or right OR the Camera3D should just yaw (i.e rotates around the y-axis) without moving the CharacterBody3D too.
@cyphfrix1620 Жыл бұрын
thanks so much bro, your tutorial is very easy to follow and quick
@jasmanDhaliwal-k4r Жыл бұрын
Thank you bro. I am a boy who need these types of tutorials. LOVE FROM PUNJAB
@JohnFenlon Жыл бұрын
Just started using Godot, very helpful video to get up & running quickly, many thanks 👍
@wolcamophone47832 жыл бұрын
I wish there was a video that really explained how to better understand movement functions tied to kinematic bodies so that you could know exactly what kind of bhopping or air strafing glitches to put in movement fps controllers.
@ezzie_baby2 ай бұрын
thank you so much!! this was extremely helpful.
@Phryj11 ай бұрын
This was a big help, thank you!
@VGV010 ай бұрын
thanks, great video! You explained every step. Much appreciated!
@Snakemaster112353 ай бұрын
tysm Bramwell this helped me alot
@swedishgamedev Жыл бұрын
Thank you for this very clear tutorial! It helped a bunch!
@daniyarm2922 Жыл бұрын
why complicate, it is enough to add in the _input (event) function: func _input(e): (well i shorten the EVENT like this :)) ) if e is InputEventMouseMotion: rotation.y -= e.relative.x * 0.005 head.rotation.x = clamp(head.rotation.x - e.relative.y * 0.005, -1.4, 1.4) You can change the numbers however you like. He is only responsible for speed and limit.
@chrisfritz7545 Жыл бұрын
Just wanted to say thanks for sharing your knowledge. Keep making these videos. You have a great way of explaining what you are doing.
@AdamHerger4 ай бұрын
Great tutorial Bramwell! I was just wondering if the camera rotation adjusts to the framerate of the user since it's not in the _physics_process(delta) function?
@acedefective222011 ай бұрын
thank you, this tutorial was very accessible and helpful
@Guy67890 Жыл бұрын
how did you get that alongated equal sign on 13:34
@One-bh9ii Жыл бұрын
It's just a double equal sign. if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
@MurkyJeep Жыл бұрын
Thank you! Explained well and straight to the point.
@sogimarvaz Жыл бұрын
Very nice video, thank you so much Bramwell.
@PAPRPL82 жыл бұрын
Thanks for the tutorial; found it quite helpful and moved at a pace I found keep up with as a beginner.
@sgaming31744 ай бұрын
Thanks for the tutorial
@riisezz02 жыл бұрын
Hey, man. I'm new to Godot and you've really been helping in the transition to Godot 4. I really appreciate you!
@mr.e432710 ай бұрын
Great tutorial, thanks mate!
@ViralShorts8303 Жыл бұрын
Hey man thank you so much its working very good and i am very happy!! you just got a Subscriber😉
@RealJesus Жыл бұрын
help everytime i look down/right the poc starts spinning and it's uncontrollable
@pacobrian7547 Жыл бұрын
you are a genius, you solved my problem of collisions
@bluecheese1066 Жыл бұрын
Very nice intro to some 3D player basics. Thank you very much!
@darkBuster2002 Жыл бұрын
there is a problem for me Line 17:Assignment is not allowed inside an expression.Line 18:Assignment is not allowed inside an expression.
@foldysnootmack Жыл бұрын
I’m having the same issue. Have you figured out how to fix it?
@nezbro2011 Жыл бұрын
@@foldysnootmack Double equals so type ==
@P134-i3p Жыл бұрын
@@nezbro2011 Bloody hell really??? DOUBLE EQUALS??? God damn. Good thing I check the comments for answers... Fucking double equals...
@nezbro2011 Жыл бұрын
@@P134-i3p Yeah not really obvious at first considering there isn't a gap in between the two.
@darkBuster2002 Жыл бұрын
@@foldysnootmack No
@wukerplank2 жыл бұрын
Very interesting, thank you for putting this together!
@piimae Жыл бұрын
Exceptionally well done tutorial, straight to the point and just the right amount of explaining of the details of the mechanics. Thank you!
@idk-gq8tw Жыл бұрын
Can someone help, i started the scene and when i try to rotate is freezes and it says kennedy.gd 10 @ _ready(): node not found: "neck/camera3d" (relative to "/root/node3d/characterbody3d").
@meteroy17 Жыл бұрын
Is there a way to add other functions like interact, running, crouching, and all that?
@sethwhite46352 жыл бұрын
Awesome, thanks for the video!
@Betegfos2 жыл бұрын
Nice tutorial. Very useful. How do I change the movement speed depending on the direction of the movement?
@payton.a.elliott2 жыл бұрын
After tinkering around for a while the only way I could get it to work is to put another if statement inside the "if direction:" statement. I replaced the default SPEED const with the walk_speed var. I simply check if move direction is towards positive 1 (which is backwards for the character body), then half walk_speed if they are moving backwards. Otherwise, walk_speed is normal. # If moving backwards move at half speed. if direction.z > 0: velocity.z = direction.z * walk_speed / 2 else: velocity.z = direction.z * walk_speed
@petethorne50942 жыл бұрын
Might be a bug here, if you rotate the Player node in the editor the movement keys are not mapped to the camera any more...
@petethorne50942 жыл бұрын
My hacky fix here is to rotation the basis by the player rotation: var direction = ((neck as Node3D).transform.basis.rotated(Vector3.UP, rotation.y) * Vector3(input_dir.x, 0, input_dir.y)).normalized()
@jessepinkeye23399 ай бұрын
I tried doing that but the keys are still not following the camera when I rotate the Player
@pkk11x90 Жыл бұрын
i have a bug in line 17. can someone help? here is script: func _unhandled_input(event: InputEvent) -> void: if event is InputEventMouseButton: Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) elif event.is_action_pressed("ui_cancel"): Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED: if event is InputEventMouseMotion: neck.rotate_y(-event.relative.x * 0.01) camera.rotate_x(-event.relative.y * 0.01) camera.rotation.x = clamp(camera.rotation.x, deg_to_rad(-30), deg_to_rad(60))
@imreallynotcoolatall9 ай бұрын
i have the same problem! i don't know how to solve it
@BlobFishIsNotABot8 ай бұрын
The -> void idnt needed in godot 4
@auzz44552 ай бұрын
func _unhandled_input(event): if event is InputEventMouseButton: Input.mouse_mode = Input.MOUSE_MODE_CAPTURED elif event.is_action_pressed("ui_cancel"): Input.mouse_mode = Input.MOUSE_MODE_VISIBLE if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED: if event is InputEventMouseMotion: neck.rotate_y(-event.relative.x * 0.01) camera.rotate_x(-event.relative.y * 0.01) camera.rotation.x = clamp(camera.rotation.x, deg_to_rad(-30), deg_to_rad(60))
@auzz44552 ай бұрын
i think godot have made changes since this video, so its a little tricky finding the correct terminology
@Fadam_red4 ай бұрын
I get a error at camera.rotate_x(-event.relative.y * 0.01) Identificer "camera" not declared in current scope
@randomdamian Жыл бұрын
15:45 deg2rad() was renamed to deg_to_rad()
@18_leafclover6 ай бұрын
I'm getting an error on lines 20, 21 Identifier camera not declared in the current scope
@Lacinycoryp285 Жыл бұрын
I every time I try to use the camera it crashes the game
@KhaoticSanctum69 Жыл бұрын
I have an issue on line 17 of the code that says "assignment is not allowed inside an expression" and idk what's wrong :( can someone please help
@Ren-vo8jj Жыл бұрын
its 2 equal to signs "=="
@PlasmaGhost3037 ай бұрын
the tutorial was great! thank you
@recker70172 жыл бұрын
a rigidbody fps controller tutorial would be really good
@casualtyxy_x6761Ай бұрын
When I try to look up or down past the specified clamps, moving the mouse up or down then causes the camera to rotate on every axis at the same time. Not sure if I stopped watching early and there was a fix for this, but it doesn't seem so. Anyone else having this issue?
@Kingofther3gion2 жыл бұрын
16:00 this is all good but does the player body rotate with the neck? so that the head doesn't just spin around while the body is not. So the body is facing the same way we are looking
@RedCatGD Жыл бұрын
Thanks a lot ! Helped me out a tone ❤
@Mrfluffneow6 ай бұрын
Can someone help me becuse that arrow in the script 11:52 does not exist on my keyboard
@BramwellWilliams6 ай бұрын
It should just be a hiphen and greater than symbol -> (back in that version of Godot the "code contextual ligatures" editor setting was enabled by default to get extra symbols)
@Mrfluffneow6 ай бұрын
@@BramwellWilliams ok
@devinpeck6664 Жыл бұрын
Love this! Thank you so much.
@itokuun Жыл бұрын
Awesome video man
@The24thFret Жыл бұрын
I am getting an error on the line : 20 camera.rotate_x(-event.relative.y * 0.01) error reads: Attempt to call function 'rotate.x' in base 'null instance' on a null instance. I copy and pasted the entirety of the code from the github page and the problem still did not resolve, there are no other errors in the code
@billyboiisaredneck89654 ай бұрын
I had a question but how do i remove my cursor from the screen?
@gameinglizard6984 Жыл бұрын
OK SO WHEN I AM TOUCHING THE GROUND ITS LAGGY AND WEIRD, it MIGHT BE CLIPIONG idk how do I fix that.
@reduxek10 ай бұрын
I have this problem too
@Rebel_MC2355 Жыл бұрын
at 12:21 how do you get those lines of code? im typing them in rn and its very annoying
@NarekAvetisyan2 жыл бұрын
Very nice! Can you also make a simple tutorial like this for a Age of Empires style camera?
@MrJasonSnell2 жыл бұрын
found a couple code fixes for clamping the vertical view camera.rotation.x = clamp(camera.rotation.x, -(PI/4), PI/4) or camera.rotation.x = clamp(camera.rotation.x, deg_to_rad(-30), deg_to_rad(60))
@eliyahumedia Жыл бұрын
how would clamp the horizontal view? like this?: camera.rotation.y = clamp(camera.rotation.y, -(PI/4), PI/4)
@toxslix7 ай бұрын
Thanks alot very useful video much love to ya mate
@BramwellWilliams6 ай бұрын
Glad it helped!
@S.Johannesson10 ай бұрын
Thank you for this!
@RivenbladeS9 ай бұрын
why doesnt godot have buttons to instantiate cube plane culinder etc like unity and you have to set the mesh instance yourself?
@Mrtubb158 Жыл бұрын
How do you get the star icon thing at 13:23
@MP-pv4eb Жыл бұрын
thanks for this tutorial! I found for me the camera was very twitchy. I'm not sure if there are better solutions for this, but this is what I ended up doing: var x_mov = event.relative.x / 1.7 var y_mov = event.relative.y / 1.7 neck.rotate_y(-x_mov * 0.01) camera.rotate_x(-y_mov * 0.01) you might be able to do it in-line (so, neck.rotate_y((event.relative.x / 1.7) * 0.01) for example), but the variables help my readability. Also, change 1.7 to whatever value is comfortable. Larger value will be slower, "smoother" motion.
@pommefrites Жыл бұрын
Hey, kind of semi-related but this video helped me fix a long-standing issue with the stair catcher in my character controller being offset if my character starts the level rotated at all, which is fine if the player always starts in the same direction with 0,0,0 rotation, but not great if they do, which is most often the case. It has to do with the lines you highlighted around 17:17 and I used a very similar block to calculate the position of the stair catcher ray cast to swing around in the direction of player movement. I then just had to offset it vertically from the neck height to be near the floor and now it works perfectly no matter which direction the player starts in. Anyway, it had been bugging the hell out of me for a whiiiiile, so thanks for your help!
@EMDthe16 ай бұрын
Where should I add the jump animation
@Mineblox-3333311 ай бұрын
Where do I put the deg_to_rad() at so then there will be no error?
@radugabrielbiclineru96108 ай бұрын
Why did you make an auxiliar node for the neck Yes, it is more ordered but couldn't you just make the nides child of the camera an do all the rotation for the camera The only reason i see using a neck node is becouse it's easier doing movement this way(you have succesfully separated the rotation axis)
@BramwellWilliams6 ай бұрын
axis ordering issues can make rotating one node difficult, so I find it easier to only rotate a node on one axis at a time
@radugabrielbiclineru96106 ай бұрын
On my game i fixed it by adding a second neck node and hamdeling rotation for each one. Thanks any way. Very good tutorial
@Mrtubb158 Жыл бұрын
7:44 i had a problem with being able to move because whenever i pressed the arrow keys it wouldnt do anything so idk what i did wrong Edit:I figured it out
@zoolanderbestmovie2 Жыл бұрын
cool good job easy to learn continue the hard work
@sakoliketaco2 жыл бұрын
when I added velocity.y it says velocity has not been declared yet
@BramwellWilliams2 жыл бұрын
As of Godot 4 velocity is a member variable of the CharacterBody3D is the script definitely extending that? -> Also the velocity should already be there as part of the template Godot created when you created the script which makes me suspicous something may have already gone awry
@Poshmurf83 Жыл бұрын
Same please help.with the issue
@S4nrioKuromiLover Жыл бұрын
for func input it doesnt say inputevent void? im on version 4.1
@olmrgreen19042 жыл бұрын
Awesome video!
@hectora.322010 ай бұрын
This is great. Short and usefull.
@matturner68905 ай бұрын
Won't work :/ "Error at (17, 33): assignment is not allowed inside an expression" I have it copied perfectly, not sure what's wrong.
@JorgeRosa2 жыл бұрын
Very cool!
@badmusicproducer_offical6 ай бұрын
HOW DO I MAKE THE CAMERA EVEN LESS FAST?
@trueblue97 Жыл бұрын
This is all cool and good, but how do I make camera controls with the right stick on a controller instead of the mouse?