Тёмный
No video :(

Third Person Character Controller in Godot 3.2 

Code with Tom
Подписаться 13 тыс.
Просмотров 45 тыс.
50% 1

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

 

24 авг 2024

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 133   
@CodeWithTom
@CodeWithTom 4 года назад
Just to let you know there's a technical issue with the www version of the website right now, but you should still be able to access it at codewithtom.com. Apologies for the inconvenience and thanks!
@joshuablackmon939
@joshuablackmon939 3 года назад
Everything works properly except When I press a key Move forward or move backward It only moves a hair.. And it stops moving.. Requiring me to press the key multiple times to get movement is there a line I'm missing.. Or is that normal for the basic third person
@doppler110
@doppler110 2 года назад
If I lift the player in the editor and then run the game, it crashes. If I don't lift it and I run it, I can't move. Furthermore, it says that this node $CameraPivot/CameraBoom/Camera don't exists. I followed the tutorial and copied the github code. What's happening???
@CodeWithTom
@CodeWithTom 2 года назад
@@doppler110 check the naming of your nodes in the scene hierarchy and ensure they are named correctly as per that node path
@djawadjustme2328
@djawadjustme2328 2 года назад
@@CodeWithTom can you give me the link of discord community ?
@EnesKaraca
@EnesKaraca 4 года назад
It appears that Vector3 linear_interpolate is renamed to lerp in in godot 4. just noting here if someone watches this in the future.
@CodeWithTom
@CodeWithTom 4 года назад
Interesting, thanks Enes!
@kquote03
@kquote03 3 года назад
also onready will need be @onready and you will define your onready variables like an enum
@fragarena9910
@fragarena9910 4 года назад
omfg YES :D , this is a proper 3rd person implementation . Thank you , been looking for a proper 3p for a while
@CodeWithTom
@CodeWithTom 4 года назад
Thanks Frag, glad you enjoyed the video 😁
@MisterMashu
@MisterMashu 4 года назад
Great video! Another way to do the little y velocity trick is to just let gravity handle it. I think the only change you'd need is after the move_and_slide, just say y_velocity = velocity.y. That way, if the move affects the y velocity, your y velocity will also be affected (running off a ramp for example). Then you can just delete the "if is_on_floor()" bit, and just always apply gravity. edit: I believe the reason this happens is because is_on_floor() only reports true if it hit a floor during the last call to move_and_slide()
@CodeWithTom
@CodeWithTom 4 года назад
Thanks Matt. And thank you for the much better solution to the gravity issue!
@cholasimmons
@cholasimmons 4 года назад
Matt this is making me jump while I'm jumping 😂
@MisterMashu
@MisterMashu 4 года назад
@@cholasimmons you need to keep the is_on_floor check around the jump code
@yuler_
@yuler_ 4 года назад
Dude your tutorials are really easy to follow along. Each bit clearly explained and I don't have to download any assets. Did this and your FPS series to get a jumping off point for my project and I remember how to use and modify each tidbit to fit my needs; a sign of really clear teaching looking forward to future godot tutorials 👍
@CodeWithTom
@CodeWithTom 4 года назад
Thank you so much for the amazing feedback Yuler. I'm really glad you've found the tutorials so useful and it's great to hear that you were able to take them and expand them to fit your needs! Good luck in your game development journey and I hope I can help you with more content as your progress. 👍
@days1835
@days1835 3 года назад
i have a problem my character isn't moving the camera is moving
@owenlloyd2528
@owenlloyd2528 Год назад
Thank you. I looked at this to see if it would deal with clipping and it did. I also learned a few other things, bonus. 😀 Thanks again.
@ericmartine902
@ericmartine902 3 года назад
Your explanation of each line of code is awesome. I dont understand a line of code but just listening to your explanation as you went through made me feel so much more at ease with the concept and i could understand the gimble problem and your solution to it. Very cool.
@anonymouskechard
@anonymouskechard 3 года назад
Great tutorial. Helped me a lot with the game I’m working on.
@nthnsdv
@nthnsdv 3 года назад
Ja
@titustech7219
@titustech7219 2 года назад
when the variables almost take up your whole screen 8 minutes in you know it is worth your time
@vikkytg7230
@vikkytg7230 3 года назад
tysm i started using it like 2 days ago and got on youtube to see tutorials and im glad i found this very nice tutorial
@lovelindeborg6783
@lovelindeborg6783 3 года назад
This turorial is so good i made a spaceship with it (and a 3rd person character)
@Crisisdarkness
@Crisisdarkness 3 года назад
I had not seen this video on your channel, you have surprised me, this is too useful, thank you, you are an excellent instructor, I would love if you could teach how to do a logic related to turns, for example in a card game, first is the player's turn, next, the enemy player
@aryanmehrotra8912
@aryanmehrotra8912 4 года назад
Finally someone who calls it Godot not Gugdough
@CodeWithTom
@CodeWithTom 4 года назад
I think it's probably my british and uncultured accent, hahaha
@THICCCBOI9000
@THICCCBOI9000 3 года назад
Thank you bro
@THICCCBOI9000
@THICCCBOI9000 3 года назад
I just finished making, Tom YOU ARE THE BEST AND THANK YOU now I can make my dream game (edit): I liked and subscribed :)
@lonewolfenock3527
@lonewolfenock3527 4 года назад
I like this video so much I had two tabs of it open =) Thanks Tom~
@pascalcasier959
@pascalcasier959 4 года назад
Just perfect. Thank you again
@CodeWithTom
@CodeWithTom 4 года назад
You're welcome Pascal
@infodev5222
@infodev5222 4 года назад
hey man just learnt that there is a built in clip camera node that makes it very easy to setup third person camera as it has physics interaction built into it so that the camera automatically comes close to the character rather than going through the wall. just wanted to share it here : )
@CreativeSteve69
@CreativeSteve69 4 года назад
thanks for making these tutorials Tom highly appreciate these videos. Just wondering can ya do a puzzle game tutorial in the future?
@CodeWithTom
@CodeWithTom 4 года назад
You're very welcome Stevie. What kind of puzzle game would you like to see?
@CreativeSteve69
@CreativeSteve69 4 года назад
@@CodeWithTom something along the lines of either a protal-esuq type if possible.
@cothromgrimr161
@cothromgrimr161 3 года назад
everything works but i cant move forward?
@Lluc3D
@Lluc3D 3 года назад
please keep adding stuff to this project in future videos, thanks :)
@doppler110
@doppler110 2 года назад
If I lift the player in the editor and then run the game, it crashes. If I don't lift it and I run it, I can't move. Furthermore, it says that this node $CameraPivot/CameraBoom/Camera don't exists. I followed the tutorial and copied the github code. What's happening???
@VoylinsLife
@VoylinsLife 4 года назад
There is only one problem with this script, when jumping on a slope, you basically slide of it, else great tutorial, thank you very much ^^
@arcaneacumen5404
@arcaneacumen5404 3 года назад
Hi Voylin's life, I have an improved version of 3rd Person control here that fixes this problem: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-YNmSwR8aSzU.html . Just copy/paste code from description into your script editor. This is due to the momentum from the drop being calculated onto the "slide" of the slope.
@joshuablackmon939
@joshuablackmon939 3 года назад
Yes! I've also had problems with the move and slide snap function
@cothromgrimr161
@cothromgrimr161 3 года назад
for some reason i cant move forward?
@cintron3d
@cintron3d 4 года назад
Thank you so much for this!
@alimokdad6865
@alimokdad6865 3 года назад
it would be great if you can higher your voice level in the upcoming videos , great video btw
@drac8854
@drac8854 3 года назад
hi it will be great if you can add more videos in this playlist
@thomaseubank1503
@thomaseubank1503 3 года назад
EDIT Thanks Tri Dra I rewrote my code. I don't know what I did wrong but it works fine now. This was a great tutorial, it really helps with a lot of the clipping issues you can get with 3d. Hey the tutorial is working out really well especially with the camera not clipping into walls and other things. I have an issue with the movement on my end though. Moving forward and right works well, but not moving left or backwards. I have yet to find too much of a difference between our codes. I'd be obliged if you had any suggestions.
@tridra5714
@tridra5714 3 года назад
you have written this in back and left right back: if Input.is_action_pressed("ui_down"): direction += transform.basis.z (I am using ui_down as input) left: if Input.is_action_pressed("ui_left"): direction -= transform.basis.x hope this helps
@thomaseubank1503
@thomaseubank1503 3 года назад
Thanks, but I think I have that part down right. Sometimes with these tutorials I have to look at my code for days until I find what is wrong. If you want I can post my code down here. The only difference is that I added a key to regain mouse control.
@thomaseubank1503
@thomaseubank1503 3 года назад
extends KinematicBody #ADD INDENTS export var speed : float = 20 export var acceleration : float = 15 export var air_acceleration : float = 5 export var gravity : float = 0.98 export var max_terminal_velocity : float = 54 export var jump_power : float = 20 export(float, 0.1, 1) var mouse_sensitivity : float = 0.3 export(float, -90, 0) var min_pitch : float = -90 export(float, 0, 90) var max_pitch : float = 90 var velocity : Vector3 var y_velocity : float onready var camera_pivot = $CameraPivot onready var camera = $CameraPivot/CameraBoom/Camera func _ready(): Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) func _process(delta): if Input.is_action_just_pressed("ui_cancel"): Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) if Input.is_action_just_pressed("enter"): Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) func _input(event): if event is InputEventMouseMotion: rotation_degrees.y -= event.relative.x * mouse_sensitivity camera_pivot.rotation_degrees.x -= event.relative.y * mouse_sensitivity camera_pivot.rotation_degrees.x = clamp(camera_pivot.rotation_degrees.x, min_pitch, max_pitch) func _physics_process(delta): handle_movement(delta) func handle_movement(delta): var direction = Vector3() if Input.is_action_pressed("move_forward"): direction -= transform.basis.z if Input.is_action_just_pressed("move_backward"): direction += transform.basis.z if Input.is_action_pressed("move_left"): direction -= transform.basis.x if Input.is_action_just_pressed("move_right"): direction += transform.basis.x direction = direction.normalized() var accel = acceleration if is_on_floor() else air_acceleration velocity = velocity.linear_interpolate(direction * speed, accel * delta) if is_on_floor(): y_velocity = -0.01 else: y_velocity = clamp(y_velocity - gravity, -max_terminal_velocity, max_terminal_velocity) if Input.is_action_just_pressed("jump") and is_on_floor(): y_velocity = jump_power velocity.y = y_velocity velocity = move_and_slide(velocity, Vector3.UP)
@collegedays4924
@collegedays4924 4 года назад
Volume is a little low but overall learned a lot from this video thanks
@viniguerrero
@viniguerrero 4 года назад
Awesome tutorial! Was looking forward to see a better explanation on how to use the spring arm properly. Do you have any plans for a tutorial on aiming with camera rotation? It's been kinda hard to find materials on this matter. Either way, keep it up with this series, it rocks 😄
@CodeWithTom
@CodeWithTom 4 года назад
Hi Vinny, thanks for the feedback! Yeah I'm currently working on a third person game so I'll be bringing a lot of my learnings from it into future video tutorials.
@viniguerrero
@viniguerrero 4 года назад
Awesome @@CodeWithTom looking forward for those! :)
@jovlem
@jovlem 4 года назад
I like to see a tutorial for the camera clipping problem at 27:50 as this is pretty hard to figure out.
@ptc1997
@ptc1997 4 года назад
Swap the Camea node out for a ClippedCamera, problem solved :)
@bogballproductions6342
@bogballproductions6342 3 года назад
Please help the camera moving works but my character wont move
@GorblinRat
@GorblinRat 2 года назад
Thanks so much c:
@warrenbuitendag5286
@warrenbuitendag5286 4 года назад
great tutorial, i hope you will also do one on third person animations with a state machine and blendspaces, i can fairly easily get to this point of a controller with a basic capsule but when i try and implement my character model with his locomotion animations then it all goes pear shaped XD
@joshuablackmon939
@joshuablackmon939 3 года назад
They have one , different guy ill send you the link
@joshuablackmon939
@joshuablackmon939 3 года назад
I figured it out. Instead of just pressed it was pressed that i needed
@ValaAssistant
@ValaAssistant Год назад
Rotation_degrees is no longer implemented in Godot 4, going to need fixes for that x.x linear_interpolate also seems to no longer work in Godot 4 Also gravity is extreme in Godot 4, like bagillions of times its supposed to
@adventurouswizard9408
@adventurouswizard9408 3 года назад
Pls help me I cant stand on the ground and the ground is also not visible
@makoshark40
@makoshark40 3 года назад
i have followed this to the t up to 15min mark when i got to test it i just get a grey screen it does give me errors like node not found CameraPivot and the CameraPivot/CameraBoom/Camera. so its like i have no camera at all idk where i messed this up
@feracomber
@feracomber 3 года назад
This tutorial is great. It works. But one small questions. I'm absolutely not into programming, how to make character not move where camera look? I mean, to make camera move around character, but character stands still and change direction only when moving. I don't really know if I said it clear, English is not my native.))
@trey5718
@trey5718 Год назад
i'm having an issue where when i play my game after the player collision section, i can't move my camera angle up more than just a little bit, but i can move my camera 360 degrees, help?
@bity-bite
@bity-bite 4 года назад
Just a note, gravity should not work when the player is on the floor only
@CodeWithTom
@CodeWithTom 4 года назад
Hi, when the player is on the floor we apply a small amount of downward force to keep the player locked to the floor and ensure that the KinematicBody is_on_floor method reports correctly. As I mention in the video, there may be better ways to do this but I found this method to work best. 😁
@bity-bite
@bity-bite 4 года назад
@@CodeWithTom Oh indeed, guess I've misunderstood something. However keep up the great work!
@ioanaldea1509
@ioanaldea1509 2 года назад
It did not work i got an error message: invalid get index 'rotation_degrees'(on base:"null instance) i checked to see if i did something wrog but it was just like in the tutorial someone explain pls....
@cmds.learning7426
@cmds.learning7426 4 года назад
i like this ...thank you !
@CodeWithTom
@CodeWithTom 4 года назад
You're welcome 😊
@KennethPlaysOfficial
@KennethPlaysOfficial 3 года назад
i added a character and a idle and jump animation, but how do i make it play a walk animation?
@12-OneTwo
@12-OneTwo 3 года назад
I do not have access to Script Variables form the Player.tscn inspector.
@ceasnov
@ceasnov 4 года назад
I got a problem with the camera pivot part: "Invalid get index 'rotation_degrees' (on base: 'null_instance')"
@Jose.Eduardo.C
@Jose.Eduardo.C 2 года назад
me too, ive already spent hours trina solve and got nothing..........
@ceasnov
@ceasnov 2 года назад
@@Jose.Eduardo.C Update: gave up on 3d for a very long time. I still don't feel capable of it
@Jose.Eduardo.C
@Jose.Eduardo.C 2 года назад
@@ceasnov I gave up awhile ago so hard I gave up on making games, now I'm trying once again. But I actually found my bug, I was trying to get the camera pivot node from higher up in the scene tree, apparently Godot doesn't like that very much (my script was in the camera itself, because I felt like making other stuff with the camera separate from the Player node), when I transferred the code to the Player node, it worked! (In a messed up way, but at least now I have different bugs to fix)
@blox6180
@blox6180 2 года назад
thanks!
@tridra5714
@tridra5714 3 года назад
Great tutorials
@dontcallithzzzln
@dontcallithzzzln 4 года назад
I really like your style. Quick, but explaining everything that's needed for what you want to achieve. I found your post on the godot forums about rendering huge, far away objects. You said you might do a video on this, are you still planning to do this?
@CodeWithTom
@CodeWithTom 4 года назад
Thank you! Good question, that's been asked a couple times before. I definitely plan to do it at some point, it's on a long list of topics I'd like to get covered :)
@dontcallithzzzln
@dontcallithzzzln 4 года назад
@@CodeWithTom Alright, looking forward to it!
@vikkytg7230
@vikkytg7230 3 года назад
hello my mouse movement not working i tried doing it but its not working i did everything u did
@vatan2578
@vatan2578 4 года назад
Thank you very much
@chJohnJobs
@chJohnJobs 3 года назад
i got an error code in referecne to velocity being a token error, not allowing me to liniearly interpolate the motion
@chJohnJobs
@chJohnJobs 3 года назад
nvm, turns out it was a spacing error in the code, so it was on my part
@drac8854
@drac8854 3 года назад
hi is there a way to control amount of time player will be in sky when he jumps if not i would like to know as for this video the number of seconds player stays in air so that i cam make animation accordingly
@s.s.scriptties
@s.s.scriptties 3 года назад
line 30 camera_pivot.rotation_degrees.x -= event.relative.y * mouse_sensitivity ,for some reason it isn't working and is causing it so I can't tryout the code in debug can you help me out? also its saying line 17 and 18 have errors
@berndackenfutter2003
@berndackenfutter2003 2 года назад
My mouse input stops being handled whenever a key is pressed and held down. When no keys are pressed, mouse movements works fine. How do I fix that?
@berndackenfutter2003
@berndackenfutter2003 2 года назад
It seems to be some kind of touch-pad protection thingy. Works perfectly when tested with an actual mouse.
@Logan-ou7kb
@Logan-ou7kb 3 года назад
I couldn’t find spring arm
@greensugar4371
@greensugar4371 3 года назад
i cant rotate my camera for some reason can someone help me ?
@thiagosardenberg-oviajante
@thiagosardenberg-oviajante 3 года назад
I was looking in your GDScript file and I love it, it works perfect for my project. Thanks a lot. But I'm suffering a few to map my keyboard keys to move the character inside the scenario. Serching in your GDScript file, the code is maped to player move and looking in the Godot Project Settings I couldn't set the specific keys for that. How can I do it? And again, nice videos. You are having a lot of workd to do with these videos and your 'job' to show the comunit how to code and work with Godot is great. Please continue always.
@efeloteishe4675
@efeloteishe4675 Год назад
Go to the Input Map tab and add (move_forward, move_backward, move_left and move_right, map them to W, A S and D or whatever you like.
@Dragon20C
@Dragon20C 3 года назад
what if I want to rotate the camera seperately but when I press the move forward key it changes to the camera rotation, like a mmo style camera, how would I do that?
@aphemorpha
@aphemorpha Год назад
this is such a useful video but i laugh every time you say max terminal velocity because terminal already means maximum 🤭
@jovlem
@jovlem Год назад
When should I use just var and when onready var? What's the difference and what does onready do?
@CodeWithTom
@CodeWithTom 11 месяцев назад
The onready keyword defers initialization until the _ready function has been called. It's essentially the same as initializing a variable inside _ready.
@connerzelkowski3374
@connerzelkowski3374 3 года назад
What button on the keyboard do u pleas to save
@sinchanrawat
@sinchanrawat 3 года назад
My control are not working.why?
@vikkytg7230
@vikkytg7230 3 года назад
9:04 just to remember
@Icessien
@Icessien 4 года назад
I used your camera set-up for a project it works except for the fact that when I face the camera to its max height(90) or minimum (-90) the player starts flying when he is moving....he can even move on walls like it's the floor. It's really bugging me.i figured out that it is caused by the springarm when I used another camera set-up.but I dunno how to fix it
@seemarajput779
@seemarajput779 4 года назад
plzz make a video on that see through mesh in camera boom if you had made plzz give me link plzz plzzz make it a video also on crouch and prone
@viktorszekeres2655
@viktorszekeres2655 3 года назад
why did it not work for me?
@trey5718
@trey5718 Год назад
this is a good tutorial but it's a bit fast paced for me
@mapopi-mm
@mapopi-mm 4 года назад
Never seem that "if else" inside of a varialbe like that, is there a name for that (lambdas?) , so I can search the documentation?
@CodeWithTom
@CodeWithTom 4 года назад
Hi Mauricio, yes it's called a Ternary Operator. 😁 book.pythontips.com/en/latest/ternary_operators.html
@mapopi-mm
@mapopi-mm 4 года назад
@@CodeWithTom Thank you! This will be handy for me
@vikkytg7230
@vikkytg7230 3 года назад
Well idk y but i copied the mouse movement part of the code and and used it its working and i checked if i did smt wrong but it was the same thing so yea it must be a buy sry for the disturbance
@knightgamer1533
@knightgamer1533 4 года назад
Please do the follow up on gdscript begginers guide I relying on you love from India by the way good tutorial
@CodeWithTom
@CodeWithTom 4 года назад
Thanks, I'll definitely be following up soon
@bitmammothOG
@bitmammothOG 4 года назад
will this show how to interact with animation tree and player eventually? :)
@CodeWithTom
@CodeWithTom 4 года назад
Absolutely. I'm about to implement animation trees into my side-project which is also a third person game. So those tutorials will be coming soon.
@phillippi2
@phillippi2 4 года назад
"Parser Error: too few arguments for "clamp()" call. Expected at least 3." This is referencing your last line of the script. Any idea what may be causing it? The debug window also comes up but, it's just blank. I'm using Godot 3.2.2
@Raphipod
@Raphipod 4 года назад
13:19 look at the last line. it is very long, so zoom out a bit and correct it. it expects at least three arguments seperated by a comma.
@phillippi2
@phillippi2 4 года назад
@@Raphipod I had copied your code exactly. It must have been a glitch though. Restarting the editor fixed it.
@clumsypanda1039
@clumsypanda1039 3 года назад
can you do this on root motion?
@lautarommb1814
@lautarommb1814 3 года назад
Hi, I notice my character don't jump when going downward, only on flloor or going upward, is this normal?
@arcaneacumen5404
@arcaneacumen5404 3 года назад
Hi Lautaro MMB, This is because the vector movement goes down in a stair-step motion with slopes. It gets off the floor and pushed back down to the floor. I have a video that fixes this problem, along with a couple others: ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-YNmSwR8aSzU.html . Just copy/paste code from description into your script editor.
@thedevine3756
@thedevine3756 4 года назад
I need help(not relating to the video: Why when I use get_node() it only works on some scripts and not others, I literally COPY AND PASTED a working get node code that I wrote and it just couldn’t find the node, even though it found the node from the previous code? Why does godot only sometimes work??
@CodeWithTom
@CodeWithTom 4 года назад
Hi there. The get_node function expects a path to a Node. So copy and pasting may not work if the node is at a different relative path.
@thedevine3756
@thedevine3756 4 года назад
Code with Tom thank you! Also great video, I’m planning on using it!
@jamesxxxyz8775
@jamesxxxyz8775 4 года назад
When the player moves under the second platform and the camera is in a higher position, or when the camera is behind the wall and the player slide in front of the wall, then the camera didn't move smooth to the player. Can you solve this with raycasts and update it?
@CodeWithTom
@CodeWithTom 4 года назад
Hi James, you could indeed roll your own spring arm solution using a raycast node and then lerp the desired position to get a smoother transition. You would experience issues with the camera going "through" geometry as it smooths into position though.
@jamesxxxyz8775
@jamesxxxyz8775 4 года назад
@@CodeWithTomUse ClippedCamera instead of Camera. ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-Bch-OagnX1E.html
@techofhappiness395
@techofhappiness395 4 года назад
Hi Dude, I doesn't know how to Code in games, Because I'm Commerce background. So please suggest me how to learn Coding (Free Ebooks, or Tutorials link), suggest me good one please.
@Frustratedhen
@Frustratedhen 10 месяцев назад
No one is here who can teach how setup joystick button for Androids 😢
@BielyDev
@BielyDev 3 года назад
Scripts muito grande sem necessidade
Далее
INVENTORY & ITEM SYSTEM in Godot
50:30
Просмотров 56 тыс.
I Made My First Game in Godot in 3 Weeks...
26:21
Просмотров 315 тыс.
Godot 4 / Blender - Third Person Character From Scratch
57:33
They made a game about philosophy...
23:19
Просмотров 457 тыс.
The World's Tallest Pythagoras Cup-Does It Still Drain?
10:05
The Clever Way to Count Tanks - Numberphile
16:45
Просмотров 1 млн
Now anyone can simulate flow for a 3D printer duct
11:17
4 Godot 4 Devs Make 4 Games in 44 Hours
25:19
Просмотров 511 тыс.
Where Do Hyrule's Rivers Go?
30:45
Просмотров 1,7 млн
I Tried To Beat Minecraft Backwards
18:53
Просмотров 1,4 млн
Enemy AI Series 1: The State Machine
12:10
Просмотров 51 тыс.