About the Tutorial & Course Discussions category

Please do not create a new topic in this category. This category is for discussing tutorials and courses created on the Epic Developer Community and not general discussion. Forum posts should be generated automatically when tutorials and courses are posted in the Learning Library.

  • Use the existing topics about published tutorials and courses from the Epic Developer Community to ask questions and discuss the content instead of starting a new one. This keeps everything for that tutorial or course in one place and makes it easier for everyone in the community to be a part of the conversation, including the author!

  • Respect existing forum rules and guidelines.

  • For general discussion please post here.

You can also access a tutorial or course topic using the discussion button on the tutorial or course, as shown below:

The Epic Developer Community has a place for you to add your own tutorials and join our community of content creators here! Getting started with adding your own tutorials to the Community Learning Library is as easy as clicking New Tutorial!

We look forward to you being a part of the discussions on the Epic Developer Community!

11 Likes

Thanks for your update Sir

6 Likes

The “About the Tutorial & Course Discussions” category is an invaluable resource for learners of all levels. It serves as a platform for individuals to explore diverse topics, seek guidance, and engage in meaningful discussions related to tutorials and courses. This category fosters a supportive learning community where members can share insights, ask questions, and exchange ideas to enhance their understanding of various subjects. The collaborative nature of this category promotes active participation and encourages continuous learning and improvement. It is a commendable initiative that empowers individuals to expand their knowledge and skills in a welcoming and inclusive environment.

1 Like

Thanks for the update.

Hi,
Question 1: Edit/create tutorial interface changed recently, I cannot find how to add videos from youtube now. Do we need to upload the video somewhere? If yes I don’t find where.

I tried to directly write the link as text, doesn’t work and when trying to add video using the + icon, all I get is that, but nothing is shown in the preview:

Question 2: Also I created another tutorial before that, it still doesn’t appear in the tuto list. Are you deciding/scheduling the publication timing or is that a bug?
It’s quite unclear.
(I already have my first tuto validated, published and appearing correctly in the list)

Ok, Question 1 has been fixed, seems it was a bug in the new interface. Good.
About Q2, I just deleted the tuto then recreated it.

1 Like

will this?

1 Like

Thanks for helping us literary before reading this post I’m so confused.

Sir Thanks for sharing this

Thanks for sharing! I created this micro guide for beginners on how to create a FPS just to practice. Hope it helps!

1- Right Click Blueprint - Game Mode Base
- Top Menu - Window - World Settings
Under World Settings select Game Mode Override - Your Game Mode

2- Blueprint - Character to create the players character
- Open It and ADD Camera
- Drawn a Gun with cubes
- All of the elements of the gun add it to a SCENE

3- Under World Settings - Game Mode - Default Pawn Class - The Player that you just created

4- In the content Drawer
- Right Click - Input - Input Action - Call it LeftAndRight
- Right Click - Input - Input Action - Call it UpAndDown
- Right Click - Input - Input Action - Call it MouseMovement
- Right Click - Input - Input Action - Call it Jump

5- Open LeftAndRight
- Value Type - Float

6- Open UpAndDown
- Value Type - Float

7- Open MouseMovement
- Value Type - Vector2D

8- Open Jump
- Value Type - Boolean

9- In the content Drawer
- Right Click - Input - Input Mapping Context

10- Open Input Mapping Context
- Click on the Plus sign under Mappings
- Select LeftAndRight
- Expand LeftAndRight
- Click on the keyboard button and press ‘A’
- Under the ‘A’ under Modifiers select ‘Neglate’
- Next of the LeftAndRight there is a Plus Icon - Click on it
- Click on the keyboard button and press ‘D’
- Click on the Plus sign under Mappings
- Select UpAndDown
- Expand UpAndDown
- Click on the keyboard button and press ‘W’
- Next of the UpAndDown there is a Plus Icon - Click on it
- Click on the keyboard button and press ‘S’
- Under the ‘S’ under Modifiers select ‘Neglate’
- Click on the Plus sign under Mappings
- Select MouseMovement
- Expand MouseMovement
- Next to the keyboard where it says ‘None’ select 'Mouse XY 2D-Axis
- Click on the Plus sign under Mappings
- Select Jump
- Expand Jump
- Click on the keyboard button and press ‘Space Bar’

