title
Unity 3D Tutorial - Beat Em Up Fight Game
description
Learn how to use Unity to create a 3D Beat Em Up Fight Game. This tutorial covers everything you need to know to make a basic Beat Em Up game. You are even provided the 3D assets!
💻Assets: https://github.com/AwesomeTuts/3d-beat-em-up-game-assets
⭐️Course Contents ⭐️
⌨️ (0:00) Intro
⌨️ (3:47) Importing Assets
⌨️ (7:49) Configuring Our Player
⌨️ (12:34) Creating Player Animations
⌨️ (28:32) Player Movement Script
⌨️ (48:08) Character Animation Script
⌨️ (1:07:00) Player Attack Script
⌨️ (1:30:18) Configuring Our Enemies
⌨️ (1:49:52) Enemy Movement Script
⌨️ (2:19:58) Creating Player Attack Points For Detecting And Dealing Damage
⌨️ (2:34:34) Character Animation Delegate Script
⌨️ (3:04:51) Creating The Health Script
⌨️ (3:11:37) Knocking Down Enemy With Combos
⌨️ (3:26:02) Adding Sound FX In The Game
⌨️ (3:44:59) Camera Shake FX
⌨️ (3:57:31) Enemy Attack Points And Dealing Damage To Player
⌨️ (4:14:18) Enemy Manager Script
⌨️ (4:20:03) Displaying Health Stats With UI
Tutorial created by Awesome Tuts. Check out Awesome Tuts Youtube channel: https://www.youtube.com/channel/UC5c-DuzPdH9iaWYdI0v0uzw
Help Osarion To Bring His Game To Life
https://www.kickstarter.com/projects/osarion/unsung-warriors
Check Out The 3D Beat Em Up Unity Template
https://assetstore.unity.com/packages/templates/systems/beat-em-up-game-template-3d-98013
The creator of the assets is Osarion and these are the assets from his beam em up unity template. Please NOTE that these assets can be used only for EDUCATIONAL purposes to follow this tutorial, you can't use them to create a commercial game or share the assets with others.
--
Learn to code for free and get a developer job: https://www.freecodecamp.org
Read hundreds of articles on programming: https://medium.freecodecamp.org
detail
{'title': 'Unity 3D Tutorial - Beat Em Up Fight Game', 'heatmap': [{'end': 658.47, 'start': 481.853, 'weight': 0.837}, {'end': 988.311, 'start': 820.037, 'weight': 0.725}, {'end': 1803.405, 'start': 1473.399, 'weight': 0.732}, {'end': 2297.958, 'start': 1961.208, 'weight': 1}, {'end': 4755.871, 'start': 4585.198, 'weight': 0.722}, {'end': 8203.781, 'start': 8031.911, 'weight': 0.73}, {'end': 9181.195, 'start': 9013.965, 'weight': 0.764}, {'end': 10659.83, 'start': 10491.897, 'weight': 0.889}], 'summary': "Learn to create a 3d beat em up game using oserion's assets with enemy attacks, knockdown effects, camera shake, sound effects, spawning mechanics, combo moves, player animation, prefab workflow, player movement, game development, animation transitions, combo state implementation, enemy creation, enemy attacks, collision detection, game mechanics, character sound effects, shake camera script, and enhancing game dynamics in unity, resulting in an engaging 2d platformer game with detailed techniques and code implementation.", 'chapters': [{'end': 218.349, 'segs': [{'end': 63.506, 'src': 'embed', 'start': 0.729, 'weight': 0, 'content': [{'end': 5.631, 'text': 'What is up, guys Fahir here with another cool 3D game tutorial,', 'start': 0.729, 'duration': 4.902}, {'end': 17.597, 'text': 'and this time it is a 3D beat em up game where we are going to learn how to create combos with punches and kicks and how can we combine them together to attack our enemies and defeat them.', 'start': 5.631, 'duration': 11.966}, {'end': 25.981, 'text': 'so a lot of cool stuff is gonna happen in this game, and before I proceed to show you the game, I want to give a big shout out to Oserion,', 'start': 17.597, 'duration': 8.384}, {'end': 28.882, 'text': 'the developer, who gave us these assets,', 'start': 25.981, 'duration': 2.901}, {'end': 35.024, 'text': 'So that I can create this tutorial for you and I can provide this assets to you to use them for this tutorial.', 'start': 29.162, 'duration': 5.862}, {'end': 35.944, 'text': 'Now pay attention.', 'start': 35.264, 'duration': 0.68}, {'end': 37.925, 'text': 'This is for educational purposes only.', 'start': 35.984, 'duration': 1.941}, {'end': 39.885, 'text': 'I will put that in the description.', 'start': 37.945, 'duration': 1.94}, {'end': 44.507, 'text': 'I will put that also in a text file in the asset zip file.', 'start': 39.945, 'duration': 4.562}, {'end': 50.212, 'text': "Now you can also check the developer's website or actually this asset, which is on the asset store.", 'start': 44.747, 'duration': 5.465}, {'end': 51.953, 'text': 'I will put a link in the description below.', 'start': 50.232, 'duration': 1.721}, {'end': 55.676, 'text': "If you're feeling generous enough to support the developer, you can get this asset.", 'start': 52.253, 'duration': 3.423}, {'end': 61.081, 'text': 'You will learn a lot of cool features because there are a lot more features in his asset that I did not implement.', 'start': 55.876, 'duration': 5.205}, {'end': 63.506, 'text': 'And you can learn from that.', 'start': 62.225, 'duration': 1.281}], 'summary': '3d beat em up game tutorial with combos, punches, and kicks. assets provided for educational purposes.', 'duration': 62.777, 'max_score': 0.729, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs729.jpg'}, {'end': 155.145, 'src': 'embed', 'start': 83.644, 'weight': 1, 'content': [{'end': 86.007, 'text': 'so let us help this developer bring this game to life.', 'start': 83.644, 'duration': 2.363}, {'end': 86.948, 'text': 'this is a really cool game.', 'start': 86.007, 'duration': 0.941}, {'end': 89.05, 'text': 'you can click the preview to see the game.', 'start': 86.948, 'duration': 2.102}, {'end': 95.657, 'text': "i will put the link in the description below and if you scroll down, you have a tier where, if you don't donate,", 'start': 89.05, 'duration': 6.607}, {'end': 98.2, 'text': 'you can put your name inside of the game.', 'start': 95.657, 'duration': 2.543}, {'end': 103.786, 'text': 'now, how cool is that to have your name in a really, really cool game now just hit the play button here.', 'start': 98.2, 'duration': 5.586}, {'end': 104.327, 'text': 'preview the game.', 'start': 103.786, 'duration': 0.541}, {'end': 106.809, 'text': "There's also a demo available for you to test it out.", 'start': 104.347, 'duration': 2.462}, {'end': 111.393, 'text': "So, if you're feeling generous, let us help this developer to bring this game to life,", 'start': 107.169, 'duration': 4.224}, {'end': 117.299, 'text': 'because he was really generous for us by providing these assets for us to learn.', 'start': 111.393, 'duration': 5.906}, {'end': 122.083, 'text': "so now i am going to preview the game and let's see what we are going to learn.", 'start': 117.859, 'duration': 4.224}, {'end': 126.628, 'text': "so i'm going to hit the play button and the enemies are going to start coming from the right side.", 'start': 122.083, 'duration': 4.545}, {'end': 127.749, 'text': 'we can chain combos.', 'start': 126.628, 'duration': 1.121}, {'end': 128.389, 'text': 'we have punches.', 'start': 127.749, 'duration': 0.64}, {'end': 130.852, 'text': 'let me just lower the volume for the bg music.', 'start': 128.389, 'duration': 2.463}, {'end': 132.714, 'text': 'we have punches and we have kicks.', 'start': 130.852, 'duration': 1.862}, {'end': 137.838, 'text': 'pay attention, the enemy now is going to attack me and he is going to lower my health.', 'start': 132.714, 'duration': 5.124}, {'end': 139.779, 'text': 'pay attention to the top left corner.', 'start': 137.838, 'duration': 1.941}, {'end': 144.301, 'text': 'now i can attack the enemy and i will be able to knock him down as well, but not every time.', 'start': 139.779, 'duration': 4.522}, {'end': 145.481, 'text': 'i have randomized that.', 'start': 144.301, 'duration': 1.18}, {'end': 146.402, 'text': 'we will see in the code.', 'start': 145.481, 'duration': 0.921}, {'end': 153.224, 'text': "now, pay attention, i'm gonna attack him and i knocked him down and now he fell down and you saw the camera shake effect.", 'start': 146.402, 'duration': 6.822}, {'end': 155.145, 'text': "so now i'm going to kick him, but nothing happened.", 'start': 153.224, 'duration': 1.921}], 'summary': 'Help the developer bring the game to life with demo and donation options.', 'duration': 71.501, 'max_score': 83.644, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs83644.jpg'}, {'end': 218.349, 'src': 'embed', 'start': 173.295, 'weight': 2, 'content': [{'end': 178.979, 'text': 'You see that cool effect and we also hear a camera or actually when he falls on the ground, that sound.', 'start': 173.295, 'duration': 5.684}, {'end': 183.703, 'text': 'And when I kill him, a new enemy will start spawning.', 'start': 179.34, 'duration': 4.363}, {'end': 186.144, 'text': 'So now I think he is almost ready to die.', 'start': 183.743, 'duration': 2.401}, {'end': 187.765, 'text': 'And yeah, he died.', 'start': 186.705, 'duration': 1.06}, {'end': 189.166, 'text': 'So you see the enemy died.', 'start': 187.865, 'duration': 1.301}, {'end': 189.947, 'text': 'He fell down now.', 'start': 189.246, 'duration': 0.701}, {'end': 193.109, 'text': "He's going to go away and another enemy is going to spawn and come here.", 'start': 190.007, 'duration': 3.102}, {'end': 195.27, 'text': 'And as you can see, I have these combos.', 'start': 193.509, 'duration': 1.761}, {'end': 197.632, 'text': 'So I have punch, punch, punch.', 'start': 195.29, 'duration': 2.342}, {'end': 199.453, 'text': 'So I have three combos, punch, punch, punch.', 'start': 197.652, 'duration': 1.801}, {'end': 200.994, 'text': 'I have punch, kick, kick.', 'start': 199.753, 'duration': 1.241}, {'end': 210.045, 'text': 'And I have punch, punch, kick, kick, you see? And we are going to see how are we going to create all of these effects.', 'start': 202, 'duration': 8.045}, {'end': 214.967, 'text': "So everything here that you just saw, we're going to see how are we going to create that.", 'start': 210.085, 'duration': 4.882}, {'end': 216.348, 'text': 'And this is a really cool game.', 'start': 215.227, 'duration': 1.121}, {'end': 218.349, 'text': "We're going to learn a lot of cool stuff.", 'start': 216.368, 'duration': 1.981}], 'summary': 'Gaming demo featuring enemy spawn, combos, and effects. exciting game with learning opportunities.', 'duration': 45.054, 'max_score': 173.295, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs173295.jpg'}], 'start': 0.729, 'title': 'Creating 3d beat em up and fighting games', 'summary': "Covers creating a 3d beat em up game tutorial using oserion's assets, with a link to the developer's website and kickstarter for support, and demonstrates the creation of a fighting game with enemy attacks, knockdown effects, camera shake, sound effects, spawning mechanics, and combo moves.", 'chapters': [{'end': 122.083, 'start': 0.729, 'title': '3d beat em up game tutorial', 'summary': "Discusses creating a 3d beat em up game tutorial, featuring combos with punches and kicks, utilizing assets from oserion for educational purposes, with a link to the developer's website and kickstarter for support.", 'duration': 121.354, 'highlights': ['The tutorial covers creating a 3D beat em up game with combos using punches and kicks. The chapter discusses learning how to create combos with punches and kicks to attack enemies in the 3D beat em up game.', "Assets from Oserion are utilized for educational purposes, with a mention of the developer's website and asset store link for further exploration. The tutorial acknowledges using assets from Oserion for educational purposes and provides a link to the developer's website and asset store for further exploration.", "Support for the developer is encouraged through the mention of the developer's Kickstarter campaign and the opportunity to have one's name inside the game. The chapter encourages support for the developer's Kickstarter campaign and offers the opportunity to have one's name inside the game as a form of support."]}, {'end': 218.349, 'start': 122.083, 'title': 'Creating a fighting game', 'summary': 'Demonstrates the creation of a fighting game, showcasing the implementation of enemy attacks, knockdown effects, camera shake, sound effects, spawning mechanics, and combo moves.', 'duration': 96.266, 'highlights': ['The chapter demonstrates the implementation of enemy attacks, knockdown effects, camera shake, sound effects, spawning mechanics, and combo moves in the fighting game.', 'The game features combos like punch, punch, punch and punch, kick, kick, as well as the implementation of various effects including knockdown, camera shake, and spawning mechanics.', 'The demonstration includes the implementation of enemy AI, with enemies chasing the player and initiating attacks, along with the spawning of new enemies upon defeating the current one.', 'The chapter also emphasizes the randomization of knockdown effects and provides insights into the code governing this aspect of the game.', 'The narrator mentions the importance of learning a variety of cool techniques and concepts while creating the game, indicating the educational value of the content.']}], 'duration': 217.62, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs729.jpg', 'highlights': ['The tutorial covers creating a 3D beat em up game with combos using punches and kicks.', 'The chapter demonstrates the implementation of enemy attacks, knockdown effects, camera shake, sound effects, spawning mechanics, and combo moves in the fighting game.', 'The game features combos like punch, punch, punch and punch, kick, kick, as well as the implementation of various effects including knockdown, camera shake, and spawning mechanics.', 'The demonstration includes the implementation of enemy AI, with enemies chasing the player and initiating attacks, along with the spawning of new enemies upon defeating the current one.', 'The chapter discusses learning how to create combos with punches and kicks to attack enemies in the 3D beat em up game.', "The chapter encourages support for the developer's Kickstarter campaign and offers the opportunity to have one's name inside the game as a form of support.", "Assets from Oserion are utilized for educational purposes, with a mention of the developer's website and asset store link for further exploration.", "The tutorial acknowledges using assets from Oserion for educational purposes and provides a link to the developer's website and asset store for further exploration.", 'The chapter also emphasizes the randomization of knockdown effects and provides insights into the code governing this aspect of the game.', 'The narrator mentions the importance of learning a variety of cool techniques and concepts while creating the game, indicating the educational value of the content.']}, {'end': 1720.594, 'segs': [{'end': 301.651, 'src': 'embed', 'start': 244.29, 'weight': 0, 'content': [{'end': 248.814, 'text': 'enter your email address and you will receive a link where you will be able to download these assets.', 'start': 244.29, 'duration': 4.524}, {'end': 255.197, 'text': 'And not only these assets, but every asset for all tutorials that I have on my channel and for all future tutorials.', 'start': 248.854, 'duration': 6.343}, {'end': 260.62, 'text': "So it's really important that you keep that link along with your book market or whatever you want to do.", 'start': 255.237, 'duration': 5.383}, {'end': 266.543, 'text': 'Now, inside of these assets, as you can see, we have the models, prefabs, shaders, simply select all of them.', 'start': 261.1, 'duration': 5.443}, {'end': 273.084, 'text': 'and drag and drop them right here in Unity and simply release the button and Unity will start importing them.', 'start': 266.983, 'duration': 6.101}, {'end': 280.846, 'text': 'Now. of course, sometimes it does not start right away, but when you see this plus button, as you saw it now, when you release the button,', 'start': 273.124, 'duration': 7.722}, {'end': 283.106, 'text': 'you will be able to import the asset.', 'start': 280.846, 'duration': 2.26}, {'end': 285.667, 'text': 'Sometimes it plays with me like this, but this is not important.', 'start': 283.146, 'duration': 2.521}, {'end': 288.508, 'text': 'Simply drag and drop it and the import will start.', 'start': 285.687, 'duration': 2.821}, {'end': 295.069, 'text': 'What is important for you to know? that you can only use these assets for educational purposes.', 'start': 288.668, 'duration': 6.401}, {'end': 297.39, 'text': 'You can only follow this tutorial with these assets.', 'start': 295.109, 'duration': 2.281}, {'end': 301.651, 'text': 'You cannot create your games and upload them online with these assets.', 'start': 297.41, 'duration': 4.241}], 'summary': 'Receive link for assets; use for tutorials only; not for online games.', 'duration': 57.361, 'max_score': 244.29, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs244290.jpg'}, {'end': 351.428, 'src': 'embed', 'start': 324.383, 'weight': 3, 'content': [{'end': 328.527, 'text': 'I have already saved these environment and level colliders.', 'start': 324.383, 'duration': 4.144}, {'end': 330.609, 'text': 'Now this is going to be our level.', 'start': 328.647, 'duration': 1.962}, {'end': 333.151, 'text': "So I'm going to drag and drop this environment right here.", 'start': 330.629, 'duration': 2.522}, {'end': 335.153, 'text': 'And this is that environment.', 'start': 333.272, 'duration': 1.881}, {'end': 336.435, 'text': 'This is our level.', 'start': 335.193, 'duration': 1.242}, {'end': 343.221, 'text': "Now, I'm also going to select the main camera here because if I go in the game tab, this is what we see with the main camera.", 'start': 336.935, 'duration': 6.286}, {'end': 351.428, 'text': "I'm going to reposition it so X is going to be 6, 2.5 for the Y and 4.42 for the Z.", 'start': 343.721, 'duration': 7.707}], 'summary': 'Environment and level colliders saved, main camera repositioned to x: 6, y: 2.5, z: 4.42', 'duration': 27.045, 'max_score': 324.383, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs324383.jpg'}, {'end': 455.414, 'src': 'embed', 'start': 426.891, 'weight': 5, 'content': [{'end': 434.216, 'text': "so what i'm gonna do is simply add these level colliders, as you can see, which will not allow the player, and i've, as you can assume,", 'start': 426.891, 'duration': 7.325}, {'end': 436.518, 'text': 'i already created this and prepared it.', 'start': 434.216, 'duration': 2.302}, {'end': 442.483, 'text': 'so it will not allow the player to go outside of here, as you can see, outside of the bounds here.', 'start': 436.518, 'duration': 5.965}, {'end': 448.528, 'text': 'so he will be able to go to towards or to here and not go outside and here.', 'start': 442.483, 'duration': 6.045}, {'end': 455.414, 'text': "he will be able to go well somewhere to here and he will not go outside of the camera's view.", 'start': 448.528, 'duration': 6.886}], 'summary': 'Adding level colliders to restrict player movement within certain bounds.', 'duration': 28.523, 'max_score': 426.891, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs426891.jpg'}, {'end': 658.47, 'src': 'heatmap', 'start': 481.853, 'weight': 0.837, 'content': [{'end': 493.264, 'text': 'So X is gonna be number nine, Y is gonna be zero, actually zero and the Z is gonna be negative 0.81 to put the player somewhere around here.', 'start': 481.853, 'duration': 11.411}, {'end': 495.466, 'text': 'now, this is our player, as you can see.', 'start': 493.664, 'duration': 1.802}, {'end': 497.948, 'text': 'so let me just go into the game tab.', 'start': 495.466, 'duration': 2.482}, {'end': 501.211, 'text': 'voila, this is our player and he is a 3d model, as you can see.', 'start': 497.948, 'duration': 3.263}, {'end': 504.234, 'text': "i'm going to change this from player rig to player child.", 'start': 501.211, 'duration': 3.023}, {'end': 506.336, 'text': 'you will see in a moment why.', 'start': 504.234, 'duration': 2.102}, {'end': 516.546, 'text': "because we're going to right click, create an empty game object and let me just copy the component values and I'm going to paste them.", 'start': 506.336, 'duration': 10.21}, {'end': 518.386, 'text': 'So paste component values, voila.', 'start': 516.606, 'duration': 1.78}, {'end': 520.269, 'text': 'And this is going to be our player.', 'start': 518.688, 'duration': 1.581}, {'end': 529.134, 'text': 'So player like this and take the child and put it as a child of the player game object, which is an empty game object.', 'start': 520.688, 'duration': 8.446}, {'end': 530.535, 'text': 'Now we will start editing that.', 'start': 529.175, 'duration': 1.36}, {'end': 534.178, 'text': "but don't worry, before we actually do the editing.", 'start': 530.535, 'duration': 3.643}, {'end': 541.423, 'text': "what we are going to do is we're going to click on this drop down list for the player child and select this character, this right here", 'start': 534.178, 'duration': 7.245}, {'end': 543.264, 'text': 'We need to add a material for him.', 'start': 541.463, 'duration': 1.801}, {'end': 546.367, 'text': 'So go back in the player folder and here we have textures.', 'start': 543.824, 'duration': 2.543}, {'end': 549.65, 'text': 'And here you see we have the matte cap skin.', 'start': 547.088, 'duration': 2.562}, {'end': 550.792, 'text': 'We have the player material.', 'start': 549.69, 'duration': 1.102}, {'end': 551.472, 'text': 'Here it is.', 'start': 550.872, 'duration': 0.6}, {'end': 553.154, 'text': 'We also have the player AO.', 'start': 551.833, 'duration': 1.321}, {'end': 556.678, 'text': "These are the materials that you're going to attach on the player.", 'start': 554.515, 'duration': 2.163}, {'end': 559.24, 'text': 'So simply drag and drop that and attach it on the player.', 'start': 556.698, 'duration': 2.542}, {'end': 561.643, 'text': 'Now this is not how I want the player to be.', 'start': 559.32, 'duration': 2.323}, {'end': 570.646, 'text': "Instead We're going to go into the shaders and we talked about 3D or materials and how to make our 3D models look good.", 'start': 561.743, 'duration': 8.903}, {'end': 573.247, 'text': 'I have that in the first person shooter tutorial.', 'start': 571.166, 'duration': 2.081}, {'end': 577.388, 'text': 'I have that in the 3D fight game tutorial as well.', 'start': 573.347, 'duration': 4.041}, {'end': 580.589, 'text': 'So everything is the same and I encourage you to practice.', 'start': 577.588, 'duration': 3.001}, {'end': 582.069, 'text': 'So play with the shaders.', 'start': 580.749, 'duration': 1.32}, {'end': 585.67, 'text': 'Now of course here we have imported some of our own shaders as you can see here.', 'start': 582.089, 'duration': 3.581}, {'end': 587.691, 'text': 'So we have these shaders that are imported.', 'start': 585.71, 'duration': 1.981}, {'end': 596.934, 'text': "And if I go back here and textures for the players like the material, we're going to go from the standard shader and go here into the custom.", 'start': 588.491, 'duration': 8.443}, {'end': 601.335, 'text': "And we're going to select the mat cap additive.", 'start': 597.754, 'duration': 3.581}, {'end': 603.156, 'text': "This is the one that we're going to select.", 'start': 601.675, 'duration': 1.481}, {'end': 608.747, 'text': 'Now, in order for this one to work, we also need to attach this matte cap skin right here.', 'start': 603.604, 'duration': 5.143}, {'end': 610.608, 'text': 'So put it right here.', 'start': 608.927, 'duration': 1.681}, {'end': 616.352, 'text': 'And the last one is going to be this one, player 1 underscore AO.', 'start': 611.329, 'duration': 5.023}, {'end': 619.213, 'text': 'Voila You see now how our player looks like.', 'start': 617.012, 'duration': 2.201}, {'end': 621.755, 'text': 'So if I go here in the game, pay attention how the player looks like.', 'start': 619.233, 'duration': 2.522}, {'end': 622.615, 'text': 'It looks beautiful.', 'start': 621.815, 'duration': 0.8}, {'end': 626.978, 'text': 'The lightning goes very nice on him.', 'start': 623.596, 'duration': 3.382}, {'end': 632.041, 'text': 'And now when I go into the game tab, I think the game already looks a little bit cool.', 'start': 627.398, 'duration': 4.643}, {'end': 639.465, 'text': "So what we're gonna do next? Well, first of all, select the player top game object, the parent one.", 'start': 633.323, 'duration': 6.142}, {'end': 645.846, 'text': 'And for the parent, we are going to attach a couple of components with the first one being a capsule collider.', 'start': 640.565, 'duration': 5.281}, {'end': 650.508, 'text': 'So go here and filter under add component, filter for capsule collider.', 'start': 645.867, 'duration': 4.641}, {'end': 652.428, 'text': 'When you are working.', 'start': 651.488, 'duration': 0.94}, {'end': 658.47, 'text': "I need to mention this when you're working with your games and you're attaching colliders, pay attention which colliders you're attaching.", 'start': 652.428, 'duration': 6.042}], 'summary': 'Setting player coordinates and adding materials to 3d model for better appearance and lighting.', 'duration': 176.617, 'max_score': 481.853, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs481853.jpg'}, {'end': 585.67, 'src': 'embed', 'start': 561.743, 'weight': 4, 'content': [{'end': 570.646, 'text': "Instead We're going to go into the shaders and we talked about 3D or materials and how to make our 3D models look good.", 'start': 561.743, 'duration': 8.903}, {'end': 573.247, 'text': 'I have that in the first person shooter tutorial.', 'start': 571.166, 'duration': 2.081}, {'end': 577.388, 'text': 'I have that in the 3D fight game tutorial as well.', 'start': 573.347, 'duration': 4.041}, {'end': 580.589, 'text': 'So everything is the same and I encourage you to practice.', 'start': 577.588, 'duration': 3.001}, {'end': 582.069, 'text': 'So play with the shaders.', 'start': 580.749, 'duration': 1.32}, {'end': 585.67, 'text': 'Now of course here we have imported some of our own shaders as you can see here.', 'start': 582.089, 'duration': 3.581}], 'summary': 'Tutorials cover shaders for 3d models in first-person shooter and fight game, encouraging practice.', 'duration': 23.927, 'max_score': 561.743, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs561743.jpg'}, {'end': 658.47, 'src': 'embed', 'start': 633.323, 'weight': 6, 'content': [{'end': 639.465, 'text': "So what we're gonna do next? Well, first of all, select the player top game object, the parent one.", 'start': 633.323, 'duration': 6.142}, {'end': 645.846, 'text': 'And for the parent, we are going to attach a couple of components with the first one being a capsule collider.', 'start': 640.565, 'duration': 5.281}, {'end': 650.508, 'text': 'So go here and filter under add component, filter for capsule collider.', 'start': 645.867, 'duration': 4.641}, {'end': 652.428, 'text': 'When you are working.', 'start': 651.488, 'duration': 0.94}, {'end': 658.47, 'text': "I need to mention this when you're working with your games and you're attaching colliders, pay attention which colliders you're attaching.", 'start': 652.428, 'duration': 6.042}], 'summary': 'Attach a capsule collider to the parent player top game object when working with games.', 'duration': 25.147, 'max_score': 633.323, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs633323.jpg'}, {'end': 988.311, 'src': 'heatmap', 'start': 820.037, 'weight': 0.725, 'content': [{'end': 825.439, 'text': 'And then you can go here at the top right corner where it says layout and you can save the layout.', 'start': 820.037, 'duration': 5.402}, {'end': 827.76, 'text': 'Click here, save, give it a name and click save.', 'start': 825.459, 'duration': 2.301}, {'end': 829.541, 'text': 'And I saved my layout here.', 'start': 827.88, 'duration': 1.661}, {'end': 834.323, 'text': 'So whenever I click on that, I will have a layout like this because I already saved it.', 'start': 829.941, 'duration': 4.382}, {'end': 836.184, 'text': 'Voila, simple as that.', 'start': 834.343, 'duration': 1.841}, {'end': 840.238, 'text': "So selecting the player, player child, let's go here.", 'start': 837.096, 'duration': 3.142}, {'end': 845.301, 'text': "So what are the animations that we're going to have? First of all, I'm going to select here the any state.", 'start': 840.638, 'duration': 4.663}, {'end': 850.445, 'text': "So any state, I'm going to move it here and I'm going to right click here and create an empty state.", 'start': 845.842, 'duration': 4.603}, {'end': 855.128, 'text': 'Now this empty state, as you can see, automatically it has a name, new state.', 'start': 850.505, 'duration': 4.623}, {'end': 859.451, 'text': "So I'm going to click on it and I'm going to go here and rename it to idle.", 'start': 855.588, 'duration': 3.863}, {'end': 861.372, 'text': "So we're going to rename it to idle.", 'start': 859.811, 'duration': 1.561}, {'end': 866.456, 'text': "And let's go here inside of our animations or actually inside of the project.", 'start': 862.153, 'duration': 4.303}, {'end': 870.438, 'text': 'and going inside of our player folder.', 'start': 867.316, 'duration': 3.122}, {'end': 873.219, 'text': 'so let me just resize this so player.', 'start': 870.438, 'duration': 2.781}, {'end': 878.102, 'text': 'here it is animations and now we have here the idle animation for our player.', 'start': 873.219, 'duration': 4.883}, {'end': 879.943, 'text': 'so this is the idle one that we want.', 'start': 878.102, 'duration': 1.841}, {'end': 887.207, 'text': 'this one right here i can take the animator and put the panel here at the bottom right corner.', 'start': 879.943, 'duration': 7.264}, {'end': 891.429, 'text': 'so let me Drag this here so that I can see it clearly.', 'start': 887.207, 'duration': 4.222}, {'end': 897.593, 'text': 'Now for the idle, click on it here and drag and drop the idle inside of this motion, voila.', 'start': 891.929, 'duration': 5.664}, {'end': 899.454, 'text': 'So now we have the idle animation.', 'start': 897.933, 'duration': 1.521}, {'end': 905.157, 'text': 'If I were to run the game right now, pay attention into the game tab, you will see the player as you can see.', 'start': 899.514, 'duration': 5.643}, {'end': 910.42, 'text': 'So player is at the bottom corner, bottom left corner of the camera.', 'start': 905.837, 'duration': 4.583}, {'end': 914.042, 'text': 'He is playing his idle animation.', 'start': 910.841, 'duration': 3.201}, {'end': 918.247, 'text': "Of course, we're not going to only have the idle animation.", 'start': 915.083, 'duration': 3.164}, {'end': 920.47, 'text': "I'm going to right click here and create an empty state.", 'start': 918.307, 'duration': 2.163}, {'end': 924.494, 'text': 'We are also going to have our walk animation.', 'start': 920.57, 'duration': 3.924}, {'end': 929.2, 'text': 'So for the player walk animation, we are going to select the player walk.', 'start': 925.095, 'duration': 4.105}, {'end': 931.883, 'text': "So walk and let's go here.", 'start': 929.58, 'duration': 2.303}, {'end': 933.725, 'text': 'Let me just resize this.', 'start': 932.564, 'duration': 1.161}, {'end': 937.467, 'text': 'and find the walk animation here it is.', 'start': 934.506, 'duration': 2.961}, {'end': 939.508, 'text': 'And here we have it.', 'start': 938.227, 'duration': 1.281}, {'end': 942.348, 'text': 'So here we have our player walk animation.', 'start': 939.548, 'duration': 2.8}, {'end': 946.49, 'text': 'Now some animations, we are going to duplicate them.', 'start': 942.769, 'duration': 3.721}, {'end': 949.151, 'text': 'Player walk is one of those animations.', 'start': 946.87, 'duration': 2.281}, {'end': 953.152, 'text': "And in fact, I'm going to duplicate all animations right now we will see later on.", 'start': 949.191, 'duration': 3.961}, {'end': 958.834, 'text': 'So simply select it, command plus D and duplicate it and rename it to player walk.', 'start': 953.172, 'duration': 5.662}, {'end': 960.694, 'text': 'So simply rename it to player walk.', 'start': 959.014, 'duration': 1.68}, {'end': 964.656, 'text': 'We are also going to duplicate the attack animations.', 'start': 961.114, 'duration': 3.542}, {'end': 970.8, 'text': "we're going to have kick one duplicated and I'm going to rename it to player kick one.", 'start': 964.656, 'duration': 6.144}, {'end': 973.561, 'text': "we're also going to duplicate our kick two.", 'start': 970.8, 'duration': 2.761}, {'end': 976.043, 'text': 'So here it is command plus D.', 'start': 973.881, 'duration': 2.162}, {'end': 982.507, 'text': "So select the animations you can see here in the project tab, I'm selecting the animation.", 'start': 976.043, 'duration': 6.464}, {'end': 988.311, 'text': "And while it's selected, I'm going to hold Command and press D on Windows, it's Ctrl D or you can go under Edit.", 'start': 983.027, 'duration': 5.284}], 'summary': 'Creating and duplicating player animations for idle, walk, and attack.', 'duration': 168.274, 'max_score': 820.037, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs820037.jpg'}, {'end': 988.311, 'src': 'embed', 'start': 959.014, 'weight': 7, 'content': [{'end': 960.694, 'text': 'So simply rename it to player walk.', 'start': 959.014, 'duration': 1.68}, {'end': 964.656, 'text': 'We are also going to duplicate the attack animations.', 'start': 961.114, 'duration': 3.542}, {'end': 970.8, 'text': "we're going to have kick one duplicated and I'm going to rename it to player kick one.", 'start': 964.656, 'duration': 6.144}, {'end': 973.561, 'text': "we're also going to duplicate our kick two.", 'start': 970.8, 'duration': 2.761}, {'end': 976.043, 'text': 'So here it is command plus D.', 'start': 973.881, 'duration': 2.162}, {'end': 982.507, 'text': "So select the animations you can see here in the project tab, I'm selecting the animation.", 'start': 976.043, 'duration': 6.464}, {'end': 988.311, 'text': "And while it's selected, I'm going to hold Command and press D on Windows, it's Ctrl D or you can go under Edit.", 'start': 983.027, 'duration': 5.284}], 'summary': 'Duplicated player walk and attack animations for player kick one and kick two.', 'duration': 29.297, 'max_score': 959.014, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs959014.jpg'}, {'end': 1440.038, 'src': 'embed', 'start': 1410.922, 'weight': 9, 'content': [{'end': 1415.465, 'text': "because we're gonna be able to go from walk to idle and from idle to walk.", 'start': 1410.922, 'duration': 4.543}, {'end': 1420.769, 'text': "When we walk in our code, when we start moving the player, we're gonna simulate the walk animation.", 'start': 1415.505, 'duration': 5.264}, {'end': 1429.874, 'text': 'So here select the walk, click on this transition and then you can go here for the list and you can add conditions.', 'start': 1421.109, 'duration': 8.765}, {'end': 1436.316, 'text': 'so I can click here on the plus sign and it added a condition and now I can select what that condition is going to be.', 'start': 1429.874, 'duration': 6.442}, {'end': 1440.038, 'text': "so I'm going to select here the movement, so the movement true.", 'start': 1436.316, 'duration': 3.722}], 'summary': 'Transitioning between walk and idle animations with added conditions.', 'duration': 29.116, 'max_score': 1410.922, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs1410922.jpg'}, {'end': 1548.508, 'src': 'embed', 'start': 1525.714, 'weight': 10, 'content': [{'end': 1534.597, 'text': "So while I'm at it, I'm also gonna go in prefabs and create this player prefabs folder, player prefab, and I am going to drag and drop this one.", 'start': 1525.714, 'duration': 8.883}, {'end': 1538.539, 'text': 'So simply drag and drop it here, voila, and we are good to go.', 'start': 1534.657, 'duration': 3.882}, {'end': 1543.163, 'text': 'So now we can go back into the animation here and finish these transitions.', 'start': 1538.959, 'duration': 4.204}, {'end': 1546.466, 'text': 'So then we can go inside of our code and we can fix everything.', 'start': 1543.563, 'duration': 2.903}, {'end': 1548.508, 'text': 'Now, let me just move this any state again here.', 'start': 1546.506, 'duration': 2.002}], 'summary': 'Creating player prefabs folder and fixing transitions and code.', 'duration': 22.794, 'max_score': 1525.714, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs1525714.jpg'}, {'end': 1597.653, 'src': 'embed', 'start': 1570.609, 'weight': 12, 'content': [{'end': 1575.294, 'text': "now, of course i've covered this in my previous tutorials, in case you did not watch that.", 'start': 1570.609, 'duration': 4.685}, {'end': 1577.856, 'text': 'so right click on any state, click on make transition,', 'start': 1575.294, 'duration': 2.562}, {'end': 1585.003, 'text': 'then point to the animation or state where you want to go and then simply go to that or click on it.', 'start': 1577.856, 'duration': 7.147}, {'end': 1592.749, 'text': "Now we're going to go from any state to punch one, and I'm going to click on this transition and the condition for that is going to be punch one.", 'start': 1585.404, 'duration': 7.345}, {'end': 1597.653, 'text': 'Now this punch one is a trigger, we will use that in the code.', 'start': 1593.089, 'duration': 4.564}], 'summary': "Tutorial on creating transitions in unity with a focus on using a trigger called 'punch one'.", 'duration': 27.044, 'max_score': 1570.609, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs1570609.jpg'}, {'end': 1684.645, 'src': 'embed', 'start': 1656.962, 'weight': 8, 'content': [{'end': 1660.546, 'text': 'For kick one, we are going to select kick one.', 'start': 1656.962, 'duration': 3.584}, {'end': 1663.069, 'text': 'And for kick two, well, you can guess.', 'start': 1660.766, 'duration': 2.303}, {'end': 1664.952, 'text': "We're gonna select kick two.", 'start': 1663.57, 'duration': 1.382}, {'end': 1668.055, 'text': "For the death, well, it's a no-brainer.", 'start': 1665.532, 'duration': 2.523}, {'end': 1670.478, 'text': 'We are gonna select the death trigger.', 'start': 1668.216, 'duration': 2.262}, {'end': 1676.721, 'text': 'Now, of course, we need to go from these animations to the idle from punches and kicks.', 'start': 1671.019, 'duration': 5.702}, {'end': 1684.645, 'text': "So I'm going to right click on the punch and go here to the idle from punch two to the idle and do the same thing for all these.", 'start': 1676.941, 'duration': 7.704}], 'summary': 'Selecting kick one and kick two, and the death trigger for animations, transitioning to idle from punches and kicks.', 'duration': 27.683, 'max_score': 1656.962, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs1656962.jpg'}, {'end': 1729.623, 'src': 'embed', 'start': 1703.373, 'weight': 11, 'content': [{'end': 1708.156, 'text': 'And we will see that in the code out need to explain this transition duration in this exit time.', 'start': 1703.373, 'duration': 4.783}, {'end': 1713.719, 'text': 'And the best way how I am able to explain it is to go and code it.', 'start': 1708.616, 'duration': 5.103}, {'end': 1716.741, 'text': "So let's go here in our assets that I'm going to right click.", 'start': 1713.799, 'duration': 2.942}, {'end': 1720.594, 'text': 'create a new folder, which is gonna be our scripts folder,', 'start': 1717.571, 'duration': 3.023}, {'end': 1729.623, 'text': "and inside of it I am going to create a player scripts and inside of this one I'm gonna right click and go and create a C sharp script.", 'start': 1720.594, 'duration': 9.029}], 'summary': 'Explaining transition duration in code through creating c# script.', 'duration': 26.25, 'max_score': 1703.373, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs1703373.jpg'}], 'start': 219.05, 'title': 'Unity game development', 'summary': 'Covers unity asset import, environment setup, and player animation creation for a 3d project. it emphasizes using assets for educational purposes, provides specific coordinates and settings for environment and player setup, and details game object setup, animation creation, and code integration.', 'chapters': [{'end': 323.982, 'start': 219.05, 'title': 'Unity assets import tutorial', 'summary': 'Highlights the process of importing unity assets for a 3d project, emphasizing the importance of only using the assets for educational purposes and not for commercial use or distribution, while also providing a link for asset download.', 'duration': 104.932, 'highlights': ['Emphasis on using assets only for educational purposes and not for commercial use or distribution. Assets can only be used for educational purposes, not for creating and uploading games online or for distribution.', 'Provision of a link for asset download and instructions for accessing assets for all tutorials. Link provided for downloading assets for all tutorials on the channel and future tutorials.', 'Demonstration of the process of importing assets into Unity for a 3D project. Step-by-step demonstration of dragging and dropping assets into Unity for import.']}, {'end': 632.041, 'start': 324.383, 'title': 'Setting up environment and player in unity', 'summary': 'Explains the process of setting up the environment, camera, player, and materials in unity, including specific coordinates and settings for positioning, rotation, and scaling, to create a 3d game level with adjusted lighting and shaders.', 'duration': 307.658, 'highlights': ['The process of setting up the environment, camera, and player in Unity, including specific coordinates and settings for positioning, rotation, and scaling. (relevance: 5)', 'Adjusting the lighting and shaders for the player model in Unity, including selecting specific materials and shaders to enhance the visual appearance of the player. (relevance: 4)', "Explaining the purpose and use of level colliders to prevent the player from falling through the ground and limiting the player's movement within the game bounds. (relevance: 3)"]}, {'end': 1480.001, 'start': 633.323, 'title': 'Unity game object setup and animation creation', 'summary': 'Details the setup of game object components, including capsule collider and rigid body, and the creation of player animations with a step-by-step process, including duplicating and renaming the animations, setting up animation events, creating parameters, and defining animation transitions.', 'duration': 846.678, 'highlights': ['Setting up game object components, including capsule collider and rigid body, with specific parameters such as radius, height, mass, and constraints. Capsule collider radius: 0.3, height: 1.8, center y offset: 0.85, rigid body mass: 3, constraints: freeze rotation on X, Y, and Z axis.', 'Step-by-step process for creating player animations, including duplicating and renaming animations, and setting up animation events. Animations duplicated and renamed for idle, walk, kick, punch, and death, with specific instructions for each step.', 'Creation of parameters for triggering animations, including punch one, punch two, punch three, kick one, kick two, movement, and death sign. Parameters categorized as triggers for punches and kicks, boolean for movement, and trigger for death sign, with a clear explanation of their use in the code.', 'Definition of animation transitions based on specified conditions, such as transitioning between idle and walk animations based on the movement boolean parameter. Transition setup for movement-related animations, with conditions linked to the movement parameter to trigger transitions between idle and walk animations.']}, {'end': 1720.594, 'start': 1480.221, 'title': 'Player animation setup and code integration', 'summary': 'Covers setting up player animations and prefabs, including changing rig settings, creating player prefabs, setting up transitions, and adding conditions for different animations. it also explains the transition duration and exit time, preparing for code integration.', 'duration': 240.373, 'highlights': ['The chapter covers setting up player animations and prefabs, including changing rig settings, creating player prefabs, setting up transitions, and adding conditions for different animations. The tutorial explains the process of setting up player animations and prefabs, including changing rig settings and creating player prefabs.', 'It also explains the transition duration and exit time, preparing for code integration. The tutorial delves into explaining the transition duration and exit time, which is crucial for preparing the code integration.', "The speaker demonstrates setting up transitions by right-clicking on the animations and selecting 'make transition' to establish transitions between different states. The tutorial demonstrates the process of setting up transitions by using the 'make transition' function to establish transitions between different states."]}], 'duration': 1501.544, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs219050.jpg', 'highlights': ['Demonstration of the process of importing assets into Unity for a 3D project.', 'Link provided for downloading assets for all tutorials on the channel and future tutorials.', 'Emphasis on using assets only for educational purposes and not for commercial use or distribution.', 'The process of setting up the environment, camera, and player in Unity, including specific coordinates and settings for positioning, rotation, and scaling.', 'Adjusting the lighting and shaders for the player model in Unity, including selecting specific materials and shaders to enhance the visual appearance of the player.', "Explaining the purpose and use of level colliders to prevent the player from falling through the ground and limiting the player's movement within the game bounds.", 'Setting up game object components, including capsule collider and rigid body, with specific parameters such as radius, height, mass, and constraints.', 'Step-by-step process for creating player animations, including duplicating and renaming animations, and setting up animation events.', 'Creation of parameters for triggering animations, including punch one, punch two, punch three, kick one, kick two, movement, and death sign.', 'Definition of animation transitions based on specified conditions, such as transitioning between idle and walk animations based on the movement boolean parameter.', 'The chapter covers setting up player animations and prefabs, including changing rig settings, creating player prefabs, setting up transitions, and adding conditions for different animations.', 'It also explains the transition duration and exit time, preparing for code integration.', "The speaker demonstrates setting up transitions by right-clicking on the animations and selecting 'make transition' to establish transitions between different states."]}, {'end': 2591.306, 'segs': [{'end': 1770.423, 'src': 'embed', 'start': 1747.646, 'weight': 0, 'content': [{'end': 1755.411, 'text': "This is a new prefab workflow that I need to create a tutorial for because in my previous tutorials, I'm using the old prefab system.", 'start': 1747.646, 'duration': 7.765}, {'end': 1764.401, 'text': 'So this overrides will basically, it will, apply these changes to the prefab that is saved here in the prefabs folder.', 'start': 1755.831, 'duration': 8.57}, {'end': 1770.423, 'text': 'Because if I go here, select the player and click on this, open prefab if I attach any component.', 'start': 1764.441, 'duration': 5.982}], 'summary': 'Creating a tutorial for new prefab workflow with overrides for applying changes to prefabs.', 'duration': 22.777, 'max_score': 1747.646, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs1747646.jpg'}, {'end': 2297.958, 'src': 'heatmap', 'start': 1961.208, 'weight': 1, 'content': [{'end': 1967.87, 'text': "Moving forward, we're going to have a private float rotation underscore speed, which is going to be equal to 15F.", 'start': 1961.208, 'duration': 6.662}, {'end': 1974.133, 'text': 'Now rotation speed is going to be the speed by which we are going to rotate our game object.', 'start': 1968.211, 'duration': 5.922}, {'end': 1974.593, 'text': "So don't worry.", 'start': 1974.153, 'duration': 0.44}, {'end': 1977.71, 'text': 'Moving forward in the awake function.', 'start': 1975.629, 'duration': 2.081}, {'end': 1979.952, 'text': 'so awake is gonna be equal to our inside.', 'start': 1977.71, 'duration': 2.242}, {'end': 1981.773, 'text': "we're gonna say my body is equal.", 'start': 1979.952, 'duration': 1.821}, {'end': 1985.295, 'text': 'to get component, rigid body component.', 'start': 1981.773, 'duration': 3.522}, {'end': 1993.079, 'text': 'Now we are also going to get a reference to this one, to player animation, but since we did not create it, I can do something like this.', 'start': 1986.215, 'duration': 6.864}, {'end': 2002.224, 'text': 'So I can go here and I can say player animation is equal to get component in children, so not in parent in children.', 'start': 1993.099, 'duration': 9.125}, {'end': 2006.567, 'text': "and here we're gonna say player, any like this.", 'start': 2002.224, 'duration': 4.343}, {'end': 2009.409, 'text': 'but of course this is not created.', 'start': 2006.567, 'duration': 2.842}, {'end': 2011.811, 'text': 'this is a script that we will create later.', 'start': 2009.409, 'duration': 2.402}, {'end': 2013.673, 'text': "don't worry about that.", 'start': 2011.811, 'duration': 1.862}, {'end': 2016.955, 'text': 'so what we are gonna do next?', 'start': 2013.673, 'duration': 3.282}, {'end': 2019.758, 'text': 'well, we are going to move our character.', 'start': 2016.955, 'duration': 2.803}, {'end': 2028.022, 'text': 'so we are gonna create here void detect movement and not 90, but open close parentheses.', 'start': 2019.758, 'duration': 8.264}, {'end': 2036.706, 'text': "Now the tech movement, and inside of this one we're simply gonna say my body velocity is gonna be equal to new vector three,", 'start': 2028.543, 'duration': 8.163}, {'end': 2042.448, 'text': 'because the velocity is on the X, Y and Z axis, and vector three has X, Y and Z variable.', 'start': 2036.706, 'duration': 5.742}, {'end': 2051.612, 'text': "So for the X, we are gonna say input that get axis raw and we're gonna say here horizontal like this.", 'start': 2043.008, 'duration': 8.604}, {'end': 2057.063, 'text': 'And we are going to multiply that here with the negative.', 'start': 2052.753, 'duration': 4.31}, {'end': 2060.512, 'text': 'So negative from the walk speed like this.', 'start': 2057.605, 'duration': 2.907}, {'end': 2064.351, 'text': 'This is for the, x axis.', 'start': 2060.592, 'duration': 3.759}, {'end': 2066.053, 'text': 'Now for the y axis.', 'start': 2064.811, 'duration': 1.242}, {'end': 2067.714, 'text': "in here I'm going to close parentheses.", 'start': 2066.053, 'duration': 1.661}, {'end': 2075.242, 'text': "for the y axis I'm going to see my body velocity y in for the z axis I'm going to say input that get axis raw.", 'start': 2067.714, 'duration': 7.528}, {'end': 2080.187, 'text': "And here I'm going to say vertical like this and close parentheses.", 'start': 2075.442, 'duration': 4.745}, {'end': 2086.172, 'text': "And we're going to multiply that again with the negative of the z speed like this.", 'start': 2080.667, 'duration': 5.505}, {'end': 2089.216, 'text': 'now, did i type it here walk speed?', 'start': 2086.813, 'duration': 2.403}, {'end': 2089.755, 'text': 'yes, i did.', 'start': 2089.216, 'duration': 0.539}, {'end': 2090.496, 'text': "it's walk speed.", 'start': 2089.755, 'duration': 0.741}, {'end': 2094.021, 'text': 'so capitalize s so negative of the walk speed.', 'start': 2090.496, 'duration': 3.525}, {'end': 2099.927, 'text': "now, one thing that we're gonna fix here is this horizontal and vertical, because i don't like hard coding things.", 'start': 2094.021, 'duration': 5.906}, {'end': 2104.151, 'text': 'what i think is better is to create a separate class, which i did right here.', 'start': 2099.927, 'duration': 4.224}, {'end': 2106.493, 'text': 'so we have a helper scripts folder.', 'start': 2104.151, 'duration': 2.342}, {'end': 2110.575, 'text': 'So create a helper scripts folder inside of that create a tag manager class.', 'start': 2106.873, 'duration': 3.702}, {'end': 2112.216, 'text': 'Now, inside of this class.', 'start': 2111.035, 'duration': 1.181}, {'end': 2114.417, 'text': 'as you can see, I have these tags.', 'start': 2112.216, 'duration': 2.201}, {'end': 2120.06, 'text': "what I'm going to do now is show you this you're going to pause the video and you're going to type this out.", 'start': 2114.417, 'duration': 5.643}, {'end': 2122.782, 'text': 'So this is for the animation tags when we start animating.', 'start': 2120.1, 'duration': 2.682}, {'end': 2127.765, 'text': 'So you are going to do the following pause the video, copy all of this.', 'start': 2123.502, 'duration': 4.263}, {'end': 2136.465, 'text': "I'm gonna assume that you did that and I'm gonna scroll down and again, you're gonna pause the video and copy again for axes and tags.", 'start': 2128.84, 'duration': 7.625}, {'end': 2142.41, 'text': 'So do the same thing, pause the video and copy all of this right here.', 'start': 2136.866, 'duration': 5.544}, {'end': 2152.797, 'text': "So the next thing that we need to do is go back here in our player movement, and instead of horizontal, here we're simply gonna say axes.horizontal,", 'start': 2143.43, 'duration': 9.367}, {'end': 2156.46, 'text': "And instead of vertical, here we're going to say axis.vertical.", 'start': 2153.337, 'duration': 3.123}, {'end': 2162.644, 'text': "Why is this important? Well, let's say we have these or this line of code.", 'start': 2156.96, 'duration': 5.684}, {'end': 2168.949, 'text': "So this one that we had previously, so here I'm going to say horizontal like this.", 'start': 2162.765, 'duration': 6.184}, {'end': 2175.132, 'text': "So horizontal and here I'm gonna say vertical, so vertical like this.", 'start': 2169.73, 'duration': 5.402}, {'end': 2178.493, 'text': "And let's say you don't have this only on this place.", 'start': 2176.052, 'duration': 2.441}, {'end': 2184.315, 'text': "you have it, I don't know, in maybe three or four other places in your code, and then you make a mistake.", 'start': 2178.493, 'duration': 5.822}, {'end': 2193.479, 'text': 'Then you need to go back and you need to fix because if you type here horizontal without L at the end, or you type capital L, it will not work.', 'start': 2184.735, 'duration': 8.744}, {'end': 2196.522, 'text': 'So the capitalization needs to be exactly like this.', 'start': 2193.84, 'duration': 2.682}, {'end': 2202.667, 'text': 'So why type it out on every single spot in your code when you can simply type it here on one single place?', 'start': 2196.902, 'duration': 5.765}, {'end': 2205.509, 'text': 'So horizontal axis, horizontal and vertical.', 'start': 2203.027, 'duration': 2.482}, {'end': 2209.793, 'text': 'So any problem that you have, you simply need to go here and change that.', 'start': 2206.07, 'duration': 3.723}, {'end': 2215.576, 'text': "And then in any place in your code we're using this, it will be changed for that as well.", 'start': 2210.433, 'duration': 5.143}, {'end': 2218.978, 'text': 'Now, what is this get access raw? Well, I can demonstrate that.', 'start': 2215.616, 'duration': 3.362}, {'end': 2224.961, 'text': "Let me quickly go here and I'm gonna create fixed update and in fixed update, we're gonna call detect movement.", 'start': 2219.018, 'duration': 5.943}, {'end': 2240.817, 'text': "Now in the update, I'm simply gonna say print and I'm going to say the value, the value, come on, U is and I'm gonna say here plus input, get axis,", 'start': 2225.541, 'duration': 15.276}, {'end': 2243.66, 'text': 'raw axis dot, horizontal.', 'start': 2240.817, 'duration': 2.843}, {'end': 2248.044, 'text': "It's the same for the vertical, except clicking on different keys on your keyboard.", 'start': 2243.8, 'duration': 4.244}, {'end': 2254.382, 'text': "But if I go here in our console, i'm gonna quickly clear it.", 'start': 2248.504, 'duration': 5.878}, {'end': 2255.884, 'text': "so i'm gonna clear the console.", 'start': 2254.382, 'duration': 1.502}, {'end': 2257.125, 'text': 'hit the play button.', 'start': 2255.884, 'duration': 1.241}, {'end': 2260.148, 'text': "so now, when i move things, you see now what's happening.", 'start': 2257.125, 'duration': 3.023}, {'end': 2261.629, 'text': 'so let me go from the beginning.', 'start': 2260.148, 'duration': 1.481}, {'end': 2265.713, 'text': "from the beginning we have zero, zero, zero, because we're not pressing any buttons.", 'start': 2261.629, 'duration': 4.084}, {'end': 2269.516, 'text': 'this horizontal get axis, raw for horizontal.', 'start': 2265.713, 'duration': 3.803}, {'end': 2275.722, 'text': 'it will get the input when we press the a key or the d key or the left arrow key or the right arrow key.', 'start': 2269.516, 'duration': 6.206}, {'end': 2281.027, 'text': "so it's horizontal, because the coordinate system, it works like this.", 'start': 2275.722, 'duration': 5.305}, {'end': 2282.908, 'text': 'this is the coordinate system like this.', 'start': 2281.027, 'duration': 1.881}, {'end': 2285.731, 'text': 'so this is x and this is y.', 'start': 2282.908, 'duration': 2.823}, {'end': 2287.833, 'text': 'so y is up and down.', 'start': 2285.731, 'duration': 2.102}, {'end': 2289.974, 'text': 'you see, x is left and right.', 'start': 2287.833, 'duration': 2.141}, {'end': 2297.958, 'text': 'So when you click the A key or D, that means A is going.', 'start': 2290.675, 'duration': 7.283}], 'summary': 'Setting private float rotation speed to 15f, creating a helper script for axis management, and demonstrating the use of get axis raw for character movement.', 'duration': 336.75, 'max_score': 1961.208, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs1961208.jpg'}, {'end': 2120.06, 'src': 'embed', 'start': 2094.021, 'weight': 1, 'content': [{'end': 2099.927, 'text': "now, one thing that we're gonna fix here is this horizontal and vertical, because i don't like hard coding things.", 'start': 2094.021, 'duration': 5.906}, {'end': 2104.151, 'text': 'what i think is better is to create a separate class, which i did right here.', 'start': 2099.927, 'duration': 4.224}, {'end': 2106.493, 'text': 'so we have a helper scripts folder.', 'start': 2104.151, 'duration': 2.342}, {'end': 2110.575, 'text': 'So create a helper scripts folder inside of that create a tag manager class.', 'start': 2106.873, 'duration': 3.702}, {'end': 2112.216, 'text': 'Now, inside of this class.', 'start': 2111.035, 'duration': 1.181}, {'end': 2114.417, 'text': 'as you can see, I have these tags.', 'start': 2112.216, 'duration': 2.201}, {'end': 2120.06, 'text': "what I'm going to do now is show you this you're going to pause the video and you're going to type this out.", 'start': 2114.417, 'duration': 5.643}], 'summary': 'Creating a separate class for tag management to avoid hard coding.', 'duration': 26.039, 'max_score': 2094.021, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs2094021.jpg'}, {'end': 2549.164, 'src': 'embed', 'start': 2521.554, 'weight': 2, 'content': [{'end': 2525.976, 'text': 'You see, here we have another lines of code that are using the same functionality.', 'start': 2521.554, 'duration': 4.422}, {'end': 2534.296, 'text': "So we're using here getAxisRaw, and by the way, We could also put this here in the text movement, but I like to separate the code.", 'start': 2526.016, 'duration': 8.28}, {'end': 2537.357, 'text': 'So I like to separate this one is handling the movement.', 'start': 2534.376, 'duration': 2.981}, {'end': 2539.659, 'text': 'This one is handling the rotation.', 'start': 2537.638, 'duration': 2.021}, {'end': 2541.68, 'text': "That's why I'm doing it like this.", 'start': 2539.979, 'duration': 1.701}, {'end': 2549.164, 'text': "So moving back here, what are we doing? We're using the axis, horizontal axis on both places.", 'start': 2542.48, 'duration': 6.684}], 'summary': 'Separating code for movement and rotation, using horizontal axis in both places.', 'duration': 27.61, 'max_score': 2521.554, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs2521554.jpg'}, {'end': 2597.632, 'src': 'embed', 'start': 2568.112, 'weight': 3, 'content': [{'end': 2573.054, 'text': "We're gonna fix it right here and it will be applied for both of these cases.", 'start': 2568.112, 'duration': 4.942}, {'end': 2575.655, 'text': "So we don't need to fix it here and then go here.", 'start': 2573.114, 'duration': 2.541}, {'end': 2576.756, 'text': 'And this is just a.', 'start': 2575.695, 'duration': 1.061}, {'end': 2586.983, 'text': 'An easy example if you have a game that has two gigabytes of size or three or four, and you have thousands of lines of code, you can think,', 'start': 2577.356, 'duration': 9.627}, {'end': 2591.306, 'text': "or you can imagine how messy this can get if you're not using everything in one place.", 'start': 2586.983, 'duration': 4.323}, {'end': 2597.632, 'text': "Anyways, what we are going to do here is I'm going to simply take this and duplicate it and paste it here.", 'start': 2592.507, 'duration': 5.125}], 'summary': 'Improving efficiency by consolidating code for better management and preventing potential mess, especially in a project with multiple gigabytes of data and thousands of lines of code.', 'duration': 29.52, 'max_score': 2568.112, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs2568112.jpg'}], 'start': 1720.594, 'title': 'Unity prefab and player movement', 'summary': 'Covers the new prefab workflow in unity, including creating, applying overrides, and updating prefabs, and also explains refactoring tag management and player movement with emphasis on optimal coding practices and benefits of consolidation.', 'chapters': [{'end': 2094.021, 'start': 1720.594, 'title': 'Unity prefab workflow tutorial', 'summary': "Explains the new prefab workflow in unity, demonstrating how to create, apply overrides, and update prefabs, emphasizing the importance of using 'overrides' to reflect changes made to copies on the original prefab.", 'duration': 373.427, 'highlights': ["The 'overrides' feature in Unity applies changes made to a prefab to the original, ensuring that any modifications made to the copy are reflected on the original prefab, thereby maintaining consistency across instances.", 'Demonstrates the process of creating a C# script for player movement in Unity, covering the attachment of the script to the player game object and applying overrides to update the prefab, showcasing practical implementation in game development.', "Illustrates the significance of using 'overrides' in the Unity prefab workflow, emphasizing the need to apply changes made to the copied prefab to the original, ensuring uniformity and consistency across instances for efficient game development.", "Explains the concept of applying overrides in Unity's new prefab workflow, emphasizing the necessity of reflecting changes made to copies on the original prefab to maintain consistency and uniformity across instances, demonstrating practical implementation in game development.", "Demonstrates the process of attaching a script for player movement in Unity, highlighting the significance of using 'overrides' to update prefabs and maintain consistency across instances, showcasing practical implementation in game development."]}, {'end': 2591.306, 'start': 2094.021, 'title': 'Refactoring tag management and player movement', 'summary': "Details refactoring tag management and player movement, emphasizing the creation of a separate class for tag management to avoid hard coding, demonstrating the usage of 'getaxisraw' for detecting movement and rotation, and highlighting the benefits of consolidating code to avoid errors and simplify future debugging.", 'duration': 497.285, 'highlights': ['Creating a separate class for tag management to avoid hard coding and consolidating tags into one place to simplify future changes and debugging.', "Demonstrating the usage of 'getAxisRaw' for detecting movement and rotation in Unity, explaining its functionality and showcasing its practical application in a game environment.", "Emphasizing the benefits of consolidating code by using 'getAxisRaw' and maintaining variables in one place to avoid errors and simplify debugging in complex game projects."]}], 'duration': 870.712, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs1720594.jpg', 'highlights': ["The 'overrides' feature in Unity applies changes made to a prefab to the original, ensuring consistency across instances.", 'Creating a separate class for tag management to consolidate tags into one place for future changes and debugging.', "Demonstrating the usage of 'getAxisRaw' for detecting movement and rotation in Unity, showcasing its practical application in a game environment.", 'Emphasizing the benefits of consolidating code by maintaining variables in one place to avoid errors and simplify debugging in complex game projects.', "Illustrates the significance of using 'overrides' in the Unity prefab workflow, emphasizing the need to apply changes made to the copied prefab to the original for efficient game development."]}, {'end': 3516.755, 'segs': [{'end': 2673.74, 'src': 'embed', 'start': 2650.017, 'weight': 1, 'content': [{'end': 2657.245, 'text': 'you see, in order to face this player to the right side, I need to set his axis Y to negative 90, because if I set it to 90,', 'start': 2650.017, 'duration': 7.228}, {'end': 2658.767, 'text': "he's facing the left side.", 'start': 2657.245, 'duration': 1.522}, {'end': 2662.17, 'text': "You see here, if I set it at zero, he's facing us towards the camera.", 'start': 2658.787, 'duration': 3.383}, {'end': 2669.136, 'text': 'So what I need to do is put the negative 90 and then he is facing the right side.', 'start': 2662.851, 'duration': 6.285}, {'end': 2670.578, 'text': "That's the reason why I'm doing it here.", 'start': 2669.157, 'duration': 1.421}, {'end': 2673.74, 'text': 'Because if I go here, see the rotation wise negative 90.', 'start': 2670.598, 'duration': 3.142}], 'summary': 'Adjusting axis y to -90 to make player face right side.', 'duration': 23.723, 'max_score': 2650.017, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs2650017.jpg'}, {'end': 2738.711, 'src': 'embed', 'start': 2691.842, 'weight': 0, 'content': [{'end': 2698.266, 'text': "If we want to face the left side, I simply need to put the positive here and voila, you see now he's facing the positive.", 'start': 2691.842, 'duration': 6.424}, {'end': 2707.455, 'text': 'So even though that we can leave here rotation Y, Here we need to add abs so that we return an absolute value which is positive always.', 'start': 2698.626, 'duration': 8.829}, {'end': 2716.962, 'text': 'And transform rotation is the rotation property and we edit that by using quaternion Euler because quaternions represent rotations in unity.', 'start': 2707.615, 'duration': 9.347}, {'end': 2726.387, 'text': 'We represent rotation by using a quaternion and we simply see here, Euler, you see here returns rotation that rotates z degrees around the z axis,', 'start': 2717.262, 'duration': 9.125}, {'end': 2735.23, 'text': 'x degrees around the x, y degrees around the y, and this is x, this is y and this is z.', 'start': 2726.387, 'duration': 8.843}, {'end': 2736.29, 'text': 'voila, that is that.', 'start': 2735.23, 'duration': 1.06}, {'end': 2737.811, 'text': 'and we talked about what is input.', 'start': 2736.29, 'duration': 1.521}, {'end': 2738.711, 'text': 'get access raw.', 'start': 2737.811, 'duration': 0.9}], 'summary': 'Explains using quaternion euler for rotation in unity, ensuring positive values and accessing raw input.', 'duration': 46.869, 'max_score': 2691.842, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs2691842.jpg'}, {'end': 2824.947, 'src': 'embed', 'start': 2800.456, 'weight': 3, 'content': [{'end': 2807.938, 'text': 'And velocity is represented by a rigid or actually, excuse me, by a vector tree for X velocity, Y velocity and Z velocity.', 'start': 2800.456, 'duration': 7.482}, {'end': 2812.339, 'text': 'So X velocity will move him left and right, Y up and down and Z forward and backwards.', 'start': 2807.998, 'duration': 4.341}, {'end': 2813.74, 'text': 'So that is that.', 'start': 2812.639, 'duration': 1.101}, {'end': 2817.342, 'text': 'And now we are calling in the update rotate player.', 'start': 2814.76, 'duration': 2.582}, {'end': 2822.866, 'text': 'And this is the case where we will call this in the update, not in the fixed update, but in the update function.', 'start': 2817.382, 'duration': 5.484}, {'end': 2824.947, 'text': 'So let me just move this here.', 'start': 2823.486, 'duration': 1.461}], 'summary': 'Explanation of velocity vectors for x, y, and z directions.', 'duration': 24.491, 'max_score': 2800.456, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs2800456.jpg'}, {'end': 2982.291, 'src': 'embed', 'start': 2942.929, 'weight': 4, 'content': [{'end': 2948.631, 'text': 'So I checked the input, I was using the vertical axis, which was the issue, and we fixed that.', 'start': 2942.929, 'duration': 5.702}, {'end': 2950.392, 'text': 'let us now animate the player.', 'start': 2948.931, 'duration': 1.461}, {'end': 2953.094, 'text': 'And that starts with creating the player animation script.', 'start': 2950.452, 'duration': 2.642}, {'end': 2955.016, 'text': "So let's go back into the player scripts.", 'start': 2953.115, 'duration': 1.901}, {'end': 2961.601, 'text': "And right here I'm going to create a C sharp script and we're going to call it player animation.", 'start': 2955.096, 'duration': 6.505}, {'end': 2964.924, 'text': "it can also be character animation, because we're also going to use it for the enemy.", 'start': 2961.601, 'duration': 3.323}, {'end': 2968.227, 'text': "So we can see character animation, it's going to be attached on both.", 'start': 2964.944, 'duration': 3.283}, {'end': 2972.809, 'text': "So We're not gonna attach it on the parent game object.", 'start': 2968.387, 'duration': 4.422}, {'end': 2977.43, 'text': "Instead, we're gonna attach it on the player child because that is the one who has the animator.", 'start': 2972.849, 'duration': 4.581}, {'end': 2982.291, 'text': "So we're gonna drag and drop the character animation on player child.", 'start': 2977.47, 'duration': 4.821}], 'summary': 'Fixed input issue, creating player animation script.', 'duration': 39.362, 'max_score': 2942.929, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs2942929.jpg'}, {'end': 3095.126, 'src': 'embed', 'start': 3052.103, 'weight': 6, 'content': [{'end': 3059.745, 'text': "so the first animation is going to be a public void walk, which is going to take a boolean which i'm going to say here move,", 'start': 3052.103, 'duration': 7.642}, {'end': 3070.409, 'text': "and simply here we're going to say anim dot, set bool, and we're going to call here animation text dot, movement comma,", 'start': 3059.745, 'duration': 10.664}, {'end': 3071.77, 'text': "and we're gonna pass here move.", 'start': 3070.409, 'duration': 1.361}, {'end': 3073.171, 'text': 'So what is going on?', 'start': 3071.83, 'duration': 1.341}, {'end': 3080.617, 'text': 'If you remember, if I go back here in Unity and select the player child, which is the one holding the animations in the animator panel here,', 'start': 3073.231, 'duration': 7.386}, {'end': 3090.185, 'text': "if you remember, we're gonna go from idle to walk when the move parameter, you see the movement actually parameter is set to true.", 'start': 3080.617, 'duration': 9.568}, {'end': 3095.126, 'text': 'Now, these are the parameters, as you can see at the bottom left corner.', 'start': 3090.885, 'duration': 4.241}], 'summary': 'Creating a walk animation with a boolean parameter for movement in unity.', 'duration': 43.023, 'max_score': 3052.103, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs3052103.jpg'}, {'end': 3192.875, 'src': 'embed', 'start': 3165.023, 'weight': 8, 'content': [{'end': 3167.264, 'text': 'you see here animation tags, movement.', 'start': 3165.023, 'duration': 2.241}, {'end': 3170.025, 'text': 'if I go back here, this is that movement.', 'start': 3167.264, 'duration': 2.761}, {'end': 3173.986, 'text': 'you see, this is the name movement same as the parameter name right here.', 'start': 3170.025, 'duration': 3.961}, {'end': 3174.506, 'text': 'pay attention.', 'start': 3173.986, 'duration': 0.52}, {'end': 3176.427, 'text': 'Now these names need to match up.', 'start': 3174.866, 'duration': 1.561}, {'end': 3182.81, 'text': 'If I have here movement with lowercase m, and capital case M here, it will not work.', 'start': 3176.807, 'duration': 6.003}, {'end': 3185.931, 'text': 'Or here, if I say movement like this, this is not gonna work.', 'start': 3182.89, 'duration': 3.041}, {'end': 3192.875, 'text': 'So if the M is capitalized, uppercase that is, then we also need to make it right here.', 'start': 3186.392, 'duration': 6.483}], 'summary': 'Matching parameter names are crucial for animation movement to work effectively.', 'duration': 27.852, 'max_score': 3165.023, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs3165023.jpg'}, {'end': 3362.828, 'src': 'embed', 'start': 3335.861, 'weight': 9, 'content': [{'end': 3339.243, 'text': "And it's not player animation, but it is character animation.", 'start': 3335.861, 'duration': 3.382}, {'end': 3342.045, 'text': 'Now you see this get component in children.', 'start': 3339.283, 'duration': 2.762}, {'end': 3347.497, 'text': 'If I go back here in Unity, The player, the top most parent is this one.', 'start': 3342.085, 'duration': 5.412}, {'end': 3350.459, 'text': 'The player child is the one who has that component.', 'start': 3347.617, 'duration': 2.842}, {'end': 3353.241, 'text': 'So if we want to get it, we cannot say get component.', 'start': 3350.479, 'duration': 2.762}, {'end': 3357.885, 'text': 'Get component will get the component that is attached on that specific game object.', 'start': 3353.281, 'duration': 4.604}, {'end': 3362.828, 'text': "But if you want to get a component that's on the child, you will use get component in children.", 'start': 3358.485, 'duration': 4.343}], 'summary': 'Character animation in unity uses getcomponentinchildren for child components.', 'duration': 26.967, 'max_score': 3335.861, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs3335861.jpg'}, {'end': 3496.883, 'src': 'embed', 'start': 3450.728, 'weight': 10, 'content': [{'end': 3460.072, 'text': "so if we are pressing either vertical or horizontal, we are gonna call our player anim and we're gonna call here walk, passing here true, like this,", 'start': 3450.728, 'duration': 9.344}, {'end': 3473.061, 'text': "and let me just hold this right here, else we're gonna simply call our player anim to set here player walk to be equal to false voila.", 'start': 3460.072, 'duration': 12.989}, {'end': 3474.441, 'text': 'simple as that.', 'start': 3473.061, 'duration': 1.38}, {'end': 3482.137, 'text': "now Again, what we're doing here is we are testing if we are pressing the horizontal or vertical axis.", 'start': 3474.441, 'duration': 7.696}, {'end': 3484.438, 'text': "And pay attention here, we're saying if it's not equal to.", 'start': 3482.197, 'duration': 2.241}, {'end': 3489.08, 'text': 'If you want to test if something is equal to another game object, you use the double equals sign.', 'start': 3484.698, 'duration': 4.382}, {'end': 3492.381, 'text': "So here we're gonna test if A is equal to B.", 'start': 3489.12, 'duration': 3.261}, {'end': 3496.883, 'text': 'Now not async, but if A is equal to B, use the double equals sign.', 'start': 3492.381, 'duration': 4.502}], 'summary': 'The code checks for pressing vertical or horizontal axis, setting player walk animation accordingly.', 'duration': 46.155, 'max_score': 3450.728, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs3450728.jpg'}], 'start': 2592.507, 'title': 'Game development in unity', 'summary': 'Covers the use of absolute value for rotation, player movement and rotation, unity animator setup, and player animation and component retrieval in game development using unity, including specific techniques and issues addressed.', 'chapters': [{'end': 2738.711, 'start': 2592.507, 'title': 'Using absolute value for rotation in unity', 'summary': 'Explains the use of absolute value in unity to ensure positive rotation values and enable proper orientation of game elements, such as setting the y axis to negative 90 for right-facing orientation and using quaternion euler for representing rotations.', 'duration': 146.204, 'highlights': ['Absolute value ensures positive rotation values The absolute value function in Unity ensures that any number input returns a positive value, crucial for setting the correct orientation of game elements.', 'Setting Y axis to negative 90 for right-facing orientation By setting the Y axis to negative 90, the game element is oriented to face the right side, essential for proper game dynamics and visuals.', 'Use of quaternion Euler for representing rotations in Unity Quaternions are utilized to represent rotations in Unity, with Euler angles used to define rotations around the x, y, and z axes, providing a comprehensive method for orientation in game development.']}, {'end': 3006.051, 'start': 2738.711, 'title': 'Player rotation and animation', 'summary': 'Discusses the concept of velocity in game development, explaining how to handle player movement and rotation, including fixing a rotation issue by checking input and creating a player animation script.', 'duration': 267.34, 'highlights': ['Explaining velocity and its representation by a vector tree for X velocity, Y velocity, and Z velocity. Velocity is represented by a vector tree for X velocity, Y velocity, and Z velocity, with X velocity moving left and right, Y moving up and down, and Z moving forward and backward.', 'Fixing rotation issue by checking the input and using the correct axis for player movement. Fixed rotation issue by identifying the incorrect input axis (vertical instead of horizontal) for player movement, ensuring correct rotation behavior.', 'Creating a player animation script to handle player and enemy animations, attaching it to the player child, and applying it to the prefab. Created a player animation script to handle player and enemy animations, attached it to the player child, and applied it to the prefab, ensuring it works for both player and enemy objects.']}, {'end': 3286.56, 'start': 3006.051, 'title': 'Unity animator setup', 'summary': 'Discusses the setup of animator variables and functions in unity, including setting boolean parameters for animation transitions and the importance of matching parameter names for proper functionality.', 'duration': 280.509, 'highlights': ["The chapter explains the process of setting up animator variables and functions in Unity, emphasizing the use of a private animator variable and the 'awake' function to initialize the animator component.", "It discusses the creation of a public void walk function, utilizing the 'anim.setBool' method to set the 'movement' parameter based on a boolean input, enabling transitions between idle and walk animations.", 'The importance of matching parameter names for proper functionality is highlighted, stressing the need for consistency in capitalization and naming conventions to ensure correct operation of the animation triggers and boolean parameters.']}, {'end': 3516.755, 'start': 3286.94, 'title': 'Player animation and component retrieval', 'summary': "Covers the implementation of player animation and component retrieval, emphasizing the use of 'getcomponentinchildren' and the conditions for animating the player based on horizontal and vertical input axes.", 'duration': 229.815, 'highlights': ["The chapter emphasizes the usage of 'getComponentInChildren' for retrieving components attached to child game objects, highlighting the uncertainty of obtaining components when multiple child game objects are present.", "The implementation includes conditions for animating the player based on horizontal and vertical input axes, with specific emphasis on using '!=' for not equal comparisons.", "The discussion includes the significance of using '!=' for not equal comparisons and clarifies the usage of '==' for equal comparisons in the context of testing conditions for player animation.", "The instructor demonstrates the implementation of player animation by calling 'playerAnim.walk(true)' when the horizontal or vertical axis is pressed and 'playerAnim.walk(false)' when neither axis is pressed."]}], 'duration': 924.248, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs2592507.jpg', 'highlights': ['Absolute value ensures positive rotation values.', 'Setting Y axis to negative 90 for right-facing orientation.', 'Use of quaternion Euler for representing rotations in Unity.', 'Explaining velocity and its representation by a vector tree for X velocity, Y velocity, and Z velocity.', 'Fixing rotation issue by checking the input and using the correct axis for player movement.', 'Creating a player animation script to handle player and enemy animations, attaching it to the player child, and applying it to the prefab.', 'The chapter explains the process of setting up animator variables and functions in Unity.', "It discusses the creation of a public void walk function, utilizing the 'anim.setBool' method to set the 'movement' parameter based on a boolean input, enabling transitions between idle and walk animations.", 'The importance of matching parameter names for proper functionality is highlighted, stressing the need for consistency in capitalization and naming conventions to ensure correct operation of the animation triggers and boolean parameters.', "The chapter emphasizes the usage of 'getComponentInChildren' for retrieving components attached to child game objects, highlighting the uncertainty of obtaining components when multiple child game objects are present.", "The implementation includes conditions for animating the player based on horizontal and vertical input axes, with specific emphasis on using '!=' for not equal comparisons.", "The discussion includes the significance of using '!=' for not equal comparisons and clarifies the usage of '==' for equal comparisons in the context of testing conditions for player animation.", "The instructor demonstrates the implementation of player animation by calling 'playerAnim.walk(true)' when the horizontal or vertical axis is pressed and 'playerAnim.walk(false)' when neither axis is pressed."]}, {'end': 4310.518, 'segs': [{'end': 3564.965, 'src': 'embed', 'start': 3516.755, 'weight': 0, 'content': [{'end': 3526.98, 'text': 'a moment ago i explained that If we are not pressing any buttons for the horizontal or vertical, the getAxis raw will return zero', 'start': 3516.755, 'duration': 10.225}, {'end': 3532.163, 'text': 'If we start pressing them, then it will return positive or negative value depending on which button we are pressing.', 'start': 3527.04, 'duration': 5.123}, {'end': 3540.768, 'text': "So if it's not equal to zero, meaning if we are pressing, be that positive or negative side, it will call the walk animation.", 'start': 3532.604, 'duration': 8.164}, {'end': 3542.289, 'text': 'Same for the vertical axis.', 'start': 3540.848, 'duration': 1.441}, {'end': 3544.271, 'text': 'So same goes for the vertical axis.', 'start': 3542.309, 'duration': 1.962}, {'end': 3546.592, 'text': 'And this is also going to be called in the update.', 'start': 3544.311, 'duration': 2.281}, {'end': 3549.794, 'text': 'So here animatePlayerWalk.', 'start': 3546.992, 'duration': 2.802}, {'end': 3560.282, 'text': "Voila! So I can go back here in Unity and now we're gonna see the transitions and what I was talking about when it comes to these transitions.", 'start': 3550.179, 'duration': 10.103}, {'end': 3562.664, 'text': 'So let me just go here and hit the play button.', 'start': 3560.322, 'duration': 2.342}, {'end': 3564.965, 'text': 'Now pay attention to these animations here.', 'start': 3563.044, 'duration': 1.921}], 'summary': 'Using getaxis raw to trigger walk animations in unity.', 'duration': 48.21, 'max_score': 3516.755, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs3516755.jpg'}, {'end': 3624.76, 'src': 'embed', 'start': 3585.917, 'weight': 2, 'content': [{'end': 3587.658, 'text': 'What is wrong here is the following.', 'start': 3585.917, 'duration': 1.741}, {'end': 3595.763, 'text': 'These transitions, if I click on them, the transitions have this exit time and they have the transition duration.', 'start': 3588.479, 'duration': 7.284}, {'end': 3600.848, 'text': 'Now, Exit time will allow the animation to be played.', 'start': 3596.203, 'duration': 4.645}, {'end': 3603.39, 'text': 'You see exit time in normalized time from current state.', 'start': 3600.888, 'duration': 2.502}, {'end': 3609.096, 'text': "Basically, it will allow animation to end depending on which value you put here, but we're gonna turn it off.", 'start': 3603.49, 'duration': 5.606}, {'end': 3610.177, 'text': "So we're gonna say zero.", 'start': 3609.116, 'duration': 1.061}, {'end': 3613.06, 'text': "And for the transition duration, we're simply gonna say here one.", 'start': 3610.277, 'duration': 2.783}, {'end': 3624.76, 'text': 'For the walk, so when we wanna go back from idle to walk, Here we are also gonna uncheck the exit time and set the transition duration to 0.1.', 'start': 3614.181, 'duration': 10.579}], 'summary': 'Adjusting transition settings: setting exit time to 0 and transition duration to 1 for some transitions, and setting exit time to 0 and transition duration to 0.1 for the walk transition.', 'duration': 38.843, 'max_score': 3585.917, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs3585917.jpg'}, {'end': 3933.607, 'src': 'embed', 'start': 3899.369, 'weight': 6, 'content': [{'end': 3900.85, 'text': 'Actually exit time, excuse me.', 'start': 3899.369, 'duration': 1.481}, {'end': 3904.111, 'text': 'And transition duration is going to be equal to 0.', 'start': 3901.25, 'duration': 2.861}, {'end': 3909.898, 'text': 'So I was talking about when I set one, exit time is gonna be one for all five of these animations.', 'start': 3904.111, 'duration': 5.787}, {'end': 3918.889, 'text': 'Now, why do we need to have exit time? Because just a moment ago, I demonstrated that when you have exit time, we will allow the animation to finish.', 'start': 3909.958, 'duration': 8.931}, {'end': 3927.581, 'text': "And that is precisely what we want to do because we don't have any conditions from punch one to go back to idle.", 'start': 3919.69, 'duration': 7.891}, {'end': 3933.607, 'text': 'As you can see here, we have conditions to go from idle to walk, but we also have a condition to go back from walk to idle.', 'start': 3927.601, 'duration': 6.006}], 'summary': 'Setting exit time to 1 for animations to allow finishing without conditions.', 'duration': 34.238, 'max_score': 3899.369, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs3899369.jpg'}, {'end': 4030.96, 'src': 'embed', 'start': 4006.587, 'weight': 8, 'content': [{'end': 4012.869, 'text': "In this case, it's idle, but maybe in your case, it can be, I don't know, some other animation that you have set up.", 'start': 4006.587, 'duration': 6.282}, {'end': 4020.651, 'text': "But if you don't have conditions here, then you will need to have exit time for your animation in order for the transition to work.", 'start': 4013.209, 'duration': 7.442}, {'end': 4026.396, 'text': "Let us now demonstrate that by creating our player attack script that we're going to use to attack.", 'start': 4020.931, 'duration': 5.465}, {'end': 4030.96, 'text': "So here in the player scripts, I'm going to right click and create a C sharp script.", 'start': 4026.436, 'duration': 4.524}], 'summary': 'Demonstrating the creation of a c# script for the player attack in transition setup', 'duration': 24.373, 'max_score': 4006.587, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs4006587.jpg'}], 'start': 3516.755, 'title': 'Unity animation transitions', 'summary': 'Explains setting up animation transitions in unity, including using getaxis raw, triggering animations based on button presses, and adjusting transition settings for smoothness and responsiveness. it also discusses the impact of exit time and transition duration on animations with specific examples. additionally, it covers the significance of transition duration and exit time in unity animation and their impact on animation flow and execution.', 'chapters': [{'end': 3685.982, 'start': 3516.755, 'title': 'Unity animation transitions', 'summary': 'Explains the process of setting up animation transitions in unity, focusing on the use of getaxis raw, triggering animations based on button presses, and adjusting transition settings to ensure smooth animation transitions and responsiveness. it also discusses the impact of exit time and transition duration on the animations, effectively illustrating the process with specific examples.', 'duration': 169.227, 'highlights': ['The chapter explains the process of setting up animation transitions in Unity The tutorial provides a comprehensive explanation of how to set up animation transitions in Unity, serving as a foundational guide for implementing animations in game development.', 'The use of getAxis raw to trigger animations based on button presses The tutorial emphasizes the utilization of getAxis raw to trigger animations based on button presses, facilitating the integration of responsive character movements in Unity games.', 'Adjusting transition settings to ensure smooth animation transitions and responsiveness The tutorial delves into the process of adjusting transition settings, particularly focusing on exit time and transition duration, to ensure smooth and responsive animation transitions, enhancing the overall user experience in Unity game development.', 'Illustrating the impact of exit time and transition duration on animations with specific examples The tutorial effectively illustrates the impact of exit time and transition duration on animations through specific examples, providing practical insights into optimizing animation transitions for enhanced visual appeal and user interaction in Unity game development.']}, {'end': 4310.518, 'start': 3686.502, 'title': 'Animation transition duration and exit time', 'summary': 'Discusses the significance of transition duration and exit time in unity animation, demonstrating how to set them for smooth transitions and explaining their impact on animation flow and execution.', 'duration': 624.016, 'highlights': ['Demonstration of transition impact on animation flow The speaker demonstrates the impact of transition duration and exit time by adjusting the values and observing the resulting animation flow, emphasizing the importance of these parameters in controlling animation execution.', 'Setting transition duration to achieve desired animation speed The speaker explains the process of setting transition duration to control the speed of animation transitions, highlighting the flexibility to experiment with different values for achieving desired effects.', 'Explanation of the purpose of exit time in animations The speaker explains the purpose of exit time in animations, emphasizing its role in allowing animations to finish before transitioning to the next state, providing clarity on its necessity in certain scenarios.', 'Utilizing exit time for smooth animation transitions The speaker illustrates the utilization of exit time to ensure smooth animation transitions by allowing animations to complete before transitioning to the next state, contributing to the overall fluidity of the animation flow.', 'Creation of a player attack script for animation control The speaker outlines the process of creating a player attack script to control character animations, demonstrating the use of input detection and animation triggering to enable character attacks.']}], 'duration': 793.763, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs3516755.jpg', 'highlights': ['The tutorial provides a comprehensive explanation of how to set up animation transitions in Unity, serving as a foundational guide for implementing animations in game development.', 'The tutorial emphasizes the utilization of getAxis raw to trigger animations based on button presses, facilitating the integration of responsive character movements in Unity games.', 'The tutorial delves into the process of adjusting transition settings, particularly focusing on exit time and transition duration, to ensure smooth and responsive animation transitions, enhancing the overall user experience in Unity game development.', 'The tutorial effectively illustrates the impact of exit time and transition duration on animations through specific examples, providing practical insights into optimizing animation transitions for enhanced visual appeal and user interaction in Unity game development.', 'The speaker demonstrates the impact of transition duration and exit time by adjusting the values and observing the resulting animation flow, emphasizing the importance of these parameters in controlling animation execution.', 'The speaker explains the process of setting transition duration to control the speed of animation transitions, highlighting the flexibility to experiment with different values for achieving desired effects.', 'The speaker explains the purpose of exit time in animations, emphasizing its role in allowing animations to finish before transitioning to the next state, providing clarity on its necessity in certain scenarios.', 'The speaker illustrates the utilization of exit time to ensure smooth animation transitions by allowing animations to complete before transitioning to the next state, contributing to the overall fluidity of the animation flow.', 'The speaker outlines the process of creating a player attack script to control character animations, demonstrating the use of input detection and animation triggering to enable character attacks.']}, {'end': 5410.497, 'segs': [{'end': 4393.228, 'src': 'embed', 'start': 4368.391, 'weight': 2, 'content': [{'end': 4374.595, 'text': 'So these are the combos, we have kick underscore one, and we have kick underscore two.', 'start': 4368.391, 'duration': 6.204}, {'end': 4379.237, 'text': 'So these are the combos that we can have.', 'start': 4375.695, 'duration': 3.542}, {'end': 4383.719, 'text': 'Now here we are going to create our private character animation, which we already did.', 'start': 4379.597, 'duration': 4.122}, {'end': 4390.103, 'text': 'we also need our private Boolean, which is going to be activate timer, to reset.', 'start': 4383.719, 'duration': 6.384}, {'end': 4393.228, 'text': 'We also need here a private float.', 'start': 4391.308, 'duration': 1.92}], 'summary': 'Creating combos kick_1 and kick_2, private character animation, boolean for timer reset, and private float.', 'duration': 24.837, 'max_score': 4368.391, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs4368391.jpg'}, {'end': 4755.871, 'src': 'heatmap', 'start': 4585.198, 'weight': 0.722, 'content': [{'end': 4593.041, 'text': 'But why is this plus plus here actually this activate timer to reset and this current combo timer?', 'start': 4585.198, 'duration': 7.843}, {'end': 4593.882, 'text': 'why is this important?', 'start': 4593.041, 'duration': 0.841}, {'end': 4597.103, 'text': 'Because below here we are going to.', 'start': 4593.902, 'duration': 3.201}, {'end': 4600.065, 'text': 'and first of all, let me just type here this is combo attacks.', 'start': 4597.103, 'duration': 2.962}, {'end': 4611.19, 'text': "and here below I'm gonna create a function void reset combo state because we are gonna allow the player for a limited time to perform.", 'start': 4601.198, 'duration': 9.992}, {'end': 4613.412, 'text': 'a combo state is as in any game.', 'start': 4611.19, 'duration': 2.222}, {'end': 4617.337, 'text': 'So you need to press the button rapidly to perform a combo state.', 'start': 4613.492, 'duration': 3.845}, {'end': 4624.503, 'text': "So here what we're gonna do is we're gonna test if activate timer to reset, which we are doing here.", 'start': 4617.377, 'duration': 7.126}, {'end': 4628.045, 'text': 'so this is where we are setting it to be equal to true when we press the button.', 'start': 4624.503, 'duration': 3.542}, {'end': 4631.427, 'text': "so if that is true, we're going to say current combo.", 'start': 4628.045, 'duration': 3.382}, {'end': 4638.192, 'text': 'so current combo timer minus equals time dot delta time and if our current?', 'start': 4631.427, 'duration': 6.765}, {'end': 4643.176, 'text': 'So if the current combo timer is less than or equal to zero,', 'start': 4638.872, 'duration': 4.304}, {'end': 4651.564, 'text': 'that means we run out of time to perform the combo and here reset combo state just to mark the function.', 'start': 4643.176, 'duration': 8.388}, {'end': 4656.148, 'text': "then we're going to say current combo state is going to be equal to combo state none.", 'start': 4651.564, 'duration': 4.584}, {'end': 4663.235, 'text': "And then we're simply going to say activate timer to reset is equal to false and current combo timer.", 'start': 4657.069, 'duration': 6.166}, {'end': 4670.339, 'text': 'So current combo timer is gonna be equal to default combo timer, but we can also omit this right here,', 'start': 4663.255, 'duration': 7.084}, {'end': 4679.084, 'text': "because here we are setting the current combo timer to be equal to default combo timer, but I'm gonna leave it anyways.", 'start': 4670.339, 'duration': 8.745}, {'end': 4684.208, 'text': 'now we will be able to perform our combo states.', 'start': 4679.084, 'duration': 5.124}, {'end': 4686.891, 'text': "But of course, we're far from done.", 'start': 4684.309, 'duration': 2.582}, {'end': 4692.976, 'text': 'And if I go here in our unity and if I click the play button right now.', 'start': 4687.471, 'duration': 5.505}, {'end': 4700.743, 'text': "but actually one thing that I forgot to do because you know me, I'm stupid we need to call this reset combo state right here.", 'start': 4692.976, 'duration': 7.767}, {'end': 4703.644, 'text': 'So we need to call it for it actually to work.', 'start': 4701.283, 'duration': 2.361}, {'end': 4708.546, 'text': "So if we don't call it in the update function, this code right here will not happen.", 'start': 4703.664, 'duration': 4.882}, {'end': 4710.847, 'text': 'And let me go and test that item demonstrate.', 'start': 4708.926, 'duration': 1.921}, {'end': 4715.809, 'text': "Now we'll get back and break down the code a little bit more so that we can well understand what we are doing.", 'start': 4710.867, 'duration': 4.942}, {'end': 4717.25, 'text': "We don't want to do things blindly.", 'start': 4715.829, 'duration': 1.421}, {'end': 4717.95, 'text': 'So pay attention now.', 'start': 4717.27, 'duration': 0.68}, {'end': 4719.711, 'text': "So I'm going to press 123.", 'start': 4717.99, 'duration': 1.721}, {'end': 4722.112, 'text': 'You see 123.', 'start': 4719.711, 'duration': 2.401}, {'end': 4724.893, 'text': 'And voila, you see and I can press it that many times.', 'start': 4722.112, 'duration': 2.781}, {'end': 4728.395, 'text': 'But now we have, or we had one problem.', 'start': 4725.073, 'duration': 3.322}, {'end': 4735.737, 'text': 'We finished the combos that quick that now I need to wait for the combos, because, you see, I pressed that so many times.', 'start': 4728.435, 'duration': 7.302}, {'end': 4736.017, 'text': 'you see?', 'start': 4735.737, 'duration': 0.28}, {'end': 4749.202, 'text': 'Press that so many times as you can see here, which eventually, if I go back here, eventually, it will lead the combo state to go to combo state kick.', 'start': 4736.677, 'duration': 12.525}, {'end': 4752.503, 'text': 'Now, why am I telling you that? First of all, let me explain.', 'start': 4749.602, 'duration': 2.901}, {'end': 4755.871, 'text': 'When we press the Z key once.', 'start': 4753.43, 'duration': 2.441}], 'summary': 'The transcript discusses coding a combo attack feature, including timer functionality for performing combo states in a game.', 'duration': 170.673, 'max_score': 4585.198, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs4585198.jpg'}, {'end': 4624.503, 'src': 'embed', 'start': 4597.103, 'weight': 0, 'content': [{'end': 4600.065, 'text': 'and first of all, let me just type here this is combo attacks.', 'start': 4597.103, 'duration': 2.962}, {'end': 4611.19, 'text': "and here below I'm gonna create a function void reset combo state because we are gonna allow the player for a limited time to perform.", 'start': 4601.198, 'duration': 9.992}, {'end': 4613.412, 'text': 'a combo state is as in any game.', 'start': 4611.19, 'duration': 2.222}, {'end': 4617.337, 'text': 'So you need to press the button rapidly to perform a combo state.', 'start': 4613.492, 'duration': 3.845}, {'end': 4624.503, 'text': "So here what we're gonna do is we're gonna test if activate timer to reset, which we are doing here.", 'start': 4617.377, 'duration': 7.126}], 'summary': 'Creating a function to reset combo state for limited time', 'duration': 27.4, 'max_score': 4597.103, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs4597103.jpg'}, {'end': 4863.56, 'src': 'embed', 'start': 4840.105, 'weight': 1, 'content': [{'end': 4847.751, 'text': "That means we have 0.4 of a second to press the button again to change the combo because then we're going to see current combo state plus plus.", 'start': 4840.105, 'duration': 7.646}, {'end': 4856.936, 'text': "And if the previous combo state was punch one, now we're gonna go to combo state punch two, which means here we will execute this code now,", 'start': 4848.371, 'duration': 8.565}, {'end': 4860.859, 'text': 'because now the current combo state will be punch two and then we will execute it.', 'start': 4856.936, 'duration': 3.923}, {'end': 4863.56, 'text': 'And we demonstrated that and same goes for punch three.', 'start': 4860.919, 'duration': 2.641}], 'summary': '0.4 seconds to change combo, executing code for punch two and three.', 'duration': 23.455, 'max_score': 4840.105, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs4840105.jpg'}, {'end': 5267.042, 'src': 'embed', 'start': 5237.874, 'weight': 5, 'content': [{'end': 5244.039, 'text': 'if we press the X key and we are in the combo state none then we will go into combo state kick one.', 'start': 5237.874, 'duration': 6.165}, {'end': 5248.062, 'text': 'But if we are in punch one or punch two, this is what I was talking about.', 'start': 5244.079, 'duration': 3.983}, {'end': 5250.063, 'text': 'So we can do punch, kick, kick.', 'start': 5248.102, 'duration': 1.961}, {'end': 5252.405, 'text': 'We can do punch, punch, kick, kick.', 'start': 5250.423, 'duration': 1.982}, {'end': 5254.267, 'text': 'This is what we are doing here.', 'start': 5252.865, 'duration': 1.402}, {'end': 5260.254, 'text': 'So if the current combo state is none or punch one or punch two, we can move to kick one.', 'start': 5255.388, 'duration': 4.866}, {'end': 5267.042, 'text': 'And if the current combo state is kick one, we are simply going to say plus plus, meaning move to kick two.', 'start': 5260.715, 'duration': 6.327}], 'summary': 'Transition between combo states based on key input.', 'duration': 29.168, 'max_score': 5237.874, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs5237874.jpg'}, {'end': 5372.396, 'src': 'embed', 'start': 5344.201, 'weight': 4, 'content': [{'end': 5350.346, 'text': "So if we are in the current combo state kick two or punch three, we don't have any more combos to change.", 'start': 5344.201, 'duration': 6.145}, {'end': 5352.147, 'text': 'So return, exit out of the function.', 'start': 5350.366, 'duration': 1.781}, {'end': 5356.951, 'text': 'But if the current combo state is none, or punch one or punch two, we can go to kick one,', 'start': 5352.627, 'duration': 4.324}, {'end': 5361.873, 'text': 'which means we will do punch kink kick or punch punch kick kick.', 'start': 5356.951, 'duration': 4.922}, {'end': 5366.955, 'text': 'And if the current combo state is kick, then we can simply safely move to kick two.', 'start': 5362.413, 'duration': 4.542}, {'end': 5372.396, 'text': 'And then here we will perform the kick that we are currently in.', 'start': 5367.395, 'duration': 5.001}], 'summary': 'In this code, specific combo states determine the next action to take, with different combos resulting in different actions.', 'duration': 28.195, 'max_score': 5344.201, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs5344201.jpg'}], 'start': 4312.165, 'title': 'Combo state implementation and management', 'summary': 'Delves into the implementation of combo states, covering creation, timer management, and precise timing for executing combo attacks. it also discusses code for managing combo states, including timer implementation and preventing unintended state changes, ensuring smooth execution of punch and kick combos. additionally, it explores combo state management using void functions to exit, prevent further execution, and chain punch and kick combos for various sequences in a game engine.', 'chapters': [{'end': 4710.847, 'start': 4312.165, 'title': 'Combo state implementation', 'summary': 'Explains the implementation of combo states in a game, detailing the creation of combo states, timer management, and function to reset combo states, emphasizing the need for precise timing to execute combo attacks.', 'duration': 398.682, 'highlights': ['The chapter explains the implementation of combo states, detailing the creation of combo states, timer management, and function to reset combo states, emphasizing the need for precise timing to execute combo attacks.', 'The chapter discusses the creation of combo states including punch and kick combos, and the use of private character animations, Boolean values, and float variables for timer management.', 'The chapter emphasizes the importance of precise timing to perform combo attacks, detailing the use of a timer to reset the combo state if the player fails to execute the combo within a limited time frame.']}, {'end': 4977.222, 'start': 4710.867, 'title': 'Combo state transition in game code', 'summary': 'Explains the code for managing combo states in a game, including a 0.4-second timer for combo transitions and preventing unintended state changes, ensuring smooth execution of punch and kick combos.', 'duration': 266.355, 'highlights': ['The code manages combo states, including a 0.4-second timer for combo transitions, ensuring smooth execution of punch and kick combos. 0.4-second timer', 'The explanation emphasizes preventing unintended state changes to avoid disrupting combo execution. Preventing unintended state changes', 'The chapter stresses the need to test if the current combo state is equal to punch three, kick one, or kick two to prevent undesired state transitions. Testing current combo state for punch three, kick one, or kick two']}, {'end': 5410.497, 'start': 4977.562, 'title': 'Combo state management', 'summary': 'Explores managing combo states, where a void function is used to exit and prevent further execution, while chaining punch and kick combos to perform various sequences of punches and kicks in a game engine.', 'duration': 432.935, 'highlights': ['When the current combo state is punch three or kick two, the function will exit, preventing further combos to be performed. If the current combo state is punch three or kick two, the function will exit, preventing further combos to be performed.', 'Transitioning from none, punch one, or punch two to kick one enables chaining punch-kick-kick or punch-punch-kick-kick combos. Transitioning from none, punch one, or punch two to kick one enables chaining punch-kick-kick or punch-punch-kick-kick combos.', 'Safely transitioning from kick one to kick two allows for the execution of the corresponding kick animation. Safely transitioning from kick one to kick two allows for the execution of the corresponding kick animation.']}], 'duration': 1098.332, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs4312165.jpg', 'highlights': ['The chapter explains the implementation of combo states, detailing the creation of combo states, timer management, and function to reset combo states, emphasizing the need for precise timing to execute combo attacks.', 'The code manages combo states, including a 0.4-second timer for combo transitions, ensuring smooth execution of punch and kick combos.', 'The chapter discusses the creation of combo states including punch and kick combos, and the use of private character animations, Boolean values, and float variables for timer management.', 'The chapter emphasizes preventing unintended state changes to avoid disrupting combo execution.', 'When the current combo state is punch three or kick two, the function will exit, preventing further combos to be performed.', 'Transitioning from none, punch one, or punch two to kick one enables chaining punch-kick-kick or punch-punch-kick-kick combos.']}, {'end': 7940.308, 'segs': [{'end': 5489.943, 'src': 'embed', 'start': 5459.522, 'weight': 0, 'content': [{'end': 5463.545, 'text': 'Now, we can also create another one, but I can simply drag and drop this one on the character enemy.', 'start': 5459.522, 'duration': 4.023}, {'end': 5473.512, 'text': "And going here into textures, so for the material here, we're gonna select the same one as we did for the player, so custom and matcap additive.", 'start': 5464.346, 'duration': 9.166}, {'end': 5477.374, 'text': 'So first of all, the enemy D goes right here.', 'start': 5474.332, 'duration': 3.042}, {'end': 5480.336, 'text': 'Then we have the enemy normal, which goes here.', 'start': 5478.015, 'duration': 2.321}, {'end': 5484.999, 'text': 'Now, yeah, fix now because it was not denoted as to be a normal map.', 'start': 5480.356, 'duration': 4.643}, {'end': 5489.943, 'text': "So here for our enemy, when we import the normal map, we need to say it's a normal map.", 'start': 5485.099, 'duration': 4.844}], 'summary': 'Demonstrating the process of applying a normal map to an enemy character in a game engine.', 'duration': 30.421, 'max_score': 5459.522, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs5459522.jpg'}, {'end': 5555.677, 'src': 'embed', 'start': 5526.081, 'weight': 1, 'content': [{'end': 5527.862, 'text': 'And voila, this is our enemy.', 'start': 5526.081, 'duration': 1.781}, {'end': 5535.665, 'text': 'So the next thing that we are going to do for the enemy is create his attacks and his animator controller.', 'start': 5528.742, 'duration': 6.923}, {'end': 5543.188, 'text': "But before I do that, I'm going to go in enemies animations here and I'm going to duplicate all the animations that we are going to use.", 'start': 5535.705, 'duration': 7.483}, {'end': 5545.189, 'text': 'So we have attack one, two, and three.', 'start': 5543.228, 'duration': 1.961}, {'end': 5547.991, 'text': "As you can see here, I'm going to duplicate all of them.", 'start': 5545.869, 'duration': 2.122}, {'end': 5550.693, 'text': 'So attack two now and attack one.', 'start': 5548.011, 'duration': 2.682}, {'end': 5553.235, 'text': 'And I am going to rename them.', 'start': 5551.474, 'duration': 1.761}, {'end': 5555.677, 'text': "I'm duplicating them so that I can rename them here.", 'start': 5553.615, 'duration': 2.062}], 'summary': 'Creating enemy attacks and animator controller with duplicated animations.', 'duration': 29.596, 'max_score': 5526.081, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs5526081.jpg'}, {'end': 6167.33, 'src': 'embed', 'start': 6134.947, 'weight': 2, 'content': [{'end': 6136.91, 'text': "so we're going to go from attack to idle.", 'start': 6134.947, 'duration': 1.963}, {'end': 6138.271, 'text': 'What did I just do??', 'start': 6137.33, 'duration': 0.941}, {'end': 6141.932, 'text': 'So select the attack, go transition to idle, attack to.', 'start': 6138.471, 'duration': 3.461}, {'end': 6144.353, 'text': "from every single one of these attacks we're gonna go to the idle.", 'start': 6141.932, 'duration': 2.421}, {'end': 6152.517, 'text': "So here we're gonna set the exit time to one, but transition duration, we are going to set that at zero for all three of these.", 'start': 6144.834, 'duration': 7.683}, {'end': 6153.978, 'text': 'And of course you can experiment with that.', 'start': 6152.557, 'duration': 1.421}, {'end': 6159.281, 'text': 'So exit time one, transition duration zero, uncheck that fixed duration.', 'start': 6154.038, 'duration': 5.243}, {'end': 6167.33, 'text': 'check it here, select the transition exit time is gonna be one and basically for all three of these.', 'start': 6159.981, 'duration': 7.349}], 'summary': 'Setting exit time to 1 and transition duration to 0 for all attacks to idle.', 'duration': 32.383, 'max_score': 6134.947, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs6134947.jpg'}, {'end': 6748.863, 'src': 'embed', 'start': 6728.052, 'weight': 3, 'content': [{'end': 6740.679, 'text': "animation. In the play idle animation we're simply gonna say anim and we're gonna call here play like this and we're gonna call animation tags that idle animation is gonna start playing the idle animation.", 'start': 6728.052, 'duration': 12.627}, {'end': 6747.362, 'text': "We will see for what we're gonna use it, but simply know that when we call this function, it's gonna play the animation and, by the way,", 'start': 6741.039, 'duration': 6.323}, {'end': 6748.863, 'text': 'you see here animator played.', 'start': 6747.362, 'duration': 1.501}], 'summary': "The 'play idle animation' function starts the idle animation in the play, using 'anim' and 'animation tags'.", 'duration': 20.811, 'max_score': 6728.052, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs6728052.jpg'}, {'end': 6889.878, 'src': 'embed', 'start': 6855.502, 'weight': 4, 'content': [{'end': 6868.693, 'text': "so it's death like this anim.setTrigger animation tags that trigger voila.", 'start': 6855.502, 'duration': 13.191}, {'end': 6871.935, 'text': 'finally, we have finished with our animations.', 'start': 6868.693, 'duration': 3.242}, {'end': 6878.2, 'text': "so in our enemy movement we're gonna get that, we're gonna animate the enemy and we're gonna make him move.", 'start': 6871.935, 'duration': 6.265}, {'end': 6886.636, 'text': 'so the first thing that we need here is a private player, or actually we call it character animation, character animation,', 'start': 6878.2, 'duration': 8.436}, {'end': 6889.878, 'text': "which I'm gonna call enemy anim, like this", 'start': 6886.636, 'duration': 3.242}], 'summary': "Finished animating enemy for movement with 'enemy anim' variable", 'duration': 34.376, 'max_score': 6855.502, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs6855502.jpg'}], 'start': 5410.497, 'title': 'Unity enemy creation and control', 'summary': 'Details the process of creating enemies in unity, emphasizing material selection and animation setup, including the creation of specific attacks, transitions, and movement logic for enemy characters.', 'chapters': [{'end': 5526.061, 'start': 5410.497, 'title': 'Unity enemy creation process', 'summary': 'Details the process of creating an enemy in unity, including positioning, material selection, and texture addition, emphasizing the need to specify normal maps and utilize the same material as the player model.', 'duration': 115.564, 'highlights': ['The chapter emphasizes the process of creating an enemy in Unity, including positioning and material selection.', 'It stresses the importance of specifying normal maps for the enemy model during import to resolve issues.', 'The need to use the same material for the enemy model as used for the player model is highlighted.']}, {'end': 6043.246, 'start': 5526.081, 'title': 'Creating enemy attacks and animator controller', 'summary': 'Details the process of duplicating enemy animations for attacks and creating an animator controller for the enemy, including the creation of specific animations and setting up parameters for movement, attacks, knockdown, stand up, hit, and death.', 'duration': 517.165, 'highlights': ['The chapter details the process of duplicating enemy animations for attacks and creating an animator controller for the enemy. The process involves duplicating attack animations and creating an animator controller for the enemy character.', 'Setting up parameters for movement, attacks, knockdown, stand up, hit, and death. Parameters for movement, attacks, knockdown, stand up, hit, and death are set up within the animator controller for the enemy character.', 'Creating specific animations for idle, walk, attack, knockdown, stand up, hit, and death. Specific animations are created for idle, walk, attack, knockdown, stand up, hit, and death actions for the enemy character.']}, {'end': 6709.92, 'start': 6043.686, 'title': 'Animating enemy transitions', 'summary': 'Discusses connecting multiple animations for enemy characters, setting up transitions with specific conditions, and implementing collider and rigid body components for character control.', 'duration': 666.234, 'highlights': ['Setting up transitions between attack animations with specific conditions and durations. Configuring attack animations with trigger conditions and durations for smooth transitions.', "Configuring transitions from idle to walk and walk to idle based on the 'moving' parameter. Defining transitions between idle and walk animations based on the 'moving' parameter.", 'Configuring transitions from attack to idle, hit to idle, and knock to stand up animations with specific conditions and durations. Defining smooth transitions from attack, hit, and knock animations to idle and stand up animations.', "Demonstrating the three-part structure of 'knock up,' 'knock down,' and 'knock end' animations for character actions. Explaining the three-part structure of 'knock up,' 'knock down,' and 'knock end' animations for character actions.", 'Setting up collider and rigid body components for character control with specific dimensions and mass. Configuring collider and rigid body components with specific dimensions and mass for character control.']}, {'end': 7495.517, 'start': 6709.92, 'title': 'Unity enemy animation and movement', 'summary': 'Discusses creating enemy animations and movements in unity, covering topics such as playing animations, setting triggers for animations, defining movement parameters, and following the player based on certain conditions.', 'duration': 785.597, 'highlights': ["Playing Animations The chapter explains the process of playing animations in Unity by calling the 'play' function with the specified animation tag, emphasizing the importance of ensuring the names match up for successful execution.", "Setting Triggers for Animations It discusses setting triggers for animations, such as 'knockdown', 'standup', 'hit', and 'death', using the 'anim.setTrigger' function, providing clarity on the implementation of animation triggers in Unity.", 'Defining Movement Parameters The chapter covers defining movement parameters for the enemy, including speed, attack distance, and current attack time, offering insights into setting up movement attributes for game characters in Unity.', "Following the Player It explains the logic for following the player in Unity, involving the use of vector calculations to determine the distance between the enemy and the player, as well as rotating the enemy and setting its velocity based on the player's position."]}, {'end': 7940.308, 'start': 7495.557, 'title': 'Enemy movement and attack logic', 'summary': 'Explains the logic for controlling enemy movement and attack in a game, outlining the conditions for animating the enemy when moving and stopping, as well as the process for determining and executing attacks based on a set time interval and random selection of attack types.', 'duration': 444.751, 'highlights': ['The logic for controlling enemy movement and attack is detailed, including conditions for animating the enemy when moving and stopping, as well as the process for determining and executing attacks based on a set time interval and random selection of attack types. enemy movement, attack logic, animating enemy, stopping movement, executing attacks, random selection of attack types', 'Explanation of the conditions for animating the enemy when moving and stopping, based on the velocity and distance between the enemy and the player. animating enemy, stopping movement, velocity, distance between enemy and player', 'Detailed process for determining and executing attacks based on a set time interval and random selection of attack types, with advice on code reusability and best practices for handling multiple attack options. determining attacks, executing attacks, time interval, random selection, code reusability, best practices']}], 'duration': 2529.811, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs5410497.jpg', 'highlights': ['The chapter emphasizes the process of creating an enemy in Unity, including positioning and material selection.', 'The chapter details the process of duplicating enemy animations for attacks and creating an animator controller for the enemy.', 'Setting up transitions between attack animations with specific conditions and durations.', "Playing Animations The chapter explains the process of playing animations in Unity by calling the 'play' function with the specified animation tag.", 'The logic for controlling enemy movement and attack is detailed, including conditions for animating the enemy when moving and stopping.']}, {'end': 9176.592, 'segs': [{'end': 8020.325, 'src': 'embed', 'start': 7996.096, 'weight': 4, 'content': [{'end': 8006.001, 'text': "the position of the enemy and the player target that position if it's greater than the attack time distance plus chase player after attack.", 'start': 7996.096, 'duration': 9.905}, {'end': 8012.583, 'text': "So we're going to add a little time for the player or give him a little bit space before we start chasing him.", 'start': 8006.321, 'duration': 6.262}, {'end': 8020.325, 'text': "That's why we are adding to the chase or adding to the attack distance plus chase player after attack.", 'start': 8013.643, 'duration': 6.682}], 'summary': 'Adjusting attack distance and chase time for player targeting.', 'duration': 24.229, 'max_score': 7996.096, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs7996096.jpg'}, {'end': 8203.781, 'src': 'heatmap', 'start': 8031.911, 'weight': 0.73, 'content': [{'end': 8038.875, 'text': "Let's say, if our player is here like this and this is the distance where the enemy can come to attack and this is the enemy,", 'start': 8031.911, 'duration': 6.964}, {'end': 8040.616, 'text': 'he came to that distance and he attacks.', 'start': 8038.875, 'duration': 1.741}, {'end': 8046.1, 'text': 'so this is that distance, but this plus chase player after attack, it will allow the player.', 'start': 8040.616, 'duration': 5.484}, {'end': 8051.582, 'text': 'so in this case, if the player moves one inch or one centimeter, the enemy will start chasing.', 'start': 8046.1, 'duration': 5.482}, {'end': 8060.047, 'text': 'but if we say here plus chase player after attack, that means this distance plus the distance here, which can be a little larger distance like this,', 'start': 8051.582, 'duration': 8.465}, {'end': 8065.409, 'text': 'and then the player needs to go up to here for the enemy to start chasing him.', 'start': 8060.047, 'duration': 5.362}, {'end': 8068.711, 'text': 'and this is what we are doing and we can test this out.', 'start': 8065.409, 'duration': 3.302}, {'end': 8076.063, 'text': 'so if i go back here in unity and wait for unity to recover, So let me just go here.', 'start': 8068.711, 'duration': 7.352}, {'end': 8079.066, 'text': "If I hit the play button, let's go and see the enemy.", 'start': 8076.323, 'duration': 2.743}, {'end': 8082.729, 'text': "And the enemy is very close and this is not what we're gonna do.", 'start': 8079.226, 'duration': 3.503}, {'end': 8088.955, 'text': "So the speed, I'm gonna say 1.8 and let's say the attack distance 1.3.", 'start': 8082.829, 'duration': 6.126}, {'end': 8097.821, 'text': 'And by the way, you see here, we have these, receivers, which are actually the so we need to go here enemy child and select all of these animations.', 'start': 8088.955, 'duration': 8.866}, {'end': 8099.082, 'text': 'So we have one in the walk.', 'start': 8097.841, 'duration': 1.241}, {'end': 8100.242, 'text': 'So delete all of these.', 'start': 8099.102, 'duration': 1.14}, {'end': 8104.445, 'text': 'click on these events and delete, and we will add our own later on again.', 'start': 8100.242, 'duration': 4.203}, {'end': 8107.826, 'text': 'the creator of these assets use these events in his project.', 'start': 8104.445, 'duration': 3.381}, {'end': 8109.227, 'text': 'I did not bother to remove them.', 'start': 8107.826, 'duration': 1.401}, {'end': 8110.848, 'text': "So we're going to remove them like this.", 'start': 8109.247, 'duration': 1.601}, {'end': 8116.071, 'text': "So knock down so we don't have here knock and We don't have here on the death.", 'start': 8110.908, 'duration': 5.163}, {'end': 8118.351, 'text': "We don't have, but we, I believe we have in the tag.", 'start': 8116.111, 'duration': 2.24}, {'end': 8118.852, 'text': 'Yes, we do.', 'start': 8118.371, 'duration': 0.481}, {'end': 8121.153, 'text': 'So select these, simply click on them.', 'start': 8119.292, 'duration': 1.861}, {'end': 8124.394, 'text': 'So these animations here that you see, these are animation events.', 'start': 8121.173, 'duration': 3.221}, {'end': 8127.075, 'text': "And these are here in case you don't see.", 'start': 8124.654, 'duration': 2.421}, {'end': 8129.656, 'text': 'We will create later our own.', 'start': 8127.635, 'duration': 2.021}, {'end': 8130.796, 'text': 'So simply click on them.', 'start': 8129.716, 'duration': 1.08}, {'end': 8133.558, 'text': 'And what am I doing? So yeah, this is what I want.', 'start': 8130.837, 'duration': 2.721}, {'end': 8134.838, 'text': 'So hide.', 'start': 8134.118, 'duration': 0.72}, {'end': 8136.819, 'text': 'Anyways, click on it and remove.', 'start': 8134.998, 'duration': 1.821}, {'end': 8137.819, 'text': 'Click on it, remove.', 'start': 8136.959, 'duration': 0.86}, {'end': 8138.84, 'text': 'Click on it, remove.', 'start': 8137.979, 'duration': 0.861}, {'end': 8140.68, 'text': 'And you remove it by the delete key.', 'start': 8138.9, 'duration': 1.78}, {'end': 8143.141, 'text': 'So select it or click on it, delete key.', 'start': 8140.72, 'duration': 2.421}, {'end': 8143.762, 'text': 'Click on it.', 'start': 8143.262, 'duration': 0.5}, {'end': 8145.283, 'text': 'and the lead key.', 'start': 8144.642, 'duration': 0.641}, {'end': 8151.249, 'text': "click on it and the lead key and one more time for attack one, so that we don't get any errors for the receiver.", 'start': 8145.283, 'duration': 5.966}, {'end': 8153.271, 'text': 'we will see later on what this is.', 'start': 8151.249, 'duration': 2.022}, {'end': 8156.254, 'text': "if you did not watch my previous tutorials, don't worry about that.", 'start': 8153.271, 'duration': 2.983}, {'end': 8159.958, 'text': 'we will see, but for now, just remove them, and that is that.', 'start': 8156.254, 'duration': 3.704}, {'end': 8162.601, 'text': "so i'm gonna hit the play button now and we're gonna pay attention.", 'start': 8159.958, 'duration': 2.643}, {'end': 8167.064, 'text': 'You see, the enemy comes close to the player and voila, you see, and he attacked right away.', 'start': 8162.841, 'duration': 4.223}, {'end': 8169.066, 'text': "And now he's waiting and attack right away.", 'start': 8167.445, 'duration': 1.621}, {'end': 8170.027, 'text': 'He attacked with the foot.', 'start': 8169.086, 'duration': 0.941}, {'end': 8173.109, 'text': 'Now he attacked with the left hand and now he attacked with the right hand.', 'start': 8170.067, 'duration': 3.042}, {'end': 8174.47, 'text': 'This is what I wanted to show.', 'start': 8173.409, 'duration': 1.061}, {'end': 8178.914, 'text': 'First of all, let me explain why he attacked immediately.', 'start': 8175.851, 'duration': 3.063}, {'end': 8183.691, 'text': 'As you can see here, we set the current attack time to the default attack time.', 'start': 8179.929, 'duration': 3.762}, {'end': 8188.754, 'text': 'The default attack time is two, which means the current attack time will be that same value.', 'start': 8183.711, 'duration': 5.043}, {'end': 8195.236, 'text': "In the attack here, we're testing or adding to the current attack time plus equals the delta time.", 'start': 8189.354, 'duration': 5.882}, {'end': 8203.781, 'text': 'Delta time is a small value number, which is the difference in time, how much it took to go from one frame to another.', 'start': 8195.277, 'duration': 8.504}], 'summary': 'Adjusting enemy behavior based on attack distance and player movement in unity game development.', 'duration': 171.87, 'max_score': 8031.911, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs8031911.jpg'}, {'end': 8323.409, 'src': 'embed', 'start': 8300.202, 'weight': 5, 'content': [{'end': 8308.726, 'text': 'we start to chase the player and of course you can change these values in order to make the enemy wait a little longer or chase him right away.', 'start': 8300.202, 'duration': 8.524}, {'end': 8310.026, 'text': 'this is up to you.', 'start': 8308.726, 'duration': 1.3}, {'end': 8315.007, 'text': 'And we control the chase and the attack with these two boolean variables.', 'start': 8310.646, 'duration': 4.361}, {'end': 8322.349, 'text': 'So when we set the follow to true, it will make it here false and then we will go here and chase the player.', 'start': 8315.207, 'duration': 7.142}, {'end': 8323.409, 'text': 'And you saw what we were doing.', 'start': 8322.388, 'duration': 1.021}], 'summary': 'Adjustable enemy chase behavior controlled by boolean variables.', 'duration': 23.207, 'max_score': 8300.202, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs8300201.jpg'}, {'end': 8818.949, 'src': 'embed', 'start': 8793.868, 'weight': 1, 'content': [{'end': 8800.294, 'text': 'radius. so float a radius which by default is one.', 'start': 8793.868, 'duration': 6.426}, {'end': 8809.181, 'text': "I'm also gonna use here public float damage, which by default I'm gonna set to be equal to two, and I also need a public bool,", 'start': 8800.294, 'duration': 8.887}, {'end': 8813.284, 'text': 'and one is going to be is player to know if the player is holding this script,', 'start': 8809.181, 'duration': 4.103}, {'end': 8818.949, 'text': 'and another one is gonna be is enemy to know if the enemy is holding this script, because, as I already said,', 'start': 8813.284, 'duration': 5.665}], 'summary': 'Creating a script with default radius of 1, damage of 2, and boolean variables for player and enemy.', 'duration': 25.081, 'max_score': 8793.868, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs8793868.jpg'}, {'end': 8939.492, 'src': 'embed', 'start': 8896.774, 'weight': 2, 'content': [{'end': 8898.535, 'text': 'What is radius?, What is collision layer?', 'start': 8896.774, 'duration': 1.761}, {'end': 8906.3, 'text': 'Well, if I go here, take my highlight tool, overlap sphere will create a sphere at this position with this radius.', 'start': 8898.596, 'duration': 7.704}, {'end': 8908.081, 'text': "So let's say that position is here.", 'start': 8906.4, 'duration': 1.681}, {'end': 8911.843, 'text': 'This is the radius and that is invisible, of course.', 'start': 8908.261, 'duration': 3.582}, {'end': 8914.445, 'text': 'So that sphere is invisible in our game.', 'start': 8911.883, 'duration': 2.562}, {'end': 8919.39, 'text': "We don't see it, but It's there, so we don't see it, but it is there.", 'start': 8914.465, 'duration': 4.925}, {'end': 8925.858, 'text': 'And it will detect collisions with game objects that are set on this layer.', 'start': 8919.41, 'duration': 6.448}, {'end': 8935.749, 'text': 'Now, what does this mean on this layer? What is this layer? Well, if I go here and in Unity, Pay attention when I select a game object.', 'start': 8925.958, 'duration': 9.791}, {'end': 8937.27, 'text': "For example, I'm going to select the player.", 'start': 8935.789, 'duration': 1.481}, {'end': 8939.492, 'text': 'Pay attention here in the inspector.', 'start': 8937.31, 'duration': 2.182}], 'summary': 'Unity tutorial explaining radius and collision layers for game objects.', 'duration': 42.718, 'max_score': 8896.774, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs8896774.jpg'}, {'end': 9170.867, 'src': 'embed', 'start': 9140.171, 'weight': 0, 'content': [{'end': 9142.432, 'text': "So I'm gonna take here the left hand attack point.", 'start': 9140.171, 'duration': 2.261}, {'end': 9145.073, 'text': 'The transform position will be this left hand attack point.', 'start': 9142.452, 'duration': 2.621}, {'end': 9147.194, 'text': 'And pay attention when we attack now.', 'start': 9145.533, 'duration': 1.661}, {'end': 9154.897, 'text': 'So if I take the punch one and notice when we attack, you see that attack point is moving along with the hand and on its position.', 'start': 9147.634, 'duration': 7.263}, {'end': 9162.6, 'text': "because we're using here overlap sphere at the transform position, we will be overlapping a sphere at this position where this green circle is.", 'start': 9154.897, 'duration': 7.703}, {'end': 9166.023, 'text': 'And this is how we are going to detect collision.', 'start': 9163.26, 'duration': 2.763}, {'end': 9170.867, 'text': 'So what happens when you detect collision? First of all, we need to make sure that we have collision.', 'start': 9166.563, 'duration': 4.304}], 'summary': 'Using transform position for left hand attack point to detect collision.', 'duration': 30.696, 'max_score': 9140.171, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs9140171.jpg'}], 'start': 7940.688, 'title': 'Enemy attack and mechanism', 'summary': 'Covers enemy attack logic, chase mechanism, setting up attack points for player and enemy, and collision detection tutorial in unity, emphasizing testing and adjusting values for optimal gameplay and covering a total of 6 attack points.', 'chapters': [{'end': 8162.601, 'start': 7940.688, 'title': 'Game enemy attack logic', 'summary': 'Explains the logic behind enemy attack behavior, including setting attack conditions and distances, resetting attack time, and animating enemy movements, with emphasis on the importance of testing and adjusting values for optimal gameplay.', 'duration': 221.913, 'highlights': ['Explaining the logic behind setting attack conditions and distances, including the importance of testing different values for optimal gameplay. Importance of testing different attack conditions and distances for optimal gameplay.', 'Describing the process of resetting attack time to recalculate and initiate new attacks. Process of resetting attack time to recalculate and initiate new attacks.', 'Detailing the process of animating enemy movements and the significance of adjusting values for effective gameplay. Significance of adjusting values for effective enemy movement animations.']}, {'end': 8405.146, 'start': 8162.841, 'title': 'Enemy attack and chase mechanism', 'summary': "Explains the enemy's attack and chase mechanism, detailing the logic behind the timing of attacks, distance-based player chasing, and the control variables used to manage the behavior.", 'duration': 242.305, 'highlights': ['The script sets the current attack time to the default attack time of two, and then adds the delta time, a small value representing the time between frames, to the current attack time for timing the attacks. Current attack time and delta time are used to control the timing of attacks, allowing for a delay between each attack.', 'The logic tests if the current attack time exceeds the default attack time to trigger the attack, followed by resetting the current attack time to introduce a delay before the next attack. The script checks if the current attack time surpasses the default attack time to initiate the attack action and manage the attack intervals.', 'The distance between the enemy and the player is assessed to determine whether the enemy should chase the player or initiate an attack, with the ability to customize the chase and attack distances through variable manipulation. The script computes the distance between the enemy and the player to decide between chasing or attacking, providing flexibility to adjust chase and attack ranges.', "The enemy's behavior of chasing and attacking is controlled by boolean variables, enabling the manipulation of the chasing and attacking actions within the script. Boolean variables are utilized to govern the enemy's pursuit and attack behaviors, offering control over the sequence of actions within the script."]}, {'end': 8772.934, 'start': 8405.186, 'title': 'Setting up attack points for player and enemy', 'summary': 'Discusses setting up attack points for the player and enemy, including locating specific body parts for attachment, tagging the attack points, and attaching a universal attack script to detect collisions, covering a total of 6 attack points.', 'duration': 367.748, 'highlights': ['Setting up attack points for player and enemy The transcript discusses setting up attack points for the player and enemy, including locating specific body parts for attachment and tagging the attack points.', 'Attaching universal attack script to detect collisions The process involves attaching a universal attack script to detect collisions on all attack points for both the player and enemy.', 'Covering a total of 6 attack points The tutorial covers setting up a total of 6 attack points, including left hand, right hand, left leg, and right leg attack points for both player and enemy.']}, {'end': 9176.592, 'start': 8772.974, 'title': 'Unity: collision detection tutorial', 'summary': 'Explains the creation of a universal script for both player and enemy in unity, focusing on collision detection using overlap sphere, layer masks, and hit effects, aiming to detect collisions with game objects and spawn hit effects when hitting an enemy.', 'duration': 403.618, 'highlights': ['The tutorial focuses on creating a universal script for both player and enemy in Unity, including the use of public layer mask, float radius and damage, and bool variables to differentiate between player and enemy. (relevance score: 5)', 'The concept of overlap sphere for collision detection is explained, emphasizing the creation of an invisible sphere at a specified position with a defined radius to detect collisions with game objects set on a specific layer. (relevance score: 4)', 'The process of setting up layers for game objects in Unity, including creating custom layers such as player and enemy, and assigning game objects to these layers to enable collision detection using overlap sphere. (relevance score: 3)', 'The use of layer masks and selecting specific layers for detecting collisions with game objects, exemplified by choosing the enemy layer for detecting collisions when the player attacks, and attaching hit effects to game objects for visual feedback. (relevance score: 2)']}], 'duration': 1235.904, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs7940688.jpg', 'highlights': ['Covers a total of 6 attack points for player and enemy, including left hand, right hand, left leg, and right leg attack points.', 'The tutorial focuses on creating a universal script for both player and enemy in Unity, including the use of public layer mask, float radius and damage, and bool variables to differentiate between player and enemy.', 'The concept of overlap sphere for collision detection is explained, emphasizing the creation of an invisible sphere at a specified position with a defined radius to detect collisions with game objects set on a specific layer.', 'The process of setting up layers for game objects in Unity, including creating custom layers such as player and enemy, and assigning game objects to these layers to enable collision detection using overlap sphere.', 'The script computes the distance between the enemy and the player to decide between chasing or attacking, providing flexibility to adjust chase and attack ranges.', "Boolean variables are utilized to govern the enemy's pursuit and attack behaviors, offering control over the sequence of actions within the script."]}, {'end': 10240.402, 'segs': [{'end': 9274.559, 'src': 'embed', 'start': 9249.463, 'weight': 0, 'content': [{'end': 9256.187, 'text': 'Why? Well, because did you forget one thing? we disabled all attack points.', 'start': 9249.463, 'duration': 6.724}, {'end': 9260.77, 'text': 'You see here, we have all of these attack points and we have disabled them.', 'start': 9256.228, 'duration': 4.542}, {'end': 9267.154, 'text': 'Now, in order for this to work, we need to enable these attack points.', 'start': 9261.15, 'duration': 6.004}, {'end': 9269.976, 'text': 'And to enable them, we need to create another script.', 'start': 9267.334, 'duration': 2.642}, {'end': 9274.559, 'text': "So let's go back here in project, assets and scripts.", 'start': 9270.596, 'duration': 3.963}], 'summary': 'Attack points disabled, need to enable and create script for functionality.', 'duration': 25.096, 'max_score': 9249.463, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs9249463.jpg'}, {'end': 9357.287, 'src': 'embed', 'start': 9324.929, 'weight': 1, 'content': [{'end': 9331.914, 'text': "We're also gonna have a right arm attack point, not popping its point.", 'start': 9324.929, 'duration': 6.985}, {'end': 9335.357, 'text': "We're also going to have a left leg attack point.", 'start': 9332.415, 'duration': 2.942}, {'end': 9345.744, 'text': 'attack point, and a right leg attack point like this.', 'start': 9337.302, 'duration': 8.442}, {'end': 9349.725, 'text': 'So this is what we need in order to attach these game objects.', 'start': 9346.344, 'duration': 3.381}, {'end': 9355.366, 'text': "Of course, we are far from done when it comes to this script, we're going to do a lot more in this script.", 'start': 9349.745, 'duration': 5.621}, {'end': 9357.287, 'text': "But for now, I'm going to just remove this.", 'start': 9355.406, 'duration': 1.881}], 'summary': 'Script requires right arm, left leg, and right leg attack points for game objects.', 'duration': 32.358, 'max_score': 9324.929, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs9324929.jpg'}, {'end': 9441.067, 'src': 'embed', 'start': 9408.533, 'weight': 2, 'content': [{'end': 9413.719, 'text': 'So we are gonna say gameObject setActive to be equal to false if we have a hit.', 'start': 9408.533, 'duration': 5.186}, {'end': 9417.704, 'text': 'So here, if we have a hit like this.', 'start': 9413.779, 'duration': 3.925}, {'end': 9423.491, 'text': 'So when the hit happens, if the hit length is greater than zero, we know that we have at least one gameObject here.', 'start': 9418.305, 'duration': 5.186}, {'end': 9432.82, 'text': "So then we can safely turn it off because The reason for that is we don't want to detect multiple collisions at once and we will test that out.", 'start': 9423.911, 'duration': 8.909}, {'end': 9441.067, 'text': "Anyways, because of this here, if we don't deactivate, if we don't have a hit and we don't deactivate the game object, we're gonna test here.", 'start': 9433.36, 'duration': 7.707}], 'summary': 'Deactivate gameobject if hit length > 0 to avoid multiple collisions.', 'duration': 32.534, 'max_score': 9408.533, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs9408533.jpg'}, {'end': 9584.311, 'src': 'embed', 'start': 9558.574, 'weight': 3, 'content': [{'end': 9566.076, 'text': "anyways, pay attention here that you don't mess anything up in terms of typing something different here.", 'start': 9558.574, 'duration': 7.502}, {'end': 9570.34, 'text': "For example, leaving here right leg or actually right arm where it's supposed to be like.", 'start': 9566.116, 'duration': 4.224}, {'end': 9571.801, 'text': 'So pay attention to that.', 'start': 9570.36, 'duration': 1.441}, {'end': 9573.903, 'text': 'Now, let me go back here.', 'start': 9572.241, 'duration': 1.662}, {'end': 9579.487, 'text': 'Where are we supposed to attach this game or this script? We need to attach it on the player child.', 'start': 9574.043, 'duration': 5.444}, {'end': 9584.311, 'text': 'So drag and drop it, character animation delegate on the player child like this.', 'start': 9580.048, 'duration': 4.263}], 'summary': 'Ensure accurate typing and attachment of script to player child for game development.', 'duration': 25.737, 'max_score': 9558.574, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs9558574.jpg'}, {'end': 10174.699, 'src': 'embed', 'start': 10149.046, 'weight': 4, 'content': [{'end': 10156.748, 'text': 'And did you saw how many times we printed? It was hundreds of times because we did not deactivate the game object after we touched the enemy.', 'start': 10149.046, 'duration': 7.702}, {'end': 10161.97, 'text': "That's why we need to deactivate him because we only want to detect one punch as one punch.", 'start': 10156.788, 'duration': 5.182}, {'end': 10165.131, 'text': "We don't want to detect one punch 200 times.", 'start': 10162.01, 'duration': 3.121}, {'end': 10165.871, 'text': "That's the reason.", 'start': 10165.251, 'duration': 0.62}, {'end': 10170.133, 'text': "And that's why we need to turn off these game objects.", 'start': 10166.969, 'duration': 3.164}, {'end': 10174.699, 'text': "So I'm now gonna select the left hand and the right hand and turn them off,", 'start': 10170.153, 'duration': 4.546}], 'summary': 'Game object printed hundreds of times, need to deactivate to detect one punch only.', 'duration': 25.653, 'max_score': 10149.046, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs10149046.jpg'}], 'start': 9176.592, 'title': 'Unity game development progress', 'summary': 'Covers detecting collisions in unity, encountering issues with disabled attack points, creating a c# script for character animation, adding attack points for arms and legs, setting up animation events, and activating and deactivating animation events for accurate collision detection and prevention of redundant detection.', 'chapters': [{'end': 9274.559, 'start': 9176.592, 'title': 'Unity game development progress', 'summary': 'Explains how to detect collisions in unity and print the name of the collided game object, but encounters an issue with disabled attack points, requiring the creation of another script.', 'duration': 97.967, 'highlights': ['The chapter demonstrates detecting collisions in Unity and printing the name of the collided game object.', 'The issue arises as all attack points are disabled, hindering the proper functioning of the code.', 'Enabling the attack points is necessary for the code to work effectively and requires the creation of another script.']}, {'end': 9850.995, 'start': 9275.559, 'title': 'Unity character animation scripting', 'summary': 'Discusses creating a c# script for character animation in unity, adding attack points for arms and legs, and setting up animation events to activate the attack points at specific frames.', 'duration': 575.436, 'highlights': ['The script creates attack points for left and right arms and legs, allowing the activation and deactivation of these game objects to simulate character animations.', 'The tutorial emphasizes the importance of adding animation events to specific frames to trigger actions such as activating attack points, providing a detailed guide on how to accomplish this in Unity.', 'The instructor demonstrates the process of assigning functions from scripts to animation events in the Unity inspector panel, highlighting the significance of selecting the appropriate functions from attached scripts.', 'Detailed instructions are provided on attaching the script to the player child, as well as associating the created attack points with the corresponding game objects in the Unity environment.']}, {'end': 10240.402, 'start': 9851.015, 'title': 'Animation event activation and deactivation', 'summary': 'Explains the process of activating and deactivating animation events for left arm, right arm, and leg attacks in unity, ensuring accurate collision detection and preventing multiple collision detections, emphasizing the importance of deactivating game objects after a collision to avoid redundant detection.', 'duration': 389.387, 'highlights': ['The process of activating and deactivating animation events for left arm, right arm, and leg attacks in Unity is explained, emphasizing the importance of accurate collision detection. The chapter details the steps to activate and deactivate animation events for left arm, right arm, and leg attacks in Unity, ensuring accurate collision detection.', 'The significance of deactivating game objects after a collision to avoid redundant detection is highlighted. The importance of deactivating game objects after a collision to prevent multiple collision detections is emphasized, ensuring accurate collision detection in Unity.', 'Demonstration of the consequences of not deactivating game objects after a collision is provided, emphasizing the need for deactivation to avoid redundant detection. The chapter provides a demonstration of the consequences of not deactivating game objects after a collision, emphasizing the need for deactivation to prevent redundant detection in Unity.']}], 'duration': 1063.81, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs9176592.jpg', 'highlights': ['Enabling attack points is necessary for effective code functioning.', 'Creating attack points for arms and legs to simulate character animations.', 'Emphasizing the importance of accurate collision detection in Unity.', 'Providing detailed instructions on attaching the script to the player child.', 'Demonstrating the consequences of not deactivating game objects after a collision.']}, {'end': 12365.412, 'segs': [{'end': 10471.014, 'src': 'embed', 'start': 10441.338, 'weight': 1, 'content': [{'end': 10444.359, 'text': 'So if is player, meaning we attacked the enemy.', 'start': 10441.338, 'duration': 3.021}, {'end': 10451.459, 'text': 'So if we attack the enemy, We are going to spawn the special effect, that hit effect.', 'start': 10444.939, 'duration': 6.52}, {'end': 10453.661, 'text': "We're going to see now what that is.", 'start': 10451.479, 'duration': 2.182}, {'end': 10456.883, 'text': 'And let me go here first of all into hit effects.', 'start': 10453.981, 'duration': 2.902}, {'end': 10460.766, 'text': 'So come on, go into hit effects and prefabs.', 'start': 10457.704, 'duration': 3.062}, {'end': 10463.168, 'text': "And here I'm going to filter for attack points.", 'start': 10460.866, 'duration': 2.302}, {'end': 10464.569, 'text': "I'm going to select all of them.", 'start': 10463.208, 'duration': 1.361}, {'end': 10467.411, 'text': 'And again, drag and drop the hit effect prefab.', 'start': 10465.05, 'duration': 2.361}, {'end': 10471.014, 'text': 'Now, why am I dragging and dropping it again? Because we dragged and dropped it a moment ago.', 'start': 10467.451, 'duration': 3.563}], 'summary': 'Demonstration of spawning hit effects for player attacks.', 'duration': 29.676, 'max_score': 10441.338, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs10441338.jpg'}, {'end': 10659.83, 'src': 'heatmap', 'start': 10491.897, 'weight': 0.889, 'content': [{'end': 10493.378, 'text': 'so what is gonna happen now?', 'start': 10491.897, 'duration': 1.481}, {'end': 10500.123, 'text': "let me go here and clear the console, and i'm gonna demonstrate now why i added those things to the enemy.", 'start': 10493.378, 'duration': 6.745}, {'end': 10505.227, 'text': 'so, first of all, if i go here now, when we touch the enemy, you see bam, you see bam, bam and bam.', 'start': 10500.123, 'duration': 5.104}, {'end': 10506.208, 'text': 'you see that effect.', 'start': 10505.227, 'duration': 0.981}, {'end': 10514.394, 'text': 'now. let me just quickly go here inside of our project, and let me add the hit effect put him right here, just so that we can see.', 'start': 10506.208, 'duration': 8.186}, {'end': 10515.495, 'text': 'do we have all?', 'start': 10514.394, 'duration': 1.101}, {'end': 10516.856, 'text': 'so this right here is okay.', 'start': 10515.495, 'duration': 1.361}, {'end': 10519.217, 'text': 'the glow material is missing.', 'start': 10517.396, 'duration': 1.821}, {'end': 10525.298, 'text': "So let me just quickly find it, I'm gonna click here select and we're gonna search for radial gradient, here it is.", 'start': 10519.337, 'duration': 5.961}, {'end': 10533.561, 'text': "So select either of these and I'm gonna go here in overrides and yeah, that's okay now because it was not that good, it did not import that well.", 'start': 10525.318, 'duration': 8.243}, {'end': 10543.028, 'text': "Anyways, we fixed it now, so I'm gonna go here and pay attention now, when i come close to the enemy and i attack the enemy, you see, bam, you see,", 'start': 10533.621, 'duration': 9.407}, {'end': 10545.65, 'text': 'we have that special effects.', 'start': 10543.028, 'duration': 2.622}, {'end': 10553.157, 'text': 'that is well like a punch but is still too large and i want to deactivate it or, actually small, make it smaller.', 'start': 10545.65, 'duration': 7.507}, {'end': 10557.199, 'text': "so in hit fx prefabs, Select that prefab, I'm going to open it here.", 'start': 10553.157, 'duration': 4.042}, {'end': 10560.5, 'text': "And for the particle system here, I'm going to set the size.", 'start': 10557.599, 'duration': 2.901}, {'end': 10563.041, 'text': "So start size, I'm going to say 0.2.", 'start': 10560.76, 'duration': 2.281}, {'end': 10564.721, 'text': "And here I'm going to say 0.4.", 'start': 10563.041, 'duration': 1.68}, {'end': 10569.542, 'text': 'So start size for the X, 0.2 and 0.4 for the Y.', 'start': 10564.721, 'duration': 4.821}, {'end': 10572.302, 'text': "So let's test it out now because it was a little bit large.", 'start': 10569.542, 'duration': 2.76}, {'end': 10575.943, 'text': "Let's go here and try to make it a little bit smaller.", 'start': 10572.682, 'duration': 3.261}, {'end': 10577.983, 'text': 'So yeah, this is what I want now.', 'start': 10576.703, 'duration': 1.28}, {'end': 10579.524, 'text': 'And the glow effect is just right.', 'start': 10578.063, 'duration': 1.461}, {'end': 10582.546, 'text': 'You see? And it works pretty well.', 'start': 10579.924, 'duration': 2.622}, {'end': 10587.774, 'text': 'Now, first of all, what you will notice is pay attention here in the inspector panel or actually in the hierarchy.', 'start': 10582.586, 'duration': 5.188}, {'end': 10595.353, 'text': "All of these hit effects, they are still here in the hierarchy and they're active.", 'start': 10589.232, 'duration': 6.121}, {'end': 10600.415, 'text': "When they are active and we don't need, we don't have a need for them, they're taking up memory.", 'start': 10595.513, 'duration': 4.902}, {'end': 10606.056, 'text': "So what we need to do here is go in scripts and I'm gonna put that in the helper script.", 'start': 10600.455, 'duration': 5.601}, {'end': 10612.979, 'text': "So here I'm gonna create a new C sharp script and I'm gonna say this one deactivate game object,", 'start': 10606.096, 'duration': 6.883}, {'end': 10616.204, 'text': "because this is the only script that we're gonna have for effects.", 'start': 10612.979, 'duration': 3.225}, {'end': 10618.968, 'text': "So special effects in the game, that's why I'm putting it there.", 'start': 10616.525, 'duration': 2.443}, {'end': 10621.031, 'text': 'Otherwise, I will create a separate folder for it.', 'start': 10619.088, 'duration': 1.943}, {'end': 10625.758, 'text': "So I'm gonna click here, open prefab and attach our deactivate game object component.", 'start': 10621.071, 'duration': 4.687}, {'end': 10628.459, 'text': "and I'm gonna double click and open it here.", 'start': 10626.599, 'duration': 1.86}, {'end': 10641.542, 'text': "So simply what we need is one script and here I'm gonna say void or actually one function void deactivate game object or deactivate after time.", 'start': 10628.96, 'duration': 12.582}, {'end': 10645.983, 'text': "This is what I'm gonna do here and we're gonna have a public float time.", 'start': 10642.042, 'duration': 3.941}, {'end': 10654.725, 'text': "So you can say here public float timer is equal to two F and here I'm simply gonna say game object.", 'start': 10646.403, 'duration': 8.322}, {'end': 10659.83, 'text': 'game object set active is false and voila.', 'start': 10655.965, 'duration': 3.865}], 'summary': 'Demonstrated addition of hit effects to the enemy, adjusted size, and deactivated unused effects for optimization.', 'duration': 167.933, 'max_score': 10491.897, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs10491897.jpg'}, {'end': 10616.204, 'src': 'embed', 'start': 10589.232, 'weight': 2, 'content': [{'end': 10595.353, 'text': "All of these hit effects, they are still here in the hierarchy and they're active.", 'start': 10589.232, 'duration': 6.121}, {'end': 10600.415, 'text': "When they are active and we don't need, we don't have a need for them, they're taking up memory.", 'start': 10595.513, 'duration': 4.902}, {'end': 10606.056, 'text': "So what we need to do here is go in scripts and I'm gonna put that in the helper script.", 'start': 10600.455, 'duration': 5.601}, {'end': 10612.979, 'text': "So here I'm gonna create a new C sharp script and I'm gonna say this one deactivate game object,", 'start': 10606.096, 'duration': 6.883}, {'end': 10616.204, 'text': "because this is the only script that we're gonna have for effects.", 'start': 10612.979, 'duration': 3.225}], 'summary': 'Unused hit effects in the hierarchy are taking up memory, requiring a new script to deactivate game objects.', 'duration': 26.972, 'max_score': 10589.232, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs10589232.jpg'}, {'end': 10973.003, 'src': 'embed', 'start': 10941.485, 'weight': 4, 'content': [{'end': 10946.348, 'text': 'If I select the enemy and remember his animations for falling down.', 'start': 10941.485, 'duration': 4.863}, {'end': 10952.972, 'text': 'So if I go here and we have all of these animations, we have knock up, down and knock and then we have stand up.', 'start': 10946.428, 'duration': 6.544}, {'end': 10960.576, 'text': "Remember all of these animations? Well, this is where they are gonna happen or actually this is where we're gonna send the signal for them to happen.", 'start': 10953.012, 'duration': 7.564}, {'end': 10963.378, 'text': 'So after we instantiate the hit effect,', 'start': 10960.956, 'duration': 2.422}, {'end': 10973.003, 'text': "we're gonna test here if our game object dot compare tag and this is same as saying game object dot tag is equal to and comparing the tag.", 'start': 10963.378, 'duration': 9.625}], 'summary': 'In the game, animation signals are triggered based on enemy actions and game object tags.', 'duration': 31.518, 'max_score': 10941.485, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs10941485.jpg'}, {'end': 11062.324, 'src': 'embed', 'start': 11038.744, 'weight': 0, 'content': [{'end': 11045.467, 'text': "Now first of all we need to create the health script to see this in effect so let's go inside of our Unity.", 'start': 11038.744, 'duration': 6.723}, {'end': 11051.06, 'text': "And let's go in the project, in scripts, player scripts.", 'start': 11046.758, 'duration': 4.302}, {'end': 11055.781, 'text': "I'm also gonna leave here the health script or actually we can leave the universal scripts here.", 'start': 11051.12, 'duration': 4.661}, {'end': 11059.883, 'text': 'So I can create a folder for universal scripts.', 'start': 11055.821, 'duration': 4.062}, {'end': 11062.324, 'text': 'So what are some universal scripts that we have?', 'start': 11060.443, 'duration': 1.881}], 'summary': 'Creating a health script in unity for universal scripts.', 'duration': 23.58, 'max_score': 11038.744, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs11038744.jpg'}, {'end': 12349.003, 'src': 'embed', 'start': 12319.971, 'weight': 3, 'content': [{'end': 12325.312, 'text': 'We connected the animations, we connected the tagging on the player child here for our punches.', 'start': 12319.971, 'duration': 5.341}, {'end': 12328.052, 'text': 'So we have for the kick, we are tagging it here.', 'start': 12325.372, 'duration': 2.68}, {'end': 12331.113, 'text': 'We also have for the punch, we are tagging the punch here.', 'start': 12328.092, 'duration': 3.021}, {'end': 12340.678, 'text': "And when the animation ends, we untag the punch because we don't want the left hand to be tagged this whole time because the first attack is this one.", 'start': 12331.913, 'duration': 8.765}, {'end': 12342.319, 'text': 'This is our first attack.', 'start': 12341.279, 'duration': 1.04}, {'end': 12344.44, 'text': "It's attacking with the left hand.", 'start': 12342.419, 'duration': 2.021}, {'end': 12349.003, 'text': "We don't want to be able to knock him down with that punch.", 'start': 12344.801, 'duration': 4.202}], 'summary': 'Animations and tagging used for punch and kick attacks in game development.', 'duration': 29.032, 'max_score': 12319.971, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs12319971.jpg'}], 'start': 10240.422, 'title': 'Game development techniques', 'summary': 'Covers game attack functions, hit effects, unity game scripting, object tagging, and connecting scripts to animations, detailing techniques and code used for these actions.', 'chapters': [{'end': 10417.398, 'start': 10240.422, 'title': 'Game attack function and special effects', 'summary': 'Explains the process of attacking the enemy, chaining combos, and spawning special effects in a game development scenario, detailing the code and techniques used for these actions.', 'duration': 176.976, 'highlights': ['The chapter explains the process of attacking the enemy, chaining combos, and spawning special effects in a game development scenario. The focus of the chapter is on attacking the enemy, chaining combos, and spawning special effects.', 'The code demonstrates chaining combos by hitting the enemy two times and changing the combo to include leg attacks. The code showcases chaining combos by hitting the enemy two times and adapting the combo to include leg attacks.', 'The process of spawning special effects when hitting the player or the enemy is detailed, including the position calculations and instantiation techniques. The process of spawning special effects is explained, covering position calculations and instantiation techniques for hitting the player or the enemy.']}, {'end': 10963.378, 'start': 10417.858, 'title': 'Game hit effects and object deactivation', 'summary': "Demonstrates the process of attaching hit effects to players' attacks, adjusting hit effect size, and deactivating game objects to optimize memory usage, while also explaining the considerations for spawning hit effects and dealing damage to the enemy.", 'duration': 545.52, 'highlights': ["The chapter demonstrates the process of attaching hit effects to players' attacks, adjusting hit effect size, and deactivating game objects to optimize memory usage. Attaching hit effects to player attacks, adjusting hit effect size, and deactivating game objects to optimize memory usage.", 'The chapter discusses the considerations for spawning hit effects and dealing damage to the enemy. Considerations for spawning hit effects and dealing damage to the enemy.', 'The chapter explains the process of testing and adjusting the position of hit effects in the game space based on player and enemy positioning. Testing and adjusting hit effects based on player and enemy positioning in the game space.']}, {'end': 11495.659, 'start': 10963.378, 'title': 'Unity game scripting', 'summary': 'Covers unity game scripting, including creating a health script for the player and enemy, applying damage, and controlling character animations, with a focus on modular and universal scripts, and the use of conditional statements for character reactions based on randomization and health status.', 'duration': 532.281, 'highlights': ['The chapter covers Unity game scripting, including creating a health script for the player and enemy, applying damage, and controlling character animations, with a focus on modular and universal scripts, and the use of conditional statements for character reactions based on randomization and health status.', 'The health script includes a public float variable for health, private variables for character animation and enemy movement, and boolean variables for character status and player ownership of the script.', 'The apply damage function within the health script calculates the health reduction, displays the updated health value, controls character death, and deactivates the enemy script if the player owns the script, with conditional statements for character reactions based on randomization and health status.']}, {'end': 11961.94, 'start': 11496.08, 'title': 'Unity game object tagging', 'summary': 'Provides a detailed guide on how to tag and untag game object parts in unity, ensuring they are properly synchronized with the corresponding animations, enabling specific attacks to be recognized and causing damage and potential knockdowns based on the tagged parts.', 'duration': 465.86, 'highlights': ['The chapter explains how to tag and untag game object parts in Unity, ensuring proper synchronization with corresponding animations for specific attacks. Explanation of tagging and untagging game object parts for Unity animations.', 'The tutorial outlines the importance of tagging and untagging game object parts for specific attacks, enabling damage and potential knockdowns based on the tagged parts. Importance of tagging and untagging for enabling specific attacks, damage, and potential knockdowns.', 'The chapter discusses the process of synchronizing tagged game object parts with animations for specific attacks, ensuring proper recognition and impact on the game environment. Synchronization of tagged game object parts with animations for specific attacks and their impact on the game environment.']}, {'end': 12365.412, 'start': 11961.96, 'title': 'Connecting script and animations', 'summary': 'Discusses connecting the script to animations, including explaining the use of coroutine, applying damage, and randomizing enemy reactions in unity game development.', 'duration': 403.452, 'highlights': ['Applying damage and playing animations based on enemy reactions. The transcript explains the process of applying damage, playing animations based on enemy reactions, and randomizing enemy behaviors in Unity game development.', 'Using coroutine to create a delay for enemy stand-up animation. The use of coroutine to create a delay for the enemy stand-up animation is explained, with a specific wait time of two seconds before calling the stand-up animation.', 'Tagging specific attacks to trigger animations and applying damage. The process of tagging specific attacks to trigger animations and applying damage, including isolating punches for specific attacks and untagging after specific animations, is detailed in the transcript.']}], 'duration': 2124.99, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs10240422.jpg', 'highlights': ['The chapter covers Unity game scripting, including creating a health script for the player and enemy, applying damage, and controlling character animations, with a focus on modular and universal scripts, and the use of conditional statements for character reactions based on randomization and health status.', 'The process of spawning special effects when hitting the player or the enemy is detailed, including the position calculations and instantiation techniques.', "The chapter demonstrates the process of attaching hit effects to players' attacks, adjusting hit effect size, and deactivating game objects to optimize memory usage.", 'The chapter explains how to tag and untag game object parts in Unity, ensuring proper synchronization with corresponding animations for specific attacks.', 'Applying damage and playing animations based on enemy reactions.']}, {'end': 14114.135, 'segs': [{'end': 12417.441, 'src': 'embed', 'start': 12389.203, 'weight': 0, 'content': [{'end': 12398.567, 'text': 'we are also going to create a private audio clip array where we are going to have our whoosh sound, so whoosh, underscore sound.', 'start': 12389.203, 'duration': 9.364}, {'end': 12401.447, 'text': "we're also going to have a fall sound.", 'start': 12398.567, 'duration': 2.88}, {'end': 12407.252, 'text': "we're going to have a ground hit sound and the dead sound like this", 'start': 12401.447, 'duration': 5.805}, {'end': 12409.374, 'text': 'Now these are going to be serialized fields.', 'start': 12407.312, 'duration': 2.062}, {'end': 12417.441, 'text': 'We set them to be private, but we want them to be visible in the inspector panel because we want to get a reference or we want to attach them.', 'start': 12409.974, 'duration': 7.467}], 'summary': 'Creating private audio clip array with whoosh, fall, ground hit, and dead sounds as serialized fields.', 'duration': 28.238, 'max_score': 12389.203, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs12389203.jpg'}, {'end': 12468.05, 'src': 'embed', 'start': 12432.705, 'weight': 2, 'content': [{'end': 12436.949, 'text': "We're also going to get our audio source, which is gonna be equal to get component.", 'start': 12432.705, 'duration': 4.244}, {'end': 12442.116, 'text': 'So get component audio source component.', 'start': 12438.314, 'duration': 3.802}, {'end': 12446.578, 'text': 'We also are going to get our enemy movement.', 'start': 12442.876, 'duration': 3.702}, {'end': 12453.061, 'text': "So we're gonna test here, if our game object that compare tag to tags, that enemy tag.", 'start': 12446.598, 'duration': 6.463}, {'end': 12457.724, 'text': 'So if the game object holding this script is the enemy,', 'start': 12453.721, 'duration': 4.003}, {'end': 12468.05, 'text': 'we are going to say here enemy movement is equal to get component in parent and that one is gonna be enemy movement like this', 'start': 12457.724, 'duration': 10.326}], 'summary': 'Obtaining audio source and enemy movement components to detect and control enemy movement in the game.', 'duration': 35.345, 'max_score': 12432.705, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs12432705.jpg'}, {'end': 12642.154, 'src': 'embed', 'start': 12617.354, 'weight': 3, 'content': [{'end': 12623.956, 'text': 'So now when we go back, we are gonna have all of those as separate audio clips.', 'start': 12617.354, 'duration': 6.602}, {'end': 12629.166, 'text': 'So select the player child and enemy child, but first of all, we need to go here in our sounds.', 'start': 12623.996, 'duration': 5.17}, {'end': 12631.848, 'text': 'player child, enemy child.', 'start': 12630.267, 'duration': 1.581}, {'end': 12634.93, 'text': 'So we need to drag and drop here the whoosh sound, here it is.', 'start': 12631.908, 'duration': 3.022}, {'end': 12642.154, 'text': 'So whoosh sound, we have the fall sound, and let me just player knock down, I think this is the one.', 'start': 12635.03, 'duration': 7.124}], 'summary': 'Separate audio clips created for player and enemy child with whoosh, fall, and knock down sounds.', 'duration': 24.8, 'max_score': 12617.354, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs12617354.jpg'}, {'end': 12929.756, 'src': 'embed', 'start': 12898.096, 'weight': 4, 'content': [{'end': 12902.142, 'text': 'Add the animation event and go here, attack FX sound.', 'start': 12898.096, 'duration': 4.046}, {'end': 12903.083, 'text': 'This is for the player.', 'start': 12902.182, 'duration': 0.901}, {'end': 12908.11, 'text': 'Now when it comes to the enemy, we want to have one when he falls down, so select the enemy here.', 'start': 12903.103, 'duration': 5.007}, {'end': 12910.271, 'text': 'so when we knock him up.', 'start': 12909.111, 'duration': 1.16}, {'end': 12912.932, 'text': 'you see, he knocked up this right here.', 'start': 12910.271, 'duration': 2.661}, {'end': 12914.832, 'text': 'this is the first initial knock.', 'start': 12912.932, 'duration': 1.9}, {'end': 12921.634, 'text': "so when he starts falling on the second or actually on the first frame, i'm gonna click and add an animation event,", 'start': 12914.832, 'duration': 6.802}, {'end': 12929.756, 'text': "and there i am going to select enemy knock down, and this is the sound that he's gonna play like, he is hurt and when he falls on the ground,", 'start': 12921.634, 'duration': 8.122}], 'summary': 'Adding animation events for player and enemy, including knock down sound effects.', 'duration': 31.66, 'max_score': 12898.096, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs12898096.jpg'}, {'end': 13003.78, 'src': 'embed', 'start': 12969.012, 'weight': 5, 'content': [{'end': 12974.214, 'text': 'And actually we, are we actually, why is this here? Let me just go and test it out quickly.', 'start': 12969.012, 'duration': 5.202}, {'end': 12986.758, 'text': 'So attack points, why do we have attack points? For some reason, our leg attack point is not turning off.', 'start': 12974.274, 'duration': 12.484}, {'end': 12990.806, 'text': 'So let me go and test that out and see what is the reason.', 'start': 12987.682, 'duration': 3.124}, {'end': 12994.45, 'text': 'So select the player here quickly.', 'start': 12991.747, 'duration': 2.703}, {'end': 12997.193, 'text': 'Player, child, kick.', 'start': 12995.731, 'duration': 1.462}, {'end': 12999.155, 'text': 'So we should turn it off.', 'start': 12997.994, 'duration': 1.161}, {'end': 13002.119, 'text': 'Leg off and kick two.', 'start': 12999.736, 'duration': 2.383}, {'end': 13003.78, 'text': 'We should also leg on.', 'start': 13002.139, 'duration': 1.641}], 'summary': "Testing and troubleshooting leg attack points for player's kick action.", 'duration': 34.768, 'max_score': 12969.012, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs12969012.jpg'}, {'end': 13121.832, 'src': 'embed', 'start': 13091.098, 'weight': 8, 'content': [{'end': 13091.839, 'text': "It's working now.", 'start': 13091.098, 'duration': 0.741}, {'end': 13095.884, 'text': 'Anyways, you see or hear enemies sound.', 'start': 13092.319, 'duration': 3.565}, {'end': 13099.067, 'text': 'where we play it.', 'start': 13096.624, 'duration': 2.443}, {'end': 13106.934, 'text': 'So when we hurt him, we see that or hear that hurt sound and then he falls on the ground and then we hear the falling on the ground sound.', 'start': 13099.207, 'duration': 7.727}, {'end': 13113.86, 'text': "We will add the camera shade, but before we add that, I'm going to show you why we need this right here, why we need the enemy movement.", 'start': 13106.954, 'duration': 6.906}, {'end': 13115.262, 'text': 'We need to disable it.', 'start': 13113.96, 'duration': 1.302}, {'end': 13118.244, 'text': 'And the reason why we need to disable it is the following.', 'start': 13115.982, 'duration': 2.262}, {'end': 13121.832, 'text': 'all of this time it is enabled or actually disabled.', 'start': 13119.186, 'duration': 2.646}], 'summary': 'Game development: discussing enemy movement and sound effects.', 'duration': 30.734, 'max_score': 13091.098, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs13091098.jpg'}, {'end': 13168.031, 'src': 'embed', 'start': 13137.88, 'weight': 6, 'content': [{'end': 13142.944, 'text': "He falls down and he, you see? I mean, I don't need to explain to you.", 'start': 13137.88, 'duration': 5.064}, {'end': 13144.105, 'text': 'You saw that on your own.', 'start': 13142.984, 'duration': 1.121}, {'end': 13146.127, 'text': "That's why we need to disable the movement.", 'start': 13144.145, 'duration': 1.982}, {'end': 13150.49, 'text': 'So we need to go back here, below our enemy hit ground.', 'start': 13146.147, 'duration': 4.343}, {'end': 13153.753, 'text': 'So we need to create void, disable movement.', 'start': 13150.51, 'duration': 3.243}, {'end': 13163.81, 'text': "So it's movement and here, and simply here we need to call our enemy movement enabled is equal to false.", 'start': 13155.208, 'duration': 8.602}, {'end': 13168.031, 'text': 'And here we need to call void enable movement.', 'start': 13164.17, 'duration': 3.861}], 'summary': 'Need to disable enemy movement to prevent falling down.', 'duration': 30.151, 'max_score': 13137.88, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs13137880.jpg'}, {'end': 13335.442, 'src': 'embed', 'start': 13310.205, 'weight': 7, 'content': [{'end': 13315.228, 'text': 'I want to avoid being able to attack the enemy while he is on the ground.', 'start': 13310.205, 'duration': 5.023}, {'end': 13317.09, 'text': 'What does that mean? And we can test it like this.', 'start': 13315.309, 'duration': 1.781}, {'end': 13318.291, 'text': 'I can go here.', 'start': 13317.59, 'duration': 0.701}, {'end': 13319.331, 'text': 'I can select the enemy.', 'start': 13318.311, 'duration': 1.02}, {'end': 13320.772, 'text': "I'm going to disable the movement.", 'start': 13319.351, 'duration': 1.421}, {'end': 13322.413, 'text': 'And pay attention now.', 'start': 13321.533, 'duration': 0.88}, {'end': 13325.756, 'text': 'Even when the enemy is on the ground, I will be able to attack him.', 'start': 13322.574, 'duration': 3.182}, {'end': 13327.317, 'text': "So I'm going to try and knock him down.", 'start': 13325.816, 'duration': 1.501}, {'end': 13331.6, 'text': "You see, I'm attacking.", 'start': 13330.619, 'duration': 0.981}, {'end': 13334.101, 'text': "You see, I'm still attacking.", 'start': 13331.64, 'duration': 2.461}, {'end': 13335.442, 'text': 'And you see the effect.', 'start': 13334.382, 'duration': 1.06}], 'summary': 'Testing disabling enemy movement to attack on ground successful.', 'duration': 25.237, 'max_score': 13310.205, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs13310205.jpg'}, {'end': 13722.259, 'src': 'embed', 'start': 13693.77, 'weight': 9, 'content': [{'end': 13708.021, 'text': "we're gonna say transform.localPosition is gonna be equal to the start position plus the random inside unit sphere multiplied with power.", 'start': 13693.77, 'duration': 14.251}, {'end': 13709.902, 'text': 'Now, what am I doing here??', 'start': 13708.141, 'duration': 1.761}, {'end': 13710.683, 'text': 'What is this??', 'start': 13710.062, 'duration': 0.621}, {'end': 13720.218, 'text': 'Well, we are simply distorting, so to say, the local position by using the star position, which is the local position again,', 'start': 13711.553, 'duration': 8.665}, {'end': 13722.259, 'text': 'plus the random inside unit sphere.', 'start': 13720.218, 'duration': 2.041}], 'summary': 'Transforming local position using start position and random inside unit sphere.', 'duration': 28.489, 'max_score': 13693.77, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs13693770.jpg'}, {'end': 13797.315, 'src': 'embed', 'start': 13771.414, 'weight': 10, 'content': [{'end': 13779.278, 'text': "Now here we're going to say duration and we're going to say minus equals to time.deltaTime multiplied with the slow down amount.", 'start': 13771.414, 'duration': 7.864}, {'end': 13784.24, 'text': 'Now, slow down amount is basically the smooth variable.', 'start': 13779.298, 'duration': 4.942}, {'end': 13786.241, 'text': 'to smooth out, the duration.', 'start': 13784.24, 'duration': 2.001}, {'end': 13790.544, 'text': 'minus equals time.deltaTime, because we know that delta time is a very small time.', 'start': 13786.241, 'duration': 4.303}, {'end': 13792.845, 'text': 'The time it took in seconds to complete the last script.', 'start': 13790.564, 'duration': 2.281}, {'end': 13797.315, 'text': 'Basically the time between frames, this is time.deltaTime.', 'start': 13794.232, 'duration': 3.083}], 'summary': 'Script reduces duration by time.deltatime * slow down amount.', 'duration': 25.901, 'max_score': 13771.414, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs13771414.jpg'}, {'end': 14011.739, 'src': 'embed', 'start': 13977.696, 'weight': 11, 'content': [{'end': 13982.759, 'text': 'So we need to say here void shake camera on fall like this.', 'start': 13977.696, 'duration': 5.063}, {'end': 13989.724, 'text': 'So we need to call our variable should shake and set it to true but we set it here to be private.', 'start': 13983.179, 'duration': 6.545}, {'end': 13994.167, 'text': 'Now we can set it to be public but another way is to create an accessor.', 'start': 13990.104, 'duration': 4.063}, {'end': 13999.991, 'text': 'And for that we can simply say here public bool Should shake and pay attention.', 'start': 13994.648, 'duration': 5.343}, {'end': 14011.739, 'text': "It's uh, as you can see all Caps, so should and shake it's s our capital letters not as here so that we can differentiate it This is what I mean.", 'start': 14000.131, 'duration': 11.608}], 'summary': "To enable camera shake, set variable 'should shake' to public bool.", 'duration': 34.043, 'max_score': 13977.696, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs13977696.jpg'}, {'end': 14125.063, 'src': 'embed', 'start': 14095.754, 'weight': 12, 'content': [{'end': 14098.477, 'text': "it does not matter if I'm creating tutorials for you to watch.", 'start': 14095.754, 'duration': 2.723}, {'end': 14099.979, 'text': 'you still need to learn a lot.', 'start': 14098.477, 'duration': 1.502}, {'end': 14101.5, 'text': 'So you still need to learn a lot.', 'start': 14100.019, 'duration': 1.481}, {'end': 14108.428, 'text': 'And every day or actually learn every day same as I am doing and I watch other tutorials, I watch other channels.', 'start': 14102.001, 'duration': 6.427}, {'end': 14114.135, 'text': 'So yeah, credit for Renaissance coders for their script right here.', 'start': 14108.889, 'duration': 5.246}, {'end': 14120.08, 'text': 'I was lazy to create something on my own and I also wanted to teach you that you should always, always learn.', 'start': 14114.375, 'duration': 5.705}, {'end': 14125.063, 'text': 'Okay, now we have our shake camera on fall inside of the awake function.', 'start': 14120.74, 'duration': 4.323}], 'summary': "Emphasizing the importance of continuous learning while creating tutorials. acknowledges renaissance coders' script and encourages constant learning.", 'duration': 29.309, 'max_score': 14095.754, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs14095754.jpg'}], 'start': 12365.432, 'title': 'Implementing character sound effects, setting up enemy audio, debugging game mechanics, and shake camera script in unity', 'summary': 'Discusses implementing character sound effects with private audio source and clip array. it covers setting up audio components for an enemy character, debugging attack points, implementing game mechanics, and creating a shake camera script in unity for camera shake effect.', 'chapters': [{'end': 12409.374, 'start': 12365.432, 'title': 'Implementing character sound effects', 'summary': 'Discusses implementing character sound effects by creating a private audio source and audio clip array for whoosh, fall, ground hit, and dead sound, all as serialized fields.', 'duration': 43.942, 'highlights': ['Creating a private audio source and audio clip array for different character sound effects, such as whoosh, fall, ground hit, and dead sound.', 'Implementing these sound effects as serialized fields for easy access and modification in the script.']}, {'end': 12968.332, 'start': 12409.974, 'title': 'Setting up enemy audio', 'summary': 'Covers setting up audio components for an enemy character, including attaching audio sources and creating sound effects for various actions such as attacking, falling, and dying.', 'duration': 558.358, 'highlights': ['Attaching audio source components and enemy movement script in Awake function Attaching audio source components and enemy movement script in Awake function to ensure that the enemy is tagged correctly and audio sources are attached.', 'Setting up specific audio clips for different actions such as attack, knockdown, and death Assigning specific audio clips for different actions such as attack, knockdown, and death, ensuring that each action has an appropriate sound effect.', 'Adding animation events to trigger sound effects during specific frames of player and enemy animations Adding animation events to trigger sound effects during specific frames of player and enemy animations, ensuring that sound effects are synchronized with the corresponding actions.']}, {'end': 13693.77, 'start': 12969.012, 'title': 'Debugging and implementing game mechanics', 'summary': 'Covers debugging issues with attack points and implementing game mechanics like disabling enemy movement and preventing attacks while the enemy is on the ground, and adding a camera shake effect upon enemy falling, enhancing the game experience.', 'duration': 724.758, 'highlights': ['Debugging attack points and movement issues The speaker troubleshoots the issue of attack points not turning off and debugs left leg attack on/off problems.', 'Implementing enemy movement control The speaker explains the need to disable enemy movement to prevent unintended attacks, and demonstrates the creation of void disable movement and void enable movement functions.', 'Preventing attacks when enemy is on the ground The speaker addresses the issue of being able to attack the enemy while on the ground and implements a solution by changing collision layers to prevent attacks on the grounded enemy.', 'Adding camera shake effect upon enemy falling The speaker introduces the implementation of a camera shake effect upon the enemy falling, outlining the script and parameters required for the effect.']}, {'end': 14114.135, 'start': 13693.77, 'title': 'Shake camera script in unity', 'summary': 'Explains the process of creating a shake camera script in unity, using transform.localposition and time.deltatime to distort the camera position and create a camera shake effect. it also demonstrates the use of accessors to modify a private variable and provides credit to the original source of the script.', 'duration': 420.365, 'highlights': ['The script utilizes transform.localPosition and random inside unit sphere to distort the camera position and create a camera shake effect. The script uses transform.localPosition and random inside unit sphere to distort the camera position, achieving a camera shake effect.', 'The use of time.deltaTime and slow down amount in the script to smooth out the duration and gradually decrease the shake effect. time.deltaTime and slow down amount are used to smooth out the duration and gradually decrease the shake effect, providing a controlled camera shake experience.', "Demonstrates the creation of accessors to modify a private variable and enable the shake camera functionality. The chapter demonstrates the creation of accessors to modify a private variable and enable the shake camera functionality, enhancing the script's reusability and modifiability.", "The chapter provides credit to the original source, Renaissance Coder, and emphasizes the importance of continuous learning in the field. The chapter provides credit to the original source, Renaissance Coder, and emphasizes the importance of continuous learning in the field, promoting a culture of acknowledging and learning from others' work."]}], 'duration': 1748.703, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs12365432.jpg', 'highlights': ['Creating a private audio source and audio clip array for different character sound effects, such as whoosh, fall, ground hit, and dead sound.', 'Implementing these sound effects as serialized fields for easy access and modification in the script.', 'Attaching audio source components and enemy movement script in Awake function to ensure that the enemy is tagged correctly and audio sources are attached.', 'Setting up specific audio clips for different actions such as attack, knockdown, and death, ensuring that each action has an appropriate sound effect.', 'Adding animation events to trigger sound effects during specific frames of player and enemy animations, ensuring that sound effects are synchronized with the corresponding actions.', 'Debugging attack points and movement issues, troubleshooting the issue of attack points not turning off and debugs left leg attack on/off problems.', 'Implementing enemy movement control, explaining the need to disable enemy movement to prevent unintended attacks, and demonstrating the creation of void disable movement and void enable movement functions.', 'Preventing attacks when enemy is on the ground by changing collision layers to prevent attacks on the grounded enemy.', 'Adding camera shake effect upon enemy falling, introducing the implementation of a camera shake effect upon the enemy falling, outlining the script and parameters required for the effect.', 'The script utilizes transform.localPosition and random inside unit sphere to distort the camera position and create a camera shake effect.', 'The use of time.deltaTime and slow down amount in the script to smooth out the duration and gradually decrease the shake effect, providing a controlled camera shake experience.', "Demonstrates the creation of accessors to modify a private variable and enable the shake camera functionality, enhancing the script's reusability and modifiability.", "The chapter provides credit to the original source, Renaissance Coder, and emphasizes the importance of continuous learning in the field, promoting a culture of acknowledging and learning from others' work."]}, {'end': 15255.947, 'segs': [{'end': 14211.937, 'src': 'embed', 'start': 14186.781, 'weight': 0, 'content': [{'end': 14196.047, 'text': 'And by the way, if you are wondering why our enemy is now attacking us, the reason for that is, if you remember, enable movement.', 'start': 14186.781, 'duration': 9.266}, {'end': 14197.748, 'text': 'so we are enabling the movement.', 'start': 14196.047, 'duration': 1.701}, {'end': 14200.49, 'text': "we're setting it back to true, if you remember, when we stand up.", 'start': 14197.748, 'duration': 2.742}, {'end': 14210.456, 'text': 'so if i select the enemy child and go here into the stand up at the actually knock down stand up, here it is last frame.', 'start': 14200.49, 'duration': 9.966}, {'end': 14211.937, 'text': 'we call enable movement now.', 'start': 14210.456, 'duration': 1.481}], 'summary': "Enabling movement to true triggers enemy's attacks.", 'duration': 25.156, 'max_score': 14186.781, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs14186781.jpg'}, {'end': 14271.505, 'src': 'embed', 'start': 14225.249, 'weight': 1, 'content': [{'end': 14233.701, 'text': 'This is really cool because the sound effect and the shake effect sync together and make a really cool effect for our game.', 'start': 14225.249, 'duration': 8.452}, {'end': 14234.221, 'text': 'So pay attention now.', 'start': 14233.721, 'duration': 0.5}, {'end': 14242.458, 'text': 'So you saw it, the camera shakes just a little bit and it really looks cool.', 'start': 14236.897, 'duration': 5.561}, {'end': 14251.241, 'text': 'So really looks cool and this is how you create those shake camera effects in almost every 2D platformer and similar games that you see.', 'start': 14242.578, 'duration': 8.663}, {'end': 14259.563, 'text': 'Moving forward, let us attach the attack points on our enemy because we did it for our player so far and we need to do it the same for the enemy.', 'start': 14251.641, 'duration': 7.922}, {'end': 14266.469, 'text': 'Now, before you proceed, my challenge for you is stop the video right now, pause it and try to do that on your own.', 'start': 14259.603, 'duration': 6.866}, {'end': 14271.505, 'text': 'So you will need to attach attack points on the enemy and make the enemy attack the player and deal damage.', 'start': 14266.529, 'duration': 4.976}], 'summary': 'Demonstrating shake camera effect and attaching attack points to enemy in 2d platformer game development.', 'duration': 46.256, 'max_score': 14225.249, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs14225249.jpg'}, {'end': 14552.493, 'src': 'embed', 'start': 14525.286, 'weight': 4, 'content': [{'end': 14531.069, 'text': 'Now we can select the enemy child and we can go here and we can attach these at the appropriate slots.', 'start': 14525.286, 'duration': 5.783}, {'end': 14533.55, 'text': 'So we have the left arm attack point.', 'start': 14531.409, 'duration': 2.141}, {'end': 14535.731, 'text': 'Here it is, enemy left hand.', 'start': 14533.59, 'duration': 2.141}, {'end': 14537.792, 'text': 'This is for the right arm.', 'start': 14536.432, 'duration': 1.36}, {'end': 14541.094, 'text': 'Here it is, enemy right hand, excuse me.', 'start': 14537.832, 'duration': 3.262}, {'end': 14549.049, 'text': 'and we have the left leg, right leg, here it is, enemy right leg, here it is, voila.', 'start': 14542.082, 'duration': 6.967}, {'end': 14552.493, 'text': 'And now I can go here and I can override all.', 'start': 14549.51, 'duration': 2.983}], 'summary': 'Select enemy child, attach at appropriate slots, left arm, right arm, left leg, right leg, and override all.', 'duration': 27.207, 'max_score': 14525.286, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs14525286.jpg'}, {'end': 14633.402, 'src': 'embed', 'start': 14604.353, 'weight': 5, 'content': [{'end': 14609.219, 'text': "So I'm gonna click on the animation event filter here for the right arm attack on.", 'start': 14604.353, 'duration': 4.866}, {'end': 14614.686, 'text': 'so click on right arm attack on and one, two, three.', 'start': 14609.219, 'duration': 5.467}, {'end': 14616.549, 'text': 'I think this is okay.', 'start': 14614.686, 'duration': 1.863}, {'end': 14618.591, 'text': 'maybe just two more frames, one, two.', 'start': 14616.549, 'duration': 2.042}, {'end': 14622.45, 'text': 'Okay, here, exactly, on frame 13.', 'start': 14619.727, 'duration': 2.723}, {'end': 14628.557, 'text': "I'm gonna click on another animation event and go here and write arm attack off, voila.", 'start': 14622.45, 'duration': 6.107}, {'end': 14630.879, 'text': 'And now we also need to do that for the leg.', 'start': 14629.278, 'duration': 1.601}, {'end': 14633.402, 'text': 'So we need enemy attack three.', 'start': 14631.5, 'duration': 1.902}], 'summary': 'Configuring animation events for right arm and leg attacks, adjusting frames and adding enemy attack three.', 'duration': 29.049, 'max_score': 14604.353, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs14604353.jpg'}, {'end': 14786.153, 'src': 'embed', 'start': 14759.856, 'weight': 6, 'content': [{'end': 14767.1, 'text': "I'm gonna turn on enemy's movement script so that enemy can come close to us and we are going to test it out.", 'start': 14759.856, 'duration': 7.244}, {'end': 14769.902, 'text': 'So pay attention at the health script.', 'start': 14767.881, 'duration': 2.021}, {'end': 14772.764, 'text': 'Currently the health value is set at 100.', 'start': 14769.942, 'duration': 2.822}, {'end': 14778.207, 'text': 'So now, when the enemy comes closer to us and starts attacking us, bam, you see, now health is 98.', 'start': 14772.764, 'duration': 5.443}, {'end': 14786.153, 'text': 'now health is 96, health now is 94, so on and so forth 92, blah, blah, blah.', 'start': 14778.207, 'duration': 7.946}], 'summary': 'Testing enemy movement script with health set at 100, decreases by 2 when attacked.', 'duration': 26.297, 'max_score': 14759.856, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs14759856.jpg'}, {'end': 14861.305, 'src': 'embed', 'start': 14808.748, 'weight': 7, 'content': [{'end': 14812.854, 'text': "So here, left leg, I'm gonna set the damage to be equal to five.", 'start': 14808.748, 'duration': 4.106}, {'end': 14817.82, 'text': "Right like actually I'm gonna set every damage to be equal to 5 for the player.", 'start': 14813.374, 'duration': 4.446}, {'end': 14825.869, 'text': "For the enemy I'm going to leave it at 2 because we are gonna use an enemy spawner who's gonna spawn infinite number of enemies when the enemy dies.", 'start': 14817.84, 'duration': 8.029}, {'end': 14832.337, 'text': 'So for all attack points for the player set the damage to 5 so that we can actually kill the enemy.', 'start': 14826.249, 'duration': 6.088}, {'end': 14836.038, 'text': 'and see his death animation playing out.', 'start': 14832.937, 'duration': 3.101}, {'end': 14839.139, 'text': 'Now we will need to do a couple of things when that happens.', 'start': 14836.398, 'duration': 2.741}, {'end': 14840.819, 'text': 'But first of all, let me show you.', 'start': 14839.179, 'duration': 1.64}, {'end': 14846.261, 'text': "So if I go here and if I select the enemy, pay attention, enemy's health.", 'start': 14841.319, 'duration': 4.942}, {'end': 14851.882, 'text': "So currently, you see enemy currently has health 85 and I'm going to kill him.", 'start': 14846.661, 'duration': 5.221}, {'end': 14852.582, 'text': 'Pay attention now.', 'start': 14852.062, 'duration': 0.52}, {'end': 14856.783, 'text': 'Pay attention now, health is 70.', 'start': 14853.983, 'duration': 2.8}, {'end': 14858.504, 'text': 'So come on, go back here.', 'start': 14856.783, 'duration': 1.721}, {'end': 14861.305, 'text': 'And again, 55.', 'start': 14860.464, 'duration': 0.841}], 'summary': "Player's attack damage set to 5, enemy's health decreases by 15 per attack.", 'duration': 52.557, 'max_score': 14808.748, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs14808748.jpg'}], 'start': 14114.375, 'title': 'Enhancing game dynamics', 'summary': "Covers creating shake camera effects, synchronizing sound and visual effects, enabling enemy movement, attaching attack points to the enemy's left hand, right hand, and right leg, setting up animation events for enemy attacks, implementing enemy attack and player health, setting up damage values, testing health changes, and managing enemy and player death animations, resulting in an engaging 2d platformer game.", 'chapters': [{'end': 14251.241, 'start': 14114.375, 'title': 'Creating shake camera effects', 'summary': 'Demonstrates the process of creating a shake camera effect in unity, synchronizing sound and visual effects to enhance the game experience, and enabling enemy movement to attack the player, resulting in an engaging 2d platformer game.', 'duration': 136.866, 'highlights': ['The process of creating a shake camera effect in Unity, synchronizing sound and visual effects to enhance the game experience.', 'Enabling enemy movement to attack the player, resulting in an engaging 2D platformer game.', 'Demonstrating the synchronization of sound and visual effects to create an engaging game experience.', 'Detailing the steps to create shake camera effects in 2D platformer and similar games.']}, {'end': 14665.564, 'start': 14251.641, 'title': 'Attaching attack points for enemy', 'summary': "Details the process of attaching attack points to the enemy, including the creation and placement of attack points for the enemy's left hand, right hand, and right leg, and setting up animation events for enemy attacks.", 'duration': 413.923, 'highlights': ['The chapter details the process of attaching attack points to the enemy The chapter focuses on the process of setting up attack points for the enemy to enable enemy attacks.', "Creation and placement of attack points for the enemy's left hand, right hand, and right leg It explains the creation and positioning of attack points for the enemy's left hand, right hand, and right leg, providing specific details on the process.", 'Setting up animation events for enemy attacks The process of setting up animation events for enemy attacks is detailed, including timing and specific actions to be triggered at different frames.']}, {'end': 15255.947, 'start': 14666.144, 'title': 'Implementing enemy attack and player health', 'summary': 'Covers implementing enemy attack and player health, including setting up damage values, testing health changes, and managing enemy and player death animations.', 'duration': 589.803, 'highlights': ["The enemy's attack reduces the player's health by 2 points per hit, dropping from 100 to 10 during testing. The enemy's attack reduces the player's health by 2 points per hit, dropping from 100 to 10 during testing.", "Setting the player's attack value to 5 for all attack points and adjusting the enemy's attack value to 2 to facilitate enemy spawning upon death. Set the player's attack value to 5 for all attack points and adjusted the enemy's attack value to 2 to facilitate enemy spawning upon death.", 'Demonstration of enemy health reduction during testing, dropping from 85 to 0, triggering the death animation and subsequent deactivation. Demonstrated enemy health reduction during testing, dropping from 85 to 0, triggering the death animation and subsequent deactivation.']}], 'duration': 1141.572, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs14114375.jpg', 'highlights': ['Enabling enemy movement to attack the player, resulting in an engaging 2D platformer game.', 'The process of creating a shake camera effect in Unity, synchronizing sound and visual effects to enhance the game experience.', 'Demonstrating the synchronization of sound and visual effects to create an engaging game experience.', 'The chapter details the process of attaching attack points to the enemy to enable enemy attacks.', "Creation and placement of attack points for the enemy's left hand, right hand, and right leg.", 'Setting up animation events for enemy attacks, including timing and specific actions to be triggered at different frames.', "The enemy's attack reduces the player's health by 2 points per hit, dropping from 100 to 10 during testing.", "Set the player's attack value to 5 for all attack points and adjusted the enemy's attack value to 2 to facilitate enemy spawning upon death.", 'Demonstration of enemy health reduction during testing, dropping from 85 to 0, triggering the death animation and subsequent deactivation.']}, {'end': 16392.158, 'segs': [{'end': 15334.365, 'src': 'embed', 'start': 15305.088, 'weight': 0, 'content': [{'end': 15309.169, 'text': "So I'm going to create here an empty game object and I'm going to actually a script.", 'start': 15305.088, 'duration': 4.081}, {'end': 15312.85, 'text': "I'm going to call this one enemy manager.", 'start': 15309.569, 'duration': 3.281}, {'end': 15314.15, 'text': 'So enemy manager.', 'start': 15313.21, 'duration': 0.94}, {'end': 15317.796, 'text': 'and attach it on the enemy manager game object.', 'start': 15315.294, 'duration': 2.502}, {'end': 15322.718, 'text': 'So drag and drop it, attach it on the enemy manager, double click it and open it here in Visual Studio.', 'start': 15317.836, 'duration': 4.882}, {'end': 15324.78, 'text': "Now we're not gonna have that many things here.", 'start': 15322.758, 'duration': 2.022}, {'end': 15334.365, 'text': "We're simply gonna have an enemy prefab and yeah, of course, why not? Why should not Visual Studio cut down on me? I mean, why? There is no reason.", 'start': 15324.8, 'duration': 9.565}], 'summary': 'Creating an enemy manager with an enemy prefab for a game.', 'duration': 29.277, 'max_score': 15305.088, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs15305088.jpg'}, {'end': 15428.104, 'src': 'embed', 'start': 15399.844, 'weight': 1, 'content': [{'end': 15408.412, 'text': "So here I'm going to create a private game object enemy prefab like this, but I'm going to serialize it because we want to drag and drop it.", 'start': 15399.844, 'duration': 8.568}, {'end': 15414.258, 'text': "And simply below, we're going to create a public void spawn enemy like this.", 'start': 15409.033, 'duration': 5.225}, {'end': 15419.115, 'text': 'where we are gonna spawn the enemy by simply using instantiate.', 'start': 15416.172, 'duration': 2.943}, {'end': 15428.104, 'text': 'So instantiate enemy prefab at the transform.position using quaternion.identity and voila.', 'start': 15419.195, 'duration': 8.909}], 'summary': 'Creating a private game object enemy prefab and public void spawn enemy using instantiate.', 'duration': 28.26, 'max_score': 15399.844, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs15399844.jpg'}, {'end': 15565.579, 'src': 'embed', 'start': 15537.353, 'weight': 2, 'content': [{'end': 15539.514, 'text': "he's gonna go away and a new enemy is gonna be spawned.", 'start': 15537.353, 'duration': 2.161}, {'end': 15544.317, 'text': 'BAM, I already see the clone here in the hierarchy and here, here he comes, here he comes.', 'start': 15539.514, 'duration': 4.803}, {'end': 15553.221, 'text': "so this way we're gonna spawn an infinite amount of enemies, so we're gonna infinitely spawn them until, well, you're tired of playing the game.", 'start': 15544.317, 'duration': 8.904}, {'end': 15556.772, 'text': 'basically, What is left for us to do?', 'start': 15553.221, 'duration': 3.551}, {'end': 15562.296, 'text': "So the last step is to add the UI to show the player's health.", 'start': 15556.812, 'duration': 5.484}, {'end': 15563.938, 'text': 'And by the way, this is nothing new here.', 'start': 15562.396, 'duration': 1.542}, {'end': 15565.579, 'text': "So that's why I do not explain anything.", 'start': 15563.978, 'duration': 1.601}], 'summary': 'Spawning infinite enemies until player tires, adding ui for health display.', 'duration': 28.226, 'max_score': 15537.353, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs15537353.jpg'}, {'end': 15681.59, 'src': 'embed', 'start': 15655.054, 'weight': 3, 'content': [{'end': 15659.196, 'text': 'So I am going to select the image and type here icon.', 'start': 15655.054, 'duration': 4.142}, {'end': 15660.897, 'text': 'And this is going to be the player icon.', 'start': 15659.376, 'duration': 1.521}, {'end': 15663.579, 'text': "So I'm going to simply put the player icon.", 'start': 15660.918, 'duration': 2.661}, {'end': 15673.466, 'text': "I'm going to set the anchor at the top left corner, the anchor at the top left corner, meaning that the center, when we set the x and y at 00,", 'start': 15663.579, 'duration': 9.887}, {'end': 15675.647, 'text': 'will be at the top left corner, as you can see.', 'start': 15673.466, 'duration': 2.181}, {'end': 15681.59, 'text': "So if I select this icon, you see, it's set at the top left corner the anchor point.", 'start': 15675.687, 'duration': 5.903}], 'summary': 'Select player icon, set anchor at top left corner.', 'duration': 26.536, 'max_score': 15655.054, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs15655054.jpg'}, {'end': 15869.5, 'src': 'embed', 'start': 15839.694, 'weight': 4, 'content': [{'end': 15844.535, 'text': 'And now I can change this slider and pay attention here at the bottom, actually at the top left corner.', 'start': 15839.694, 'duration': 4.841}, {'end': 15849.276, 'text': "So now I'm gonna change this slider left and right, as you can see, changing the slider left and right.", 'start': 15844.575, 'duration': 4.701}, {'end': 15858.138, 'text': 'And it will allow me, as you can see above, to use it and to practically display the health that way.', 'start': 15850.136, 'duration': 8.002}, {'end': 15863.956, 'text': 'So now what we need to do is create a UI script.', 'start': 15859.853, 'duration': 4.103}, {'end': 15869.5, 'text': "I'm gonna go here inside of our scripts and inside of the player scripts are actually universal scripts.", 'start': 15864.156, 'duration': 5.344}], 'summary': 'Demonstrating slider usage to display health in ui script.', 'duration': 29.806, 'max_score': 15839.694, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs15839694.jpg'}, {'end': 16381.229, 'src': 'embed', 'start': 16349.401, 'weight': 5, 'content': [{'end': 16351.323, 'text': "I'm just doing this to help the developer out,", 'start': 16349.401, 'duration': 1.922}, {'end': 16358.689, 'text': 'because he was very kind to borrow us these assets and provide these assets for you as well to use for this tutorial.', 'start': 16351.323, 'duration': 7.366}, {'end': 16363.594, 'text': 'Now, you can also check out his Kickstarter campaign for his upcoming game.', 'start': 16359.07, 'duration': 4.524}, {'end': 16366.656, 'text': 'help this developer to bring this game to life.', 'start': 16363.934, 'duration': 2.722}, {'end': 16373.782, 'text': 'i will put both links in the description below for you to check them out and if you go here at the bottom, you will see a reward.', 'start': 16366.656, 'duration': 7.126}, {'end': 16377.385, 'text': 'if you pledge for that reward, you will get your name carved in the game.', 'start': 16373.782, 'duration': 3.603}, {'end': 16381.229, 'text': 'how cool is that to see your name in a really cool game.', 'start': 16377.385, 'duration': 3.844}], 'summary': 'Help the developer by checking out his kickstarter campaign for his upcoming game, where pledging for a certain reward will get your name carved in the game.', 'duration': 31.828, 'max_score': 16349.401, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs16349401.jpg'}], 'start': 15256.327, 'title': 'Creating enemy manager, spawning enemies, and implementing ui', 'summary': 'Covers creating an enemy manager game object, implementing a singleton pattern, spawning and managing enemies in unity, handling enemy spawns and deaths, continuously spawning enemies, setting up ui elements, creating audio source component, and supporting a kickstarter campaign.', 'chapters': [{'end': 15399.784, 'start': 15256.327, 'title': 'Creating enemy manager and singleton', 'summary': "Covers the creation of an enemy manager game object, positioning it outside the camera view to spawn enemies, and the implementation of a singleton pattern using the 'instance' variable.", 'duration': 143.457, 'highlights': ['The enemy manager game object is created and positioned at x: -4, y: 1.01, z: -0.76, outside the camera view, to spawn new enemies when the current ones die.', "The 'enemy manager' script is attached to the created game object, and the 'instance' variable is used to implement the singleton pattern, ensuring only one instance of the script exists.", "The 'awake' function in the 'enemy manager' script initializes the 'instance' if it's null, allowing access to public variables and functions using the script's name followed by 'instance'."]}, {'end': 15603.63, 'start': 15399.844, 'title': 'Spawning and managing enemies in unity', 'summary': "Demonstrates how to spawn and manage enemies in unity by instantiating enemy prefabs, handling enemy spawns and deaths, and continuously spawning enemies until the player's health is displayed on the ui.", 'duration': 203.786, 'highlights': ['The process of instantiating enemy prefabs and calling the spawn function in Unity is illustrated, allowing for easy drag-and-drop functionality and enemy generation.', 'The chapter showcases the handling of enemy spawns and deaths, including a delay for respawning new enemies after the previous one dies.', "The demonstration highlights the continuous spawning of enemies until the player's health is displayed on the UI, creating an environment where enemies are spawned infinitely until the player decides to stop."]}, {'end': 16392.158, 'start': 15604.778, 'title': 'Implementing ui for game elements', 'summary': "Covers the process of setting up ui elements for the game, including setting texture type to sprite 2d and ui, creating and positioning images for player icon and health background, and implementing a health ui script to display health values with a slider. additionally, it discusses creating an audio source component for background music and provides information on accessing assets and supporting a developer's kickstarter campaign.", 'duration': 787.38, 'highlights': ['Setting texture type to sprite 2D and UI The process involves selecting specific icons, changing the texture type to sprite 2D and UI, and applying the changes, enabling the use of these elements for UI.', 'Creating and positioning UI elements The creation and positioning of UI elements for the player icon and health background are detailed, including setting anchor points, positions, and sizes for the elements.', 'Implementing health UI script for displaying health values The process involves creating a health UI script, setting up an audio source component for background music, and implementing a health UI script to display health values using a slider.', "Accessing assets and supporting a developer's Kickstarter campaign The chapter provides information on accessing assets for the project and supporting a developer's Kickstarter campaign, including links and details about potential rewards for pledging support."]}], 'duration': 1135.831, 'thumbnail': 'https://coursnap.oss-ap-southeast-1.aliyuncs.com/video-capture/gcF66q-UPCs/pics/gcF66q-UPCs15256327.jpg', 'highlights': ["The 'enemy manager' script is attached to the created game object, and the 'instance' variable is used to implement the singleton pattern, ensuring only one instance of the script exists.", 'The process of instantiating enemy prefabs and calling the spawn function in Unity is illustrated, allowing for easy drag-and-drop functionality and enemy generation.', "The demonstration highlights the continuous spawning of enemies until the player's health is displayed on the UI, creating an environment where enemies are spawned infinitely until the player decides to stop.", 'Creating and positioning UI elements for the player icon and health background are detailed, including setting anchor points, positions, and sizes for the elements.', 'Implementing health UI script for displaying health values using a slider.', "Accessing assets and supporting a developer's Kickstarter campaign, including links and details about potential rewards for pledging support."]}], 'highlights': ['The tutorial covers creating a 3D beat em up game with combos using punches and kicks.', 'The chapter demonstrates the implementation of enemy attacks, knockdown effects, camera shake, sound effects, spawning mechanics, and combo moves in the fighting game.', 'The game features combos like punch, punch, punch and punch, kick, kick, as well as the implementation of various effects including knockdown, camera shake, and spawning mechanics.', 'The demonstration includes the implementation of enemy AI, with enemies chasing the player and initiating attacks, along with the spawning of new enemies upon defeating the current one.', 'The chapter discusses learning how to create combos with punches and kicks to attack enemies in the 3D beat em up game.', 'The tutorial provides a comprehensive explanation of how to set up animation transitions in Unity, serving as a foundational guide for implementing animations in game development.', 'The tutorial emphasizes the utilization of getAxis raw to trigger animations based on button presses, facilitating the integration of responsive character movements in Unity games.', 'The chapter explains the implementation of combo states, detailing the creation of combo states, timer management, and function to reset combo states, emphasizing the need for precise timing to execute combo attacks.', 'The chapter emphasizes the process of creating an enemy in Unity, including positioning and material selection.', 'The tutorial covers Unity game scripting, including creating a health script for the player and enemy, applying damage, and controlling character animations, with a focus on modular and universal scripts, and the use of conditional statements for character reactions based on randomization and health status.', 'The process of spawning special effects when hitting the player or the enemy is detailed, including the position calculations and instantiation techniques.', 'Creating a private audio source and audio clip array for different character sound effects, such as whoosh, fall, ground hit, and dead sound.', 'The process of instantiating enemy prefabs and calling the spawn function in Unity is illustrated, allowing for easy drag-and-drop functionality and enemy generation.', "Accessing assets and supporting a developer's Kickstarter campaign, including links and details about potential rewards for pledging support."]}