Тёмный

Complete Godot Rhythm Game Tutorial 

LegionGames
Подписаться 13 тыс.
Просмотров 62 тыс.
50% 1

In this video we create a custom Conductor Node that is useful in any rhythm game you could make and see how we can use it in order to create a simple Guitar Hero clone in Godot 3.2.
Link to project: github.com/LegionGames/Conduc...
Itch: legiongames.itch.io/
Twitter: / legiongames1
Instagram: / legiongames1
Newgrounds: legiongames.newgrounds.com/
Inspiration: www.gamasutra.com/blogs/Graha...
Relevant reddit link: www.reddit.com/r/gamedev/comm...
Another one: www.reddit.com/r/gamedev/comm...

Опубликовано:

 

16 июл 2020

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 118   
@legiongames2400
@legiongames2400 2 года назад
Come join my discord! discord.gg/CVPWZgpR
@alibiisntreal
@alibiisntreal 5 месяцев назад
can you post a new link? i have some questions about the video and need some help
@avinsxd
@avinsxd 28 дней назад
For anybody who wants the project to work on Godot 4: 1. Move signals "beat" and "measure" into Globals script. 2. Change "emit_signal(NAME, VALUE)" to Globals.signal.emit(value). Globals.measure.emit(measure) 3. In the Game scene inside of the function "_on_ready" connect the "_on_Conductor_measure" and "_on_Conductor_beat" to the signals. Globals.beat.connect(_on_Conductor_beat) After that the notes should spawn as intended.
@madefromtrash4655
@madefromtrash4655 28 дней назад
This video is 3 years old but somehow this comment found me just in time. Thanks for the tip btw if anyone's still struggling, make sure you're using "Global" instead of "Globals" (I think it's just a typo) and use the game _ready function instead of an _on_ready function
@luckyknot
@luckyknot 6 месяцев назад
This tut walkthrough is extraordinary, thanks for sharing it with the community sir!!!
@IvanIvan-nj2to
@IvanIvan-nj2to 3 года назад
Super useful! It's pretty smart the way you set this up and has so much potential. Thanks so much.
@crispyowl7178
@crispyowl7178 3 года назад
I ended up making a game over the weekend using this- thanks a ton for making it
@legiongames2400
@legiongames2400 3 года назад
Thank you! :) Would love to see it!
@crispyowl7178
@crispyowl7178 3 года назад
@@legiongames2400 ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-0sVOlYBlXsg.html hope you enjoy it!
@999dunkins
@999dunkins Год назад
I CANNOT ended up making a game over the weekend using this
@toby818
@toby818 Год назад
​@@999dunkins me too im a noob
@natanbcpc
@natanbcpc 3 года назад
That was absurdely helpful. Thank you for taking the time to make this video!
@legiongames2400
@legiongames2400 Год назад
You're very welcome!
@atroqui9nine259
@atroqui9nine259 3 года назад
I could go for a cup of coffee while making a game on this engine
@999dunkins
@999dunkins Год назад
I could NOT go for a cup of coffee while making a game on this engine and I cannot get ANYTHING from this tutorial, how is script even work? this dude did NOT say anything if you know what I mean
@KevinKorDevs
@KevinKorDevs 22 дня назад
I could go touch some grass and eat at a five star restaurant while waiting for unreal to compile shaders
@snesmocha
@snesmocha 3 года назад
My friend needed this lmao
@TheRonpe
@TheRonpe 3 года назад
Love it! It's like that FFR aka Flash Flash Revolution game.
@johnnygossdev
@johnnygossdev 4 года назад
I love me a rythm game! Great video thanks so much!
@legiongames2400
@legiongames2400 4 года назад
Thank you very much! I love your videos!
@petrikor
@petrikor 7 месяцев назад
Thanks for this
@legiongames2400
@legiongames2400 7 месяцев назад
Thank you for watching! :)
@TheGamer1445_Xbox
@TheGamer1445_Xbox Месяц назад
pretty useful to make your own fnf or fnf mods using godot!
@planetnexu
@planetnexu 3 года назад
finally a good quality video
@user-tiananmen0604
@user-tiananmen0604 3 года назад
Hi, it is a very high quality video! Appreciate it! Can you make a full tutorial on the start of the game? Thx!
@kalabresa4329
@kalabresa4329 4 года назад
very nice tutorial!
@MisterSquirtle
@MisterSquirtle 3 года назад
Very helpful tutorial, thank you! I think the way you define measures is wrong, though. Measures are used to put a song into segments of equal lengths, i.e. segments containing equal number of beats. If a song has a time signature of 4/4 for instance, a single measure consists of four beats, where each beat is one quarter note in length. What you define as a measure in the video is actually a beat. But in any case, thanks a ton for this tutorial :)
@legiongames2400
@legiongames2400 3 года назад
Was a little scared of making terminology mistakes LOL, unfortunately the googling I did didn't help it seems. :D Hopefully it doesn't confuse too many people.
@MrLeeJiGun
@MrLeeJiGun Год назад
so what is the correct terminology for it, i'm still confuse sorry. Is it call beat like what you imply in your comment or would it be call tempo.
@laghouaouta
@laghouaouta Год назад
@@MrLeeJiGun note instead of measure
@MrSpecy
@MrSpecy 3 года назад
Thank you so much!
@vulton64
@vulton64 6 месяцев назад
This is the best rhythm game tutorial for godot! This actually let me make my own Rhythm Game! My only complaint is that it isn't in Godot 4!
@legiongames2400
@legiongames2400 6 месяцев назад
Thank you for watching friend, I'm sorry I haven't gotten to updating it just yet. :(
@alibiisntreal
@alibiisntreal 5 месяцев назад
@@legiongames2400 you still got a discord man? i really would appreciate it if your link in the pinned comment still worked...
@popooppop
@popooppop 2 года назад
спасибо чел ты просто лучший!))
@josephjoestar2829
@josephjoestar2829 4 года назад
Pretty cool tutorial bro, has any one played The Virtuoso Path? It's a cool rhyhtm game and I think it was made with Godot.
@11x334
@11x334 2 года назад
Yeah I've wanted to make a game where all the action happened on a musical beat.
@virtality616
@virtality616 3 года назад
Really good tutorial! Im still not sure how you designed the Combo GUI and scripting it to update the TextLabel by 1 each hit though.
@plop8518
@plop8518 3 года назад
May I ask if where the input script can be found if there are any? Trying to figure out on how to fix the input lag if possible
@kelvinanderson3767
@kelvinanderson3767 3 года назад
0 Dislike GG, thankyouuu
@scotthunsinger7861
@scotthunsinger7861 2 года назад
Would it be possible to port this type of game into RenPy? I'm working on a VN and would love to have something like this as a minigame within.
@DragonaxFilms
@DragonaxFilms 3 месяца назад
Is there an updated version of the project file? I tried loading it up but got a lot of errors because I'm in the newest version of Godot.
@legiongames2400
@legiongames2400 3 месяца назад
Not yet unfortunately
@gattocat3729
@gattocat3729 Год назад
I put my own ogg music and set the loop to false but the game doesnt automatically stops, how can i fix this? additional: how did you get the values in game function on_conductor_beat?
@W3Rn1ckz
@W3Rn1ckz 7 месяцев назад
How do I make this work with looping music?
@iamwatchingthisvid.7682
@iamwatchingthisvid.7682 Год назад
how do I code it if I want to spawn different colored arrows?
@NotPelicann
@NotPelicann 2 года назад
Great video this definitely helped me a lot. Quick question though, how would one introduce drag notes? (Like in friday night funkin)
@orangefonnymod5085
@orangefonnymod5085 Год назад
bruh you play to much Friday night funkin'
@NotPelicann
@NotPelicann Год назад
@Reajes_CocoKola 8 months ago maybe... Now I'm stuck with being iron at valorant lmaoo
@Victor-oc2rr
@Victor-oc2rr Год назад
Have you tried MBOY editor for beatmap creation? is it better that MIDI?
@legiongames2400
@legiongames2400 Год назад
Looks really cool, thank you for the tip
@iakobs
@iakobs 5 месяцев назад
Hi! I don't know if it's me doing something wrong, but beat 1 is never emitted, hence making the measure count wrong. Very very good video, though! thanks a lot!!
@Dandy_kyun
@Dandy_kyun 3 года назад
Pretty good tutorial. One question (idk if you will still see or its obvious question): Using this system I want to start metronome counting with a offset in milliseconds for example: a song starts with no sound, but in 0.179 position in seconds starts playing or the timing for counting beats starts in other specific time, or in changing bpm music. I tried a condition to just report beats if song_position is >= offset_to_start_counting, but for some bpm starts skipping first 2 beats. Any tip for this approach? I appreciate your work :) if you answer I'll be very glad. Thx
@legiongames2400
@legiongames2400 3 года назад
You could subtract your offset from your song position. So when you set song position to playback_position + time_since_last_mix - get_output_latency just add -offset there as well I'd say? Might need to add a condition after that to make sure the resulting song position > 0 before reporting beats.
@Dandy_kyun
@Dandy_kyun 3 года назад
@@legiongames2400 Thank you for the answer, I'll try in that way!! :)
@mkjyt1
@mkjyt1 3 года назад
This seems cool! How did you time the ending for the song? the game keeps running while I try this with another song. Appreciate the response and inspiration to make a game!
@legiongames2400
@legiongames2400 3 года назад
Counting beats :D
@gregoryglaister4189
@gregoryglaister4189 2 года назад
hey man, Im running into an issue where the game doesn't switch to the end screen if the song_position_in_beats is >= 200. Any ideas what might be causing this? Thanks for the awesome video!
@DrCJBoduma
@DrCJBoduma 3 года назад
Thanks for you really helpful tutorial and explanation. Quick question if a song loops the conductor seems to stop reporting beats would there be a way to get it to continue?
@DrCJBoduma
@DrCJBoduma 3 года назад
Looking in to it more it looks like the song_position_in_beats resets to 0 (or -1) and it is the last_reported_beat the doesn't. I figured out a workaround something like.....if last_reported_beat > song_position_in_beat then set them both to -1. Seems to skip sometimes though. anyone know of a better way??
@hontema
@hontema Год назад
this will be useful in the future for me bur right now this is confusing
@Ferns_Gaming
@Ferns_Gaming 3 месяца назад
I'm getting the invalid lane set error for note0 and note1 but not2 is working basically perfectly. Does anyone know what my be causing this?
@legiongames2400
@legiongames2400 2 месяца назад
I can try to help but I honestly wrote this so long ago. Did you download the project or did you rewrite your own code?
@leonseghesso3539
@leonseghesso3539 8 месяцев назад
Probé esto con algunas canciones que me gustan pero tengo un problema, lo probé con "si te vas" de la nueva luna y el juego anda genial pero luego probé "Knockin' On Heaven's Door" de Guns N' Roses, y por mas que cambie el bpm no funciona bien la canción termina ates de tiempo... agradezco mucho si me pueden ayudar. Gracias por su atención.
@legiongames2400
@legiongames2400 8 месяцев назад
¿La canción sigue sonando y las flechas ya no aparecen?
@NeZversSounds
@NeZversSounds 4 года назад
Iffy choice to use physics_process in Conductor, because it doesn't participate in physics. Physics frames could happen more than 1 time during the actual frame and the player still will get visual feedback only after _process(), when drawing happens. So no need to get heavy on calculations more than needed.
@legiongames2400
@legiongames2400 4 года назад
As far as I know, _physics_process() generally updates less frequently than _process() since _physics_process() runs 60 times a second and _process() runs every frame. In this case, I think I'm doing fewer calculations. You're right though, shouldn't use it since it's not a physics object. Thank you for watching! :)
@adamsmiddy
@adamsmiddy 4 года назад
There's no real issue putting things into the physics loop that dont have to do with physics. _physics_process() is a misnomer and unfortunately causes a lot of confusion. It really should be called something like _fixed_process() to better convey the use case. The difference between _physics_process() and _process() is just the update timing. _physics_process() updates at a fixed rate (default is 1/60 a second) whereas the _process() updates whenever possible. Its up to the programmer to decide whether they want a consistent update or as many updates as possible.
@NeZversSounds
@NeZversSounds 4 года назад
​@@adamsmiddy I looked it up - function _physics_process gets executed always in constant regular delta steps (or at least is supposed to) but you can set it into physics framerate that's 4x drawing frame rate. For rhythm game I think it's better to update info at drawing speed - _process is triggered each frame and is in sync with the drawing, can't say that about physics_process.
@legiongames2400
@legiongames2400 4 года назад
@@adamsmiddy This was exactly my impression of the difference. I use _physics just for the fixed delta, it makes me feel more safe :D. I'm not sure why they changed the name though, I know it used to be called _fixed_process in Godot 2 and it is still how most people perceive it. Unless there was both a _physics_process and _fixed_process then and they just merged the two into one? Idk, never got the chance to use Godot 2.
@legiongames2400
@legiongames2400 4 года назад
@@NeZversSounds I think it would definitely lead to a more smooth game experience if I uncapped the fps from 60. Didn't know that you could run _physics_process more often than normal _process, thank you for sharing that!
@MiguelGomez-pg6dd
@MiguelGomez-pg6dd 6 месяцев назад
I cannot get the notes to spawn, do you think you could help me out a bit friend? I tried to join the discord server but the link is expired
@MiguelGomez-pg6dd
@MiguelGomez-pg6dd 6 месяцев назад
I got my notes to spawn! But I was wondering now if there was a better way to sync the notes to different tracks? Would it be better to make a Conductor scene and script for each individual song? And just in case you do reply, do you know how to make double notes spawn consistently as well as making held/pressed notes? I've only a couple of days under my belt of programming and this is basically the monopoly of rhythm game tutorials. Sorry for bothering
@jasonw2197
@jasonw2197 3 месяца назад
how did you get the notes to spawn if you don't mind me asking? I'm guessing you're in godot 4 as well.@@MiguelGomez-pg6dd
@senkisystems9615
@senkisystems9615 Год назад
Yo dude, just a quick question: How did you make the notes ignore the inputs if the player keeps them pressed instead of timing the note? I tried the same, but but if the player keeps the input pressed, it'll count as "okay" since it's actually colliding with it and the input is pressed.
@legiongames2400
@legiongames2400 Год назад
Hey so the way it's implemented in my code is the event only gets fired off once when the player first pressed the input. event.is_action_pressed(input, false) - the false input in there makes sure that "echo" events don't count towards triggering it. Could I see your input code?
@subhashchandrabose315
@subhashchandrabose315 3 года назад
i am trying to make a copy cat type of game, i saw a record option in audio bus section, but do not have any idea how to use it. any help ?
@legiongames2400
@legiongames2400 3 года назад
unfortunately haven't dabbled in recording with Godot just yet. sorry couldn't help :(
@nikadancerush8815
@nikadancerush8815 Год назад
Is there a way to make dedicated charts that will play the same notes each and every time you play the song?
@legiongames2400
@legiongames2400 Год назад
yeah, for sure you'd probably want to save notes into a json and then read that and spawn them as the level is playing. Alternatively, you could just add all of the notes in the editor and just have them be part of the level from the beginning.
@chudstation6913
@chudstation6913 3 года назад
How should one go about creating premade (not random) tracks?
@legiongames2400
@legiongames2400 3 года назад
Would just have to keep track of which beat you're on and have an array of spawns for all of the beats. I would probably go for a binary representation of spawns so I could store all of the spawns for a beat in one number, so 111 for all three lanes spawned or just 7 in decimal. So something like [ 7, 0, 1, 4 ] would spawn all three arrows on the first beat, nothing on the second, only the left on the third and only the right on the fourth. Let me know if that makes sense.
@chudstation6913
@chudstation6913 3 года назад
​@@legiongames2400 I got, it.Thanks! But what should I use to read the array and spawn the corresponding beats? And if I am to make multiple tracks, would it be better to put them in .json files? Sorry for bothering you, I am very much a begginner to Godot and programming in general.
@legiongames2400
@legiongames2400 3 года назад
@@chudstation6913 Haven't worked much with reading binary in code, but the solution that comes to mind is save the corresponding beat number in a separate variable, do modulo 4 on it to find out if you need to spawn right lane, subtract 4 if so. modulo 2 to see if you need to spawn middle lane, subtract 2 if so. if 1 remains spawn left lane, if 0 remains don't spawn left lane. Would be good practice to put it in a json, yeah. And no worries.
@Momorooster
@Momorooster 3 года назад
This is probably way too late, but I think using the pop_front() function would help. It removes and returns the first element of an array, so you might be able to do something like this: var note var chart = [1,0,5,3,0...] note = chart.pop_front() _spawn_notes(note) I haven't tried this, so what I put above might not work. I did make a thing where you can make a non random chart, but I used a dictionary instead of just an array which is probably much more inefficient but more organized. I created a node called chart and attached a script where I made a dictionary with B1, B2, B3, and B4 entries which are all arrays. Each index was one measure, and what the code does is that it sees if each entry had a 1, 2, or 3 and then spawned a note in the lane based off of the number. I haven't played around with it much, but it doesn't seem like it's affecting performance a lot.
@jasonw2197
@jasonw2197 3 месяца назад
Does anyone have some insight on how to make the notes spawn when importing this project into Godot 4?
@legiongames2400
@legiongames2400 3 месяца назад
Tbh I haven't seen my code from this in like years, but what exactly are you having issues with? The instance() function has been changed to instantiate() in Godot 4
@jasonw2197
@jasonw2197 3 месяца назад
the only time you use instantiate is in the spawn notes function right? I tried changing it and it still doesn't work, I don't know if I need to replace randomize in the ready function as well with something different.@@legiongames2400
@Swirly3844
@Swirly3844 3 месяца назад
@@jasonw2197I was able to get it to work, you basically just need to update the beat and measure signals.
@jasonw2197
@jasonw2197 3 месяца назад
appreciate it man, I'll try that out @@Swirly3844
@jasonw2197
@jasonw2197 3 месяца назад
how did you update them? did you also have to change the instance function to instantiate?@@Swirly3844
@Beresunablle
@Beresunablle Год назад
This definitely not for beginners(i dont have coding background)
@Simplisti.
@Simplisti. 3 года назад
can you make this tutorial again but write the code as you speak? i prefer those tutorials, and i cant find a single tutorial like it on rhythm games
@lochrowley9997
@lochrowley9997 3 года назад
Gamesplusjames has a tutorial series like that, it's for unity but you could use it as a reference for the maths/architecture along with this video
@Simplisti.
@Simplisti. 3 года назад
@@lochrowley9997 too much work :/ since unity uses C# i could use C#
@DedicatedScripter
@DedicatedScripter 3 года назад
M
@Deeredman4
@Deeredman4 Год назад
I gotta admit, I am a little confused here. It seems like the way you are explaining things; every beat is 1 measure but in traditional 4/4 time; there are 4 beats in a measure. The way you explain it is; beats = [1, 2, 3, 4, 5 ,6 ,7 ,8 ] meas = [1, 2, 3, 4, 1 ,2 ,3 ,4 ] but shouldn't it be beats = [1, 2, 3 ,4 ,5 ,6 ,7, 8 ] meas = [1, 1, 1, 1, 2, 2, 2, 2 ] or possibly something like beats = [ 1, 2, 3 , 4 , 5 , 6 , 7, 8 ] meas = [0.25, 0.50, 0.75, 1.00, 1.25, 1.50, 1.75, 2.00 ] ??? If there is only 1 beat per measure that would mean that you are thinking about things in terms of a 1/4 time signature?
@pcgaba
@pcgaba Месяц назад
who needs fnf when you can make a better mod by remaking it by yourself?
@lochrowley9997
@lochrowley9997 3 года назад
I love the project, but it's really painful to watch. It really feels more like a code walkthrough than a tutorial. Personally, I would break it into several parts and retype the code as you go over it so you can see the flow of the project better. Not a great tutorial, but as a code walkthrough it gave me a pretty good idea of how to do something similar myself, but again I don't think I could make something with this code without further studying.
@pneuma8961
@pneuma8961 3 года назад
I've watched it several times and still haven't managed to replicate anything by myself. Mind sharing some tips?
@lochrowley9997
@lochrowley9997 3 года назад
@@pneuma8961 What I'm doing is using the code from the tutorial series linked below as a reference for the maths, then I'll probably end up doing something in between that and this tutorial. more specifically we just need to get the notes to reach the buttons at the right time, then it's just finding a way to check how accurate the player was. I hope that helps. ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-cZzf1FQQFA0.html
Далее
I Made the Same Game in 8 Engines
12:34
Просмотров 3,9 млн
choosing a game engine is easy, actually
15:08
Просмотров 336 тыс.
What Makes Good Rhythm Game UX?
16:10
Просмотров 131 тыс.
rating popular rhythm games
14:45
Просмотров 557 тыс.
GODOT TUTORIAL: Shockwave shader for noobs
15:48
Просмотров 49 тыс.
How to make a Video Game - Godot Beginner Tutorial
1:17:12
Making a RHYTHM Game in 2 Days!
5:55
Просмотров 145 тыс.
Rhythm Game
10:17
Просмотров 1,2 тыс.
The Secret To Good Rhythm Games
15:50
Просмотров 144 тыс.