UserInputService - Roblox Advanced Scripting #13 — Transcript
Full transcript
- 0:00press R I Dare You Well when you phrase
- 0:03it like that that sounds like a
- 0:05challenge so that's a challenge I can't
- 0:07back down from whoa whoa whoa what is
- 0:11happening right now what is happening
- 0:12with this game bro oh my God I need to
- 0:14get out of here this is too
- 0:16insane all right so that just happened
- 0:19um yeah the purpose of that whatever
- 0:22that thing was with the sky of whatever
- 0:24that was doing um that was supposed to
- 0:26represent user input service I guess uh
- 0:29so it's basically how we're able to
- 0:31detect user input from the player
- 0:33whenever we're making our Roblox games
- 0:35so an input could be if I'm clicking my
- 0:38mouse in the game uh if I'm pressing W
- 0:42to move forward if I'm just pressing any
- 0:45sort of keys that are on my keyboard
- 0:46right now uh you can actually see that
- 0:48in the output down here it's detecting
- 0:51every time I do any sort of input that
- 0:53is just going to print uh the string
- 0:55input that's because we're able to
- 0:57detect when the player is pressing down
- 0:59on a key uh on whatever device that
- 1:02they're playing on so for me I'm playing
- 1:03on a computer but let's say I was
- 1:05playing on a mobile device then we would
- 1:08probably detect when the player is
- 1:10moving or pressing the jump button uh or
- 1:13just pressing buttons on an Xbox
- 1:15controller or a PS4 controller now that
- 1:17Roblox is on PS4 so things like that and
- 1:19I want to be able to introduce this
- 1:21concept in Roblox studi so that you will
- 1:23know how to detect user input and also
- 1:27creating the best experience for players
- 1:29depending on the device that they are
- 1:30playing on so if that interests you then
- 1:34you should stick around till the end of
- 1:35this video so with that being said let's
- 1:37go straight into implementing all right
- 1:38let's think about this for a minute you
- 1:40can see that with user input service the
- 1:42thing we're going to be talking about in
- 1:43this episode there's so much to uncover
- 1:46with this concept that I'm going to be
- 1:49here forever if I'm going to try and go
- 1:51through every single thing that's inside
- 1:52of this documentation so what I'm going
- 1:54to do in this episode is give you a
- 1:56general introduction to how you can use
- 1:58user input server to get user input and
- 2:02also configure your game depending on
- 2:04what device the user is playing on I'm
- 2:06going to treat this episode as an
- 2:08introduction more than an in-depth guide
- 2:11compared to some of my other episodes
- 2:13and maybe in the future I will dive
- 2:15deeper into some of these Concepts um in
- 2:18specific videos but for the purposes of
- 2:20this episode I'm just going to go over
- 2:21some basic stuff for user input service
- 2:24and hopefully you will be able to
- 2:26experiment with user input service on
- 2:28your own time or stick with me for
- 2:30future videos where I talk more deeply
- 2:32into some of these concepts with user
- 2:34input service so with that being said
- 2:36let's now go and start implementing this
- 2:38in Roblox studio now that we understand
- 2:40it let's add user input into our game
- 2:42there's two important use cases to use
- 2:44user input service at least for the sake
- 2:46of this video where the first one is
- 2:49detecting user inputs so if they're
- 2:51pressing down a button uh while they're
- 2:53playing the game uh and just things like
- 2:55that the Second Use case is detecting
- 2:58what device the player is playing on so
- 2:59that we can give them the best
- 3:01experience depending on what they're
- 3:02playing on cuz obviously when a player
- 3:04is playing on a mobile device the
- 3:06experience is a lot different than
- 3:07playing on a PC so that's something
- 3:10we're going to have to detect in our
- 3:11game using user input service and before
- 3:13we start adding it you might ask does
- 3:15this belong in a script or a local
- 3:17script so user input service is only
- 3:21local sided this cannot be done on the
- 3:23server this can only be done from the
- 3:25player directly so you're going to have
- 3:27to put this in a local script probably
- 3:30somewhere that fits it best like starter
- 3:32character scripts uh so let's hit the
- 3:35plus sign next to starter character
- 3:36scripts and let's insert a local script
- 3:39so let's delete this and first thing we
- 3:41will do is make reference to user input
- 3:43service we're going to say local user
- 3:46input service equals game colon get
- 3:51service user input service so the first
- 3:55part of this video is just detecting
- 3:57user input whenever they press down on
- 3:59any any key this is going to use a
- 4:01function called input began and this is
- 4:03pretty much what it's going to look like
- 4:05so we're going to say user input service
- 4:09do input began colon connect function
- 4:15open and close parentheses enter so this
- 4:18input began event takes in two function
- 4:21parameters the first one is the user
- 4:23input and then the other one is a
- 4:26Boolean that's called game processed
- 4:29event I'm going to go over what this one
- 4:30does in a little bit but for now we're
- 4:32going to focus on the input which is
- 4:34basically an input object made by Roblox
- 4:37themselves that contains information
- 4:39that tell us uh what type of input the
- 4:42user is currently pressing down on when
- 4:45this event fires so if we were to not
- 4:47pay attention to the input and just
- 4:49simply uh do something whenever the user
- 4:52does anything related to user input
- 4:54let's just make a print statement really
- 4:56quickly just to see whether this is
- 4:57working or not so we'll just simply say
- 4:59input and then let's see what this looks
- 5:01like when we play the game so in the
- 5:03game I can literally do anything to make
- 5:05it so that the input began event will
- 5:07fire I can rightclick and it will say
- 5:11input has been printed down here I can
- 5:13move around and it'll constantly print
- 5:15out input because I'm pressing down on
- 5:17multiple keys while I'm moving my
- 5:20character if I jump or just like really
- 5:23press anything on my keyboard then it's
- 5:25going to activate the input began uh
- 5:28event and this basically applies with
- 5:31any input that I do so not only is this
- 5:33going to work with keyboard and mouse
- 5:35but this would also apply to if you're
- 5:36playing on a phone a tablet or even on
- 5:40an Xbox or PS4 just any sort of input
- 5:44will be detected using the input began
- 5:46but this is important to note when we're
- 5:48pressing down on a key and not when
- 5:50we're lifting it back up I'm going to
- 5:51show you how we're going to detect that
- 5:53in a little bit so let's go back to our
- 5:54script and we can see that this is
- 5:56basically being printed anytime we press
- 5:59any input so it doesn't really matter
- 6:01what input it is as long as we're
- 6:03pressing down something but now let's
- 6:05say we wanted to focus on specifically
- 6:07which input we want to uh look out for
- 6:10whenever we're pressing down a key so
- 6:12let's say we want the player to press a
- 6:14specific key then we want it to do
- 6:16something uh once we know that we press
- 6:18something so you know with my uh very
- 6:21weird example from the beginning where I
- 6:23pressed R and that specifically
- 6:25triggered something uh we can do that
- 6:27using this input that was passed in to
- 6:30check whether this input was
- 6:31specifically R so we're going to do that
- 6:33down here by dropping two lines and
- 6:36we're just going to do a simple if
- 6:37statement we're just going to say if
- 6:39input now the thing about input is that
- 6:42this is an input object and it has
- 6:44multiple properties that are layered
- 6:46onto this input object the thing we're
- 6:49most interested in is the key that was
- 6:52pressed so this property is called key
- 6:56code which is an enum value uh which
- 6:59describes the kind of input that is
- 7:01being pressed from the user so this is
- 7:04how we're going to detect whether the
- 7:06input is the one we're looking for it's
- 7:08not just input because input is an
- 7:10object we're looking for the key code
- 7:12property so then we're going to say if
- 7:15this is equal to uh R so we can do it
- 7:18like this as a as a character but the
- 7:20more conventional way of doing this is
- 7:22by using an enum value from key code so
- 7:25you know how key code is an enum value
- 7:27we want this to match a key code enum
- 7:30that exists in roblox's library already
- 7:33so we're going to do that by saying enum
- 7:36dokey code Dot and as you can see
- 7:40there's a whole list of options that we
- 7:42can choose from using this key code enum
- 7:45now keycode is a specific thing for
- 7:47certain keyboards so this will not work
- 7:49for devices such as uh phones tablets
- 7:53and consoles this is specifically for
- 7:55keyboards uh so let's say we want it to
- 7:58be r then we're going to say uh print
- 8:02player has pressed R so this is the
- 8:06syntax we're going to use to figure out
- 8:08whether the player has pressed down the
- 8:10r key using the key code enum from our
- 8:14user input so let's go into the game and
- 8:16try this out all right so over here I'm
- 8:18just spamming uh my keyboard to print
- 8:21input but I'm not pressing R yet uh now
- 8:25when I do press R you can see that in
- 8:27the output it says player has pressed PR
- 8:29R because we made a check to see if the
- 8:31key code is equal to R specifically then
- 8:34we're going to execute whatever is down
- 8:36here and not just any random input that
- 8:39um we set out input began to detect so
- 8:43that pretty much works as expected so I
- 8:45mentioned that input began has two
- 8:47arguments so we have the input and then
- 8:49we have this random Boolean called game
- 8:51processed event what is this so let's
- 8:54first write down what actually happens
- 8:56uh when we do check whether this game
- 8:58process proed event is true or not so
- 9:00let's just simply write if game
- 9:03processed event then print game
- 9:07processed event now let's go into the
- 9:10game so I can demonstrate to you what
- 9:11this does all right so I'm in the game
- 9:13let's say for instance I want to type
- 9:15something in the chat for whatever
- 9:16reason so I'm going to press the chat
- 9:18and then I'm just going to type in uh
- 9:20Rat I don't know just like something
- 9:22completely random obviously if I have a
- 9:24local script that's detecting user input
- 9:27I needed to press down the r a key to be
- 9:30able to press the to be able to type out
- 9:32this message but what if I don't want to
- 9:35detect this uh user input while the
- 9:38while the user is just typing something
- 9:40in the chat that's basically what game
- 9:42processed event is we're seeing whether
- 9:44the player is currently interacting with
- 9:47roblox's GUI system or I believe any GUI
- 9:51in general as a matter of fact I could
- 9:52be wrong about that with certain
- 9:54interactions like this especially with
- 9:56the chat we don't all of a sudden want
- 9:58it to do what it needs to do with this
- 10:00script if let's say the player is
- 10:02chatting something using Roblox GUI
- 10:05that's where we detect with game
- 10:06processed event if the player is
- 10:08currently interacting with roblox's GUI
- 10:10system then we don't want to do the user
- 10:12input checking so that's why in most
- 10:14cases we would just simply return this
- 10:17input began event because if let's say
- 10:19the user is typing something in the chat
- 10:21we don't want to process uh this input
- 10:24began event we just want to Simply
- 10:26return this uh with no issues whatsoever
- 10:28and that's basically what game processed
- 10:30event is I hope that made sense to you
- 10:32all right so we have an event for input
- 10:34began which is basically when the player
- 10:36presses down on a key but now let's try
- 10:39making another event to detect when the
- 10:41player lifts the key back up uh we will
- 10:44do that using an event called input
- 10:46ended so down here the syntax is
- 10:48relatively similarish so we're going to
- 10:51say user input
- 10:53service. input ended colon connect
- 10:57function open parentheses close
- 10:59parentheses input and then game
- 11:02processed event and this will pretty
- 11:04much fire whenever the player lifts a
- 11:07key off of the key or any input in
- 11:09general so we're going to say user Has
- 11:12Lifted the input and so we can go into
- 11:15the game and see this change anytime I
- 11:18press down a key and then lift it back
- 11:19up so I'm going to hold the left Mouse
- 11:21button so I'm going to press the left
- 11:23Mouse button it still says the input is
- 11:26down there but then when I Let Go it
- 11:28says you user Has Lifted the input so
- 11:30this pretty much happens uh whenever we
- 11:33just let go of any sort of keys so I'm
- 11:35currently pressing s if I let go then
- 11:37it's going to say user Has Lifted the
- 11:38input and this can be done for every
- 11:41single input input began and input ended
- 11:44so that's one quick little thing I
- 11:45wanted to introduce there uh to get you
- 11:47familiar with that so over here we
- 11:48detected user input based on the key
- 11:51that they were pressing on the keyboard
- 11:52but obviously there's way more different
- 11:54types of input other than just keys on
- 11:56the keyboard like my mouse or or a
- 11:59Gamepad or mobile things like that uh we
- 12:02can do that using another property of
- 12:05input not called key code but called
- 12:08user input type and this is what it's
- 12:10going to look like so let's detect if
- 12:12the player is pressing the left Mouse
- 12:14button uh we're going to do that by
- 12:16typing if input.
- 12:19userinput type equals and this is going
- 12:22to be another enum value so we're going
- 12:24to say enum do userinput type Dot and
- 12:29there's a whole bunch of options here so
- 12:31Mouse button one is basically our left
- 12:33Mouse button and then there's Mouse
- 12:35button two which is our right Mouse
- 12:37button and then Mouse button 3 which is
- 12:39like the little mouse scroll wheel if we
- 12:41press that down and then there's a bunch
- 12:43of other stuff too that we're not really
- 12:44going to uh worry too much about as of
- 12:47right now so we're going to say mouse
- 12:49button one then print user is pressing
- 12:56the left Mouse button and so if we try
- 12:59this out in game this is how we're going
- 13:00to detect Mouse Clicks in our in our
- 13:03game so I'm going to hit the left Mouse
- 13:04button and it's going to say user is
- 13:06pressing the left Mouse button and this
- 13:08will only work with the left one if I
- 13:10try pressing the right one it's not
- 13:11going to print the left Mouse button or
- 13:14if I even press the middle button it's
- 13:15not going to say left Mouse button Mouse
- 13:18button one is specifically the left uh
- 13:21Mouse button and so that's pretty much
- 13:23how that works we can do the same thing
- 13:25with mouse button 2 Mouse button 3 and
- 13:27we can also do this with with different
- 13:29device inputs as well we can say touch
- 13:33which basically means that the user is
- 13:35on a touch device so like a mobile
- 13:38device like an iPhone or a tablet this
- 13:41is how we can detect that using this and
- 13:43even a gamepad as well so usually it
- 13:45would be Gamepad 1 if we're just
- 13:47detecting player one on like an Xbox or
- 13:49a PS4 this is how we would detect that
- 13:52it's pretty much one way of detecting
- 13:54the type of user input just by using
- 13:56user input type when we're checking the
- 13:58this in our input began event so this
- 14:01was one way of detecting the user input
- 14:03type of whether the user is playing on a
- 14:05phone a tablet a console things like
- 14:08that but there's actually an easier way
- 14:10to do this without doing this if
- 14:11statement check inside of this input
- 14:13began uh event because user input
- 14:16service has these properties that
- 14:18automatically tell us whether the user
- 14:20is playing on a specific device so these
- 14:23properties are usually named after the
- 14:25device that they're playing on so touch
- 14:27enabled is telling us if the player is
- 14:29on a mobile device gam pad enabled is if
- 14:32we're if we're playing on a console and
- 14:33things like that it's pretty simple
- 14:35actually so let's drop two lines up here
- 14:38to make a check whenever the player
- 14:40joins into the game to see what device
- 14:42they're playing on we're just simply
- 14:43going to say if user input
- 14:47service. touch enabled so this one tells
- 14:51us if the user's device has a touch
- 14:54screen so this is usually for mobile
- 14:56phones uh we're going to then say uh
- 14:59print player is playing on a mobile
- 15:03device and uh we can do something cool
- 15:05with this as well to really show us the
- 15:07difference so we're going to say
- 15:09workspace colon wait for child base
- 15:13plate and we're going to put in a wait
- 15:14for child so that it can load in fast
- 15:16enough color equals color 3. from RGB
- 15:21we're probably going to do some blue
- 15:23color hit okay and then let's go into
- 15:25the game and try this out all right so
- 15:27we're in the game and as you can see the
- 15:28base Plate's color has changed to blue
- 15:31because we are playing on a phone if I
- 15:33were to back out of this and then get
- 15:35off of device emulation play on my PC
- 15:38then this change should not happen uh
- 15:41since I'm now playing on a PC so yeah
- 15:43because now that I'm playing on a PC the
- 15:45script is not going to tell me that uh
- 15:47I'm playing on a mobile device in order
- 15:49to change this base Plate's colors so we
- 15:51were able to do that successfully and we
- 15:53can do this with console as well just by
- 15:57simply replacing touch enabled with
- 16:00gamad enabled and uh we can also do this
- 16:03with VR as well if you're playing Roblox
- 16:05VR just by saying VR enabled so these
- 16:10properties can pretty much signify
- 16:12whether the player is playing on a
- 16:14specific kind of device and you can use
- 16:16this property from user input service to
- 16:18do specific things with the player
- 16:21experience like changing guis to fit the
- 16:25player screen better uh or modify GUI
- 16:28screen or modify user controls based on
- 16:30the device that they're playing on and
- 16:32another instance I can think of that
- 16:33this would be very useful for is if
- 16:35you're using tools where the tool will
- 16:37play out differently depending on the
- 16:39device that you're playing on because a
- 16:40lot of the times tools require different
- 16:42controls for different devices that the
- 16:45user is playing on you're not going to
- 16:46be able to press W as and D if you're on
- 16:48a mobile phone and this is especially
- 16:50true for tools if you're trying to press
- 16:52specific keys that you're not able to on
- 16:54a different device so that's something
- 16:56else I wanted to throw in there user
- 16:58input service also allows us to detect
- 17:00when the player is jumping uh using an
- 17:03event called jump request so this is
- 17:06what it's going to look like if we just
- 17:07go down here and then uh say
- 17:10userinput
- 17:12service. JUMP request and this is
- 17:16basically going to fire every single
- 17:18time the player wants to make a request
- 17:20that they're jumping also known as
- 17:21pressing the space bar uh or pressing
- 17:24the jump button or a button whatever
- 17:26device that they're playing on just
- 17:27making any requests that makes the
- 17:30player jump we're going to say
- 17:32connect function open parentheses close
- 17:34parentheses this one has no arguments so
- 17:36we can just hit enter and now we could
- 17:37just print something like player has
- 17:40jumped you might think that this is
- 17:42basically the only thing we need to do
- 17:44but that's actually not correct because
- 17:46let's say we do try playing the game and
- 17:48try to make a jump request uh let's see
- 17:50what happens in the output when we do
- 17:52try and jump so I'm going to hit space
- 17:54bar and down here it said the player has
- 17:57jumped but I only pressed press spacebar
- 17:59one time but for some reason this
- 18:01printed three times and if I try this
- 18:03again I press spacebar it's continuously
- 18:06printing three or four different times
- 18:08maybe even more every time I just press
- 18:11the space bar button this especially
- 18:13happens when I'm holding down the space
- 18:14bar when it's just printing like this
- 18:16many times the reason it's doing that is
- 18:18it's because the event is detecting when
- 18:20a jump request is happening and a jump
- 18:22request can pretty much happen every
- 18:24millisecond that we try and attempt this
- 18:27jump Quest so an easy solution to this
- 18:30is to wrap this in a debounce Boolean
- 18:32variable uh so up here we could just
- 18:35write a very quick uh Boolean by saying
- 18:38local is jumping equals false uh and
- 18:42then down here we can make a check by
- 18:44saying if not is
- 18:47jumping then we will set is jumping
- 18:50equal to true and then we're going to
- 18:52take our print statement and then put it
- 18:53in here uh and then what we'll do is put
- 18:56a task. weight statement over here like
- 18:59maybe about 0.5 seconds and then set is
- 19:02jumping back to false so when the player
- 19:05does decide to jump then we will make
- 19:07the script wait for a little bit before
- 19:10setting is jumping back to false so that
- 19:12we can make the jump request check again
- 19:14and this should pretty much prevent our
- 19:16issue that we had before all right so
- 19:18I'm going to hit jump and it says the
- 19:20player has jumped so if I keep holding
- 19:22it then it's going to print player has
- 19:25jumped whenever my character gets back
- 19:28down on the ground to then print it
- 19:30again in the output so it pretty much
- 19:33now works as expected this is very
- 19:34useful if we're trying to detect when
- 19:36the player is jumping of course and that
- 19:38is pretty much the end of that what if
- 19:39we wanted to detect multiple key presses
- 19:42there's actually a couple ways we can do
- 19:43this but the easiest way I know is by
- 19:46doing it is by using a function inside
- 19:49of input began whenever we press uh a
- 19:52new key uh and this function is called
- 19:55is key down so we can use this function
- 19:58to tell whether this whether the player
- 20:00is currently holding down this key
- 20:02alongside this new key that they just
- 20:04pressed down uh so we can probably do
- 20:06that by modifying this if statement
- 20:07right here uh with our input begin so
- 20:10what if we wanted to hold the keys R and
- 20:13Q at the exact same time we can pretty
- 20:15much do this by first checking whether
- 20:17the player is already holding down the q
- 20:19key and then we can fire this down here
- 20:21when the new input the player is uh
- 20:24pressing down on is R right before this
- 20:26we're going to say if
- 20:29if user input service colon is key down
- 20:35and this takes in a uh key code uh
- 20:39parameter so we're going to say enum
- 20:41dokey code. q and then what we're going
- 20:45to do is put an and here so that we're
- 20:48going to say if the q key is currently
- 20:51being pressed down right now and then
- 20:53our new input is going to be uh R then
- 20:57we're going to print player has pressed
- 20:59R while holding q and so that's pretty
- 21:02much how we're going to detect whether
- 21:04multiple keys are being pressed at the
- 21:05same time so let's hit play and see what
- 21:08happens all right so I'm pressing R and
- 21:11as you can see nothing's being printed
- 21:12right now because I need to hold Q first
- 21:15so let's hold q and then let's press R
- 21:18so now it says player has pressed R
- 21:20while holding Q so that is pretty much
- 21:23how we detect multiple keys at the same
- 21:25time so now that we bring up the idea of
- 21:27pressing multiple keys what if we wanted
- 21:29to do a double tap on a key we'd pretty
- 21:32much do this using a feature called tick
- 21:34which I don't expect you to know about
- 21:35because we never talked about this yet
- 21:37uh but just for the sake of this uh
- 21:39example you can follow what I do but for
- 21:42a basic explanation tick is basically a
- 21:44feature that lets us keep track of time
- 21:46in our script what if let's say we
- 21:48wanted to detect whether a player is
- 21:50double tapping W uh to do some sort of
- 21:53cool functionality with it we can first
- 21:55do that by creating an if statement down
- 21:56here saying if input. keycode equals en.
- 22:03key key code. W then print player
- 22:10has double pressed W now obviously if we
- 22:14do this this is just one input of w not
- 22:17double pressing because we want to have
- 22:19the double press happen during a
- 22:21specific window of time so that it would
- 22:23count as a double press so double press
- 22:25would probably be like if uh if we press
- 22:28W once and then press W twice we want to
- 22:31have it in the span of like 0.5 seconds
- 22:33or something so that we can make it
- 22:34count as a double press and not just a
- 22:37single press uh so up here let's write a
- 22:41tick variable by saying local current
- 22:44tick equals tick open and close
- 22:47parentheses and then down here in our if
- 22:49statement let's say
- 22:51and current tick minus
- 22:56tick is less less than or equal to 0.2
- 23:00let's make it 0.2 in this case and let's
- 23:02also wrap this uh condition in a
- 23:05parenthesis so that we don't get
- 23:06confused uh with it and then down here
- 23:08let's write current tick equals tick
- 23:12open close parentheses so this is pretty
- 23:14much how we would be able to track uh in
- 23:17time uh whether the player is double
- 23:20pressing W or just pressing W singularly
- 23:22if it passes 0.2 seconds in between when
- 23:25we press W oops I made a little tyo here
- 23:27my bad uh so it's tick first and then
- 23:32minus current tick uh my apologies on
- 23:35that let's play the game all right so
- 23:36I'm pressing W and nothing is being
- 23:38printed if I press it again nothing is
- 23:41being printed if I double press it then
- 23:43it's going to say player has double
- 23:44pressed W because we very quickly press
- 23:47W within the span of under 0.2 seconds
- 23:51or exactly at 0.2 seconds so let's press
- 23:54it again nothing's being printed press
- 23:55it again nothing's being printed and
- 23:58it's still not printing so let's rapid
- 24:01tap it and now it says player has double
- 24:03pressed W so it's very quick and
- 24:06obviously we can adjust um this duration
- 24:09by changing this number from 0.2 to
- 24:11maybe 0.5 to make it more lenient but
- 24:13you get the general idea I don't expect
- 24:16you to know about tick until we discuss
- 24:18about it in a whole another video but
- 24:20this is one way of detecting whether a
- 24:23player is double tapping on a key I
- 24:26think that'll pretty much wrap up the
- 24:27introduction to user input service it's
- 24:29a very big feature that Roblox has and I
- 24:32encourage you to go and try some of
- 24:34these other functions and events and uh
- 24:37all sorts of stuff on the API that
- 24:38Roblox has provided for you it's a very
- 24:40big concept to know about because user
- 24:43input is one of the most fundamental
- 24:45things that that scripts can do when
- 24:48making the best experience possible in
- 24:50the games that you're playing if you've
- 24:51made it this far into the video then I
- 24:53encourage you to watch my other videos
- 24:54on my Advanced scripting tutorial
- 24:56playlist or just check out any of my
- 24:57other videos that I have on my channel
- 24:59but with that being said that's pretty
- 25:00much where I'm going to end it if you
- 25:02enjoyed this video then be sure to join
- 25:03my Discord server the link is in the
- 25:04description and I will see you in the
- 25:06next episode take care
About this transcript
This page contains the full transcript of UserInputService - Roblox Advanced Scripting #13 by BrawlDev, generated from the public captions YouTube serves with the video. The transcript has 4,821 words across 640 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.
What you can do with it
Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to choose a caption track available on the video.
Free YouTube transcript tool
YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, caption language selection, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.