11- Create a new Actor Blueprint for Bullets
- Add a Cube
- Under Transform select
- Location to 0 0 0
- Rotation to 0 0 0
- Scale to 0.75 0.142 0.139
- Under Material create a material for the bullet color and select it in Materials in the Right Pane Options
- Under Physics enable “Simulate Physics”, “Enable Gravity”, and “Apply Impulse on Damage”
---- EVENT GRAPH ----
- From "Event Begin Play Drag a line to look for “Add Impulse”
- Create a variable on the left pane called Cube if not present
- Drag the Variable Cube as GET and drag the line to ‘Target’ in the Add Impulse
- Right Click to look for a ‘Get Forward Vector’ and connect it to the CUBE
- Right Click on the screen and look for Multiply (*)
- In the top Pin select ‘To Vector’
- In the lower Pin select ‘To Float Single Precision’ and add the value of 80000.0
- From the Get Forward Vector drag a line from ‘Return Value’ to the first yellow pin on the left on the Multiply
- Connect the Second yellow Pin on the right to the “Impulse” in the Add impulse
- Click on the variable ‘Cube’ and look for ‘On Component Hit’ (Cube) on the right pane
- From the White triangle drag a line to look for a Branch
- True goes to ‘Spawn Emitter at Location’ and from there a white line to ‘Destroy Actor’
- Under ‘On Component Hit’ (Cube) right click in the ‘HIT’ and click ‘Split Struct Pin’ to expand and drag a yellow ‘Hit Impact Point’ to 'Location in ‘Spawn Emitter at Location’
- Under ‘On Component Hit’ (Cube) drag a line from ‘Hit Impact Normal’ to look for ‘Rotation from X vector’, and from ‘Rotation from X vector’ to ‘Rotation’ in ‘Spawn Emitter at Location’
- Under ‘On Component Hit’ (Cube) drag a line from ‘Other Component’ to look for ‘Get Collision Object Type’ and from there look for ‘Equal Enum’ and from the equal num in the dropdown select ‘WorldStatic’, and from the red pin connect it to the condition in the Branch
- False goes to another branch
- True goes to ‘Apply Damage’
- In ‘On Component Hit’ (Cube) from blue Other Actor drag the line to ‘Damage Actor’ in the ‘Apply Damage’
- In ‘On Component Hit’ (Cube) from blue Other Actor drag the line to ‘Actor Has Tag’ and type ‘BadGuy’ and the return value connect it to this Branch
- In the ‘Apply Damage’ in the green ‘Base Damage’ put 10.0
- From ‘Apply Damage’ drag a white line ‘Destroy Actor’
- False goes to ‘Delay’ with the duration of 2.0 and Completed goes to ‘Destroy Actor’

12- Open your Player Blueprint
---- VIEWPORT ----
- Add a Camera under the Capsule component
- Under the Camera add the Gun (draw the gun)
- Under the Camera add an ARROW and call it GUN NOZZLE and point it forward where the bullets will spawn
- Create Variable Health and MaxHealth, compile and set the Health as 100 and MaxHealth as 100
- On the right pane look for TAG and type ‘GoodGuy’
---- EVENT GRAPH ----
- Under event Graph - Get Player Controller
- Drag a line from Return Value and look for “Get Enhanced Input Local Player Subsystem” (Pink)
- Drag a line from the Get Enhanced to look for ‘Add Mapping Context’
- Under Add Mapping Context select the created Mapping Context
- Connect the Add Mapping context to “Event Begin Play”
- Right Click and look for the UpAndDown function and expand it
- Right click and look for ‘Add Movement Input’ and join with ‘Triggered’
- Right click and look for ‘Get Actor Forward Vector’ and join to ‘World Direction’
- Connect the green Action Value to Scale Value
- Right Click and look for the LeftAndRight function and expand it
- Right click and look for ‘Add Movement Input’ and join with ‘Triggered’
- Right click and look for ‘Get Actor Right Vector’ and join to ‘World Direction’
- Connect the green Action Value to Scale Value
- Right Click and look for the MouseMovement function and expand it
- Right click and look for ‘Add Controller Yaw Input’ and join with ‘Triggered’
- In the ‘MouseMovement’ in the Blue ‘Action Value’ right click to ‘Split Struct Pin’
- From MouseMovement ‘Action Value X’ to ‘Val’ in Yaw
- Right click and look for ‘Add Controller Pitch Input’ and join with ‘Add Controller Yaw Input’
- From MouseMovement ‘Action Value Y’ to ‘*’ (Multiply) upper pin and lower pin = ‘-1’ to ‘Val’ in Pitch
- Select the Player’s Camera and from the options on the right, select ‘Use Pawn Control Rotation’
- Right Click and look for the Jump function and expand it
- Right click and look for ‘Jump’ with the blue f and join with ‘Started’
- Right click and look for ‘Stop Jumping’ with the blue f and join with ‘Completed’
- Right Click to create a Custom Event and call it RapidFire
- Create a Boolean Variable called ‘LeftButtonIsDown’ and drag a Get in the blueprint
- Connect a Branch to the Custom Event RapidFire, Connect the LeftButtonIsDown to Condition
- In the branch True drag the line to look for ‘SpawnActor Class’ and select class ‘Bullets’
- Drag the ‘Gun Noozle’ and put it as GET
- Right click to look for ‘Get World Location’, ‘Get World Rotation’, and ‘Get World Scale’ and connect it in ‘SpawnActor Bullets’ split Spawn Transform and in the ‘Spawn Transform Location’, ‘Spawn Transform Rotation’, and ‘Spawn Transform Scale’ respectively. Connect the ‘Gun Nozzle’ to the ‘Get World Location’, ‘Get World Rotation’, and ‘Get World Scale’ in the blue Target.
- From the ‘SpawnActor Bullets’ drag a white line to look for Delay and set it to 0.05, and from Delay drag the white line to ‘RapidFire’ to loop again from the custom event
- Right Click to look for ‘Left Mouse Button’
- From the LeftButtonIsDown Boolean variable drag two (2) SET
- Connect one with Pressed and click on the check left button is down to make it True, and from that SET drag a white line to look for RapdiFire to loop again while the left button is being pressed.
- Connect the other one to the ‘Released’ and leave it like that.

13- Create the GUI
- Right Click on the Content Drawer and select User Interface - Widget Blueprint
- Add a Progress bar and add it as a Variable and call it ‘Player Health’, compile it

14- Connect Player to ViewUI GUI
- From the ‘Add Mapping Context’ from the right size drag a white line to look for ‘Create Widget’ and in the class select the Widget
- In the purple Class look for the created GUI
- Create the Variable View UI and where you select the Boolean or float, look for the name of the Widget you created, and drag a SET in the blueprint
- Form the ‘Create View UI Widget’ connect the white line to the SET and the blue Return Value to the SET
- From the SET on the right drag a white line to look for ‘Add to Viewport’ and also the blue line to Target
- From the ‘Add to ViewPort’ drag a white line and look for Sequence
- From Sequence drag a white line to look for Set Percentage
- Drag the View UI to GET, and from the GET drag a line to look for the ‘Player Health’ and drag a line to look for ‘Set Percentage’
- Drag the Health and MaxHealth GET and connect it to a ‘/’ and connect it to ‘In Percent’ in the Set Percent
- Drag a white line from Set Percent to look for ‘Bind Event on Take Any Damage’ and look also for custom ‘OnTakeAnyDamage Event’ !!!
- Connect ‘Bind Event on Take Any Damage’ from the red Event to ‘OnTakeAnyDamage Custom Event’
- Drag a SET Health and connect it to the ‘OnTakeAnyDamage Event’
- Create a Minus ‘-’ and connect the upper pin to the Health GET variable, Lower left pin to the Damage in the ‘OnTakeAnyDamage Event’, and Upper right pin to the left SET Health. Connect the ‘Damage’ from the ‘OnTakeAnyDamage Custom Event’ to the minus ‘-’ lower pin
- From SET Health drag a white line to look for Set Percentage
- Drag the View UI to GET, and from the GET drag a line to look for the ‘Player Health’ and connect it to the Target in ‘Set Percentage’
- Drag the Health and MaxHealth GET and connect it to a ‘/’ and connect it to ‘In Percent’ in the Set Percent
- Create a GUI for the Dead Player
- Drag a white line from the Set Percent to a Branch
-Drag a GET Health and right click a ‘<=’ to connect it to the GET Health
- Connect the red pin to the Condition on the branch
- In the branch TRUE drag a white line to look for ‘Open Level By Object Reference’ and select the Dead GUI

15- In the GAME MODE BASE
- Create the ViewUI variable
- From ‘Event BeginPlay’ drag a white line to look for ‘Create View UI Widget’ and in the purple class select the ViewUI created
- Drag the ViewUI variable SET and Connect it to the ‘Create View UI Widget’ in the white line and blue return variable
- From the ViewUI variable SET and Connect it to the ‘Add to ViewPort’

16- Create a new Actor Blueprint for EnemyBullets
- Add a Cube
- Under Transform select
- Location to 0 0 0
- Rotation to 0 0 0
- Scale to 0.75 0.142 0.139
- Under Material create a material for the bullet color and select it in Materials in the Right Pane Options
- Under Physics enable “Simulate Physics”, “Enable Gravity”, and “Apply Impulse on Damage”
---- EVENT GRAPH ----
- From “Event BeginPlay” Drag a line to look for “Add Impulse”
- Create a variable on the left pane called Cube if not present
- Drag the Variable Cube as GET and drag the line to ‘Target’ in the Add Impulse
- Right Click to look for a ‘Get Forward Vector’ and connect it to the CUBE
- Right Click on the screen and look for Multiply (*)
- In the top Pin select ‘To Vector’
- In the lower Pin select ‘To Float Single Precision’ and add the value of 1000000.0
- From the Get Forward Vector drag a line from ‘Return Value’ to the first yellow pin on the left on the Multiply
- Connect the Second yellow Pin on the right to the “Impulse” in the Add impulse
- Right click and look for ‘On Component Hit’ (Cube)
- From the White triangle drag a line to look for a Branch
- True goes to ‘Spawn Emitter at Location’ and from there a white line to ‘Destroy Actor’
- Under ‘On Component Hit’ (Cube) expand and drag a yellow ‘Hit Impact Point’ to 'Location in ‘Spawn Emitter at Location’
- Under ‘On Component Hit’ (Cube) drag a line from ‘Hit Impact Normal’ to look for ‘Rotation from X vector’, and from ‘Rotation from X vector’ to ‘Rotation’ in ‘Spawn Emitter at Location’
- Under ‘On Component Hit’ (Cube) drag a line from ‘Other Component’ to look for ‘Get Collision Object Type’ and from there look for ‘Equal Enum’ and from the equal num in the dropdown select ‘WorldStatic’, and from the red pin connect it to the condition in the Branch
- False goes to another branch
- True goes to ‘Apply Damage’
- In ‘On Component Hit’ (Cube) from blue Other Actor drag the line to ‘Damage Actor’ in the ‘Apply Damage’
- In ‘On Component Hit’ (Cube) from blue Other Actor drag the line to ‘Actor Has Tag’ and type ‘GoodGuy’ and the return value connect it to this Branch
- In the ‘Apply Damage’ in the green ‘Base Damage’ put 3.0
- From ‘Apply Damage’ drag a ‘Spawn Emitter at Location’ and connect with 'On Component Hit (cube) ‘Hit Location’ to Location in Spawn Emitter at Location
- Drag a white line from ‘Spawn Emitter at Location’ to ‘Destroy Actor’
- False goes to ‘Delay’ with the duration of 2.0 and Completed goes to ‘Destroy Actor’

17- Create your ENEMY Blueprint (Character)
---- VIEWPORT ----
- Inside the Capsule create the enemy as a Cilinder
- Inside the Capsule ADD a Scene and put it in the head of the enemy and call it EnemyScene
- Create a Gun next to the Cilinder but Inside the Cilinder
- Inside the gun add a GunArrow
- Create a Float variable called Health, compile and set it to 100
- Create a Float variable called Damage, compile and set it to 5
- Create a Boolean variable called isDead, compile it.
- Create a Boolean variable called canShoot, compile it.
- Create a Float variable called DistanceToPlayer, compile it
---- EVENT GRAPH ----
- On the right pane look for TAG and type ‘BadGuy’
– ENEMY’S LIFE –
- Right Click to look for ‘Event AnyDamage’
- Drag SET and GET Health and connect the GET Health to ‘-’ setting it up 10.0, and from the ‘-’ right pin to the health SET green pin
- From the SET Health on the right drag a white line to a ‘Print String’ and from the right green pin in SET Health to the pink pin in the Print String
- From the Print String drag a white line to look for a Branch
- Drag a new GET Health and right click to add a ‘<=’ and set it to 0.0, and connect them to the Condition in the branch
- From the TRUE, connect it to a isDead SET Boolean and click on the checkbox to make it true
- Connect the isDead SET Boolean with the ‘Destroy Actor’
– ENEMY LOOKING AT YOU –
- Create Custom Event called ‘EnemyLookingAtYou’
- Drag a white line to look for ‘Set Actor Rotation’
- Right click to look for ‘Find Look at Rotation’ and connect from return value to ‘New Rotation’ in ‘Set Actor Rotation’
- Right click to look for ‘Get Actor Location’ and connect it to ‘Start’ in the ‘Find Look at Rotation’
- Right click to look for ‘Get Player Pawn’ and connect it in the blue pin to look for ‘Get Actor Location’ in the Target pin, and from the Return Value to the ‘Target’ in the ‘Find Look at Rotation’
- Connect ‘Set Actor Rotation’ to ‘Set World Rotation’
- Drag the GET GunArrow and connect it to the ‘Target’ in the ‘Set World Rotation’
- Right click to look for ‘Find Look at Rotation’ and connect from return value to ‘New Rotation’ in ‘Set World Rotation’
- Right click to look for ‘Get Player Pawn’ and connect it in the blue pin to look for ‘Get Actor Location’ in the Target pin, and from the Return Value to the ‘Target’ in the ‘Find Look at Rotation’
- Drag the GET GunArrow and Right click to look for ‘Get World Location’ and connect it to ‘Start’ in the ‘Find Look at Rotation’
– ENEMY SHOOT AT YOU –
- Create a custom event called ‘ShootPlayer1’
- Drag a white line and look for a Branch and also Drag a GET isDead Boolean Variable and connect it to the condition in the branch
- From the FALSE drag a white line and look for ‘SpawnActor EnemyBullets’
- Drag a SET GunArrow and connect it to ‘Get World Transform’
- From ‘Get World Transform’ Split the return and then connect ‘Return Value Location’, ‘Return Value Rotation’, and ‘Return Value Scale’ to the ‘Spawn Transform Location’, ‘Spawn Transform Rotation’ and ‘Spawn Transform Scale’ respectively
- From ‘SpawnActor EnemyBullets’ on the right drag a white line to look for delay and add 0.5 for delay, and then right click from there to ‘ShootPlayer1’
- From the ‘ShootPlayer1’ drag a white line to look for a branch, in the condition drag the Health variable and connect it to ‘<=’ set it to 0 and connect it in the condition of the branch
- For the TRUE
- Drag a Delay and set it to 2.0 and from there drag a white line to look for a branch
- From the branch drag the isDead Bool Variable and connect it to the condition
- From the TRUE branch drag a white line to look for ‘Destroy Actor’
- For the FALSE
- Drag a canShoot bool variable SET and then connect it to a Delay and set it to 1.0 and from the delay again a canShoot bool variable SET this tome with the checkbox on
– ENEMY AND YOU LOCATION –
- Create a Custom Event called ‘Track’
- Drag a ‘DistanceToPlayer’ SET and connect it to the custom event ‘Track’
- Right click and look for ‘Distance2D Vector’ and connect it in the right pin to SET DistanceToPlayer
- Right click and look for ‘Get Actor Location’ and connect it to the V1 for the Distance2D Vector
- Right click and look for ‘Get Player Pawn’ to then Right click and look for ‘Get Actor Location’ and connect it to the V2 for the Distance2D Vector and also from ‘Get Player Pawn’ to the ‘Get Actor Location’
- Drag a white line from ‘DistanceToPlayer’ to look for a ‘Draw Debug String’
- Drag the EnemyScene GET and right click to connect to ‘Get World Location’ and the ‘Get World Location’ connect it to ‘Draw Debug String’
- Right click and look for ‘Format Text’ and inside the Format type ‘Distance: {DisVar}’ to create the variable in the Format Text and connect the Result pink pin to the Text in the ‘Draw Debug String’
- Connect the DisVar from the Format Text to the SET ‘DistanceToPlayer’ right green pin
- Connect the SET ‘DistanceToPlayer’ white line to the ‘Draw Debug String’
- Take a note of the distance because you have to modify it in the “Enemy’s Behaviour” otherwise set it to 1000.0
- Connect ‘Event BeginPlay’ to the custom event ‘Track’
– ENEMY’S BEHAVIOUR –
- From ‘Event Tick’ drag a white line and look for the custom event ‘Track’
- Form the Track custom event drag a white line to look for a branch
- Drag the GET ‘DistanceToPlayer’ and connect it to ‘<’ and set it to a desired distance from the Track custom event that we did
- Connect the red pin to the Branch in the Condition
- From the Branch from the TRUE drag a white line and look for Custom Event called ‘EnemyLookingAtYou’
- From the Custom Event called ‘EnemyLookingAtYou’ drag a white line and look for ‘Do Once’ and from there call the custom event ‘ShootPlayer1’