💬 It took a lot of work to make this video but I'm really happy with the final result! I hope you like it! ✅ Get the Project Files unitycodemonkey.com/video.php?v=FbM4CkqtOuA 🌍 Get my Complete Courses! ✅ unitycodemonkey.com/courses 👍 Learn to make awesome games step-by-step from start to finish.
for those stuck between 20:00-23:00: 1. make sure the BulletProjectile script is on the pfBulletProjectile prefab (click the prefab and drag the script on). 2. Also, click on the prefab and make sure Use Gravity is ticked off. Still following the tutorial, but was stuck for a good while on this. Good luck! update: works perfectly thank you so much this is an amazing tutorial
If anyone is having difficulty aiming and walking at the same time, you need to create an Avatar Mask. Open up "Humanoid" in the Avatar Mask and deselect the legs and lower IK so that only the upperbody is green. Then, click the cog wheel on the Aiming layer and add the Avatar Mask to the Mask field. This will make it so that when aiming, only the upper body bones are affected and you will still be able to walk as per the Base Layer animations.
Great point, In addition to this, make sure you set your model to humanoid. After you import your fbx file, under the inspector, select "Rig" and then choose "Humanoid" under the animation type. This will allow you to switch layers and also prevent the bug of (the character from showing halfway through the ground).
@@noblephantasms7250 You can do this by Right Clicking Create go down to Avatar Mask. From there I clicked on the legs, body and the bottom 1ks. Then on your Animator and your Aming Layer, click the gear icon, add the mask you just made and click on IK pass.... This is what I did any way works for me :)
I'll be real with you, channels such as Code Monkey and Brackeys are the reason I chose Unity over Unreal when it came to answering "which engine?" The quality and accessibility of tutorials such as these _cannot_ be overstated. Thank you for all the terrific content, and keep doing what you do! You've earned another subscriber/supporter!
its finally happening! Im really hoping for a melee combat tutorial that expands upon the 3rd person starter assets. would it be possible to have the melee combat have animations where you dont just animate the upper body to perform melee attacks? like if you do a melee attack, you wont be able to move until the melee animation has finished playing like in most action games? a combo and targeting system would also be nice :)
For the hit scan on 27:08 if the particle shows up on the feet it is because it is using the player transform position. Make a var called like hitpoint, similiar to the debugTransform, in the 'raycast IF statement' set the new var hitpoint to the 'raycastHit.point', and in the shoot instantiate code replace transform.position to the hitpoint variable. Thanks for the tutorial, learned alot!
When you turn the character to the direction you're aiming, you use Lerp with the current position in the first argument. Lerp really works when you continually provide the original starting value and a final value on every frame. If you don't want to keep track of the original starting value, use MoveToward or RotateToward instead. The progression of values you get with Lerp are only linear if you use it as designed, with the original starting value on every call.
Thanks for the tutorial. It really helped me to move forward my project. Here is a tip:- Instead of placing cubes around the environment for player. just get a point from ray at a distance. Ray ray = _cam.ScreenPointToRay(screenCentrePoint); debugTransform.position = ray.GetPoint(20); GetPoint will give you at point on the ray at the distance you have given. so even if player is aiming at the sky it will work without placing collider around environment.
Vector2 screenCenterPoint = new Vector2(Screen.width / 2f, Screen.height / 2f); Ray ray = Camera.main.ScreenPointToRay(screenCenterPoint); if (Physics.Raycast(ray, out RaycastHit raycastHit, 999f, aimColliderLayerMak)) { debugTransform.position = raycastHit.point; } else { debugTransform.position = ray.GetPoint(20f); } Like this right?
If anyone is a fool like me, make sure you also set the moustWorldPosition = to the ray.Getpoint() otherwise when you aim at the sky your not getting that variable updated.
Edit: This does fix the abrupt change of aim when going from one target to another, but the aim is no longer accurate. I think I'll have to find a way to smooth out that abrupt change. ____________________________________________________ Great idea, thanks. Additionally, I would say that when you're aiming at objects other than sky, still better to use debugTransform.position = ray.GetPoint(20); because in this way your aiming will stay smooth. If debugTransform keeps jumping from object to another, your character's aim abruptly changes, which in my opinion is not desirable (at least for my game design): Here's the code : Vector3 mouseWorldPosition = Vector3.zero; Vector2 screenCenterPoint = new Vector2(Screen.width / 2f, Screen.height / 2f); Ray ray = Camera.main.ScreenPointToRay(screenCenterPoint); if (Physics.Raycast(ray, out RaycastHit raycastHit, 999f, aimColliderLayerMask)) { debugTransform.position = ray.GetPoint(20f); mouseWorldPosition = ray.GetPoint(20f); } else { debugTransform.position = ray.GetPoint(20f); mouseWorldPosition = ray.GetPoint(20f); }
Another great tutorial, thanks a lot! Also I think I found a neat solution for aiming in the sky (14:02), without needing boundary colliders everywhere. If the raycast returns false move to an else block and create the aiming point by projecting a vector in the direction of the camera orientation, from the camera position, at a desired distance from it. For example I set mine to 200: if (Physics.Raycast(ray, out RaycastHit raycastHit, 200f, AimColliderLayerMask)) { DebugTransform.position = raycastHit.point; } else { DebugTransform.position = _cam.transform.position + _cam.transform.forward * 200f; } Let me know if I am overseeing something and there is a problem with this, but thanks again for the video.
@@alovelygondal7673 Hi, this is in relation to the main camera. if you want you can use this instead which will work as long as you have one main camera. else { debugTransform.position = Camera.main.transform.position + Camera.main.transform.forward * 999f; }
The instantiating bullet can be used in a realistic game as then we can set the spawn point in the guns barrel and then if this happens( 27:54 ) then it shows that the bullet actually spawns from the guns itself and not from the middle of the screen, many realistic FPS/TPS games do this thing and it adds that extra bit of realism to the game really cool, raycast can be used for a more arcade shooter
You should do a tutorial on a First Person Controller setup with full body awareness and animation rigging. I just realized while putting mine together that there are no real good tutorials for that out there for reference so I had to do mine all by scratch. It was actually more tricky than I expected. I never realized things like keeping the head and body separate for networking reasons. Or how difficult it really is to get the body to perform like an actual body in relation to eye sight and the hands/gun movement.
Excellent tutorial! I had already got a basic combat system going with the Third Person Controller, but I was not at all happy with the camera. This tutorial made it all right as rain, thank you! :)
For bullet not working, : - Add the bullet script to your bullet => he not showed it but it said it (i realised that after 10x watching haha) - Make your bullet a prefab, drag and drop it in the prefab folder. Than delete it from the scene, and drag and drop the prefab in "Bullet Projectil" from thirdPersonShooterController on the playerArmature - If it bounce/not destroy; make the colider a few bigger than the cube
if you feel that the camera lags when you move the mouse, you can try this solution found on Unity forum : 2021.2.7 uses version 1.2 of the Input system package which has an issue with inputs delta when set to fixed update and can cause the lags you are seeing. To check if that's the issue you could try this: Edit -> project settings -> Input system package If Update Mode is set to Process events in fixed update change it to Process events in dynamic update I hope this will help you and thank's for this tutorial :)
I absolutely love this video. Right up to the point of adding a point animation. I can't find anything easy to follow that will allow me to add animations to the standard unity third person controller.
I figured this issue out for anyone else that might come across the same problem. I did this - Go to the "Rig -> Animation Type" and change from "Generic" to "Humanoid" and click on "Apply". That fixed it.
Also for the crosshair if anyone wants an easy way to enable it when aiming and disable when not you can add [SerializeField] private GameObject crosshair; // makes a serialized field for the image of the crosshair to be assigned to. In Awake: crosshair.SetActive(false); // hides the crosshair to make sure it is hidden at the start. In Update if (starterAssetsInputs.aim) // if the user is aiming { crosshair.SetActive(true); // set crosshair to enabled. } else // if they are not aiming { crosshair.SetActive(false); // disable the crosshair } Then in Unity drag the crosshair image onto the serialized field. Hope this helps anyone who wants this easily. The full code up to the crosshair section for me is: using System.Collections; using System.Collections.Generic; using UnityEngine; using Cinemachine; using StarterAssets; public class ThirdPersonShooterController : MonoBehaviour { [SerializeField] private CinemachineVirtualCamera aimVirtualCamera; [SerializeField] private float normalSensitivity; [SerializeField] private float aimSensitivity; [SerializeField] private GameObject crosshair; private StarterAssetsInputs starterAssetsInputs; private ThirdPersonController thirdPersonController; private void Awake() { starterAssetsInputs = GetComponent(); thirdPersonController = GetComponent(); crosshair.SetActive(false); } private void Update() { if (starterAssetsInputs.aim) { aimVirtualCamera.gameObject.SetActive(true); thirdPersonController.SetSensitivity(aimSensitivity); crosshair.SetActive(true); } else { aimVirtualCamera.gameObject.SetActive(false); thirdPersonController.SetSensitivity(normalSensitivity); crosshair.SetActive(false); } } }
is there any way that this virtual camera only follows characters back and on look input its works same before ...if character rotate than the virtual camera shoul have to rotate as to follow charcters back
for those wanting to make an automatic weapon, here's what I did (idk how much it'll help since I've changed the code quite a bit since following this tutorial) 1) add 3 variables to the top of the script: private bool isFiring = false; float shotCounter; public float rateOfFire = 0.1f; 2) in update, add this where you're instantiating your bullet: if(starterAssetsInputs.shoot) { isFiring = true; } else if(starterAssetsInputs.shoot == false) { isFiring = false; } if(isFiring == true) { shotCounter -= Time.deltaTime; if(shotCounter
Finally a simple and good tutorial about third person shooter. There's a lot out there but each one more difficult then other. Congratulations for this awesome tutorial.
dude thank you so much for this!!! I've been pulling my hair out for months trying to figure this new input system out and though I'm still reluctant to say I figured it out, I definitely made progress finally today with combining what I've been trying to do with what you did here... Thank you so much for this upload! You're making dreams come true my friend!
Great little tutorial. I liked the new input system you are using compared to the old one. The coding you added for the third person controller was also pretty informative. Gotta save this to use later if I get around to doing a tps shooter demo in the future.
I'll be honest, what i was expecting was ful tutorial without assets. But good theres a person that creates these free of charge for everyone ^^. Keep it up!
I've been searching online for a true first person shooter controller Tutorial and found nun if you could make one that would be amazing for those of you who don't know what a true FPS is it's like a third person controller it uses third person animations and a full body but the camera is mounted on the head games like escape from tarkov and arma 3 use it
33:21 This part does interest me a lot since it's one of the things I've had issues with for upper body aiming. I tried IK but it didn't quite work out as I wanted.
I saw an error: @ around 27:20, near the ending of the Raycast shooting tutorial, the Instantiate methods are spawning the particles at transform.position, aka the player position. This makes the particles spawn inside the player. It should be changed to mouseWorldPosition or debugTransform.position which is the raycast.point value of where the raycast hit.
Its funny when you do it because it looks like the character is exploding! Could you maybe add or explain the steps to get the Pistol Idle animation from Mixamo? I can only download the entire mesh, I dont know how to extract the .animation file from the .fbx
@@chrheca Click on the arrow icon to expand the object, inside is the animation, click on it then Ctrl + D to duplicate and it will duplicate it outside of the .fbx as a separate asset
Just in case someone would be interested, you can also rotate the character (when aiming) based on the camera planar direction, this way it will always rotate according to the camera : Vector3 cameraPlanarDirection = Vector3.ProjectOnPlane(Camera.main.transform.forward, transform.up).normalized; transform.forward = Vector3.Lerp(transform.forward, cameraPlanarDirection, Time.deltaTime * 20f);
Can you make a video on how you polished everything at the end? Because I have the animations and functionality down, but it would be very helpful if there was a video showing how to add for example a walking animation while aiming, all the FX used and so on. Other than that this video was great and really helpful :)
I'm planning on doing a video on animation rigging which is what I used to make the weapon aim at the target For walking while aiming, that's just adding a Avatar mask on the second layer and only overriding the upper body, leaving the legs to walk
@@CodeMonkeyUnity Hey Code Monkey! What if I want incorporate a different movement animation while aiming? How does that work? Can you please make a video on that one or could you briefly explain it?
SOOOO first go-round I broke everything at 7:00 into the video. My error was that Code Monkey quickly attaches the script for toggling between the zoom and normal camera that I missed that he had attached the PlayerAimContorller script to the PlayerAmature rather than the PlayerAimCamera. I have about a weeks worth or Unity so for anyone else that hits this error hope this helps.
I know how to fix it... just open your thirdpersonshooter script and change private void"awake" and "update" to "Awake" and "Update". (capital letters)
i know im late to the party and i might have missed it but i did also have about 100 errors rolling in a minute when i had hit play to test out the zoom, what fixed it for me is under PlayerArmature, the ThirdPersonShooterController script, i dragged the PlayerAimCamera into the Aim Virtual Camera, and the errors went away and is working as it should be. hopefully that helps anyone out that might be having that issue or overlooking something potentially simple.
14:26 A more simple solution if(Physics.Raycast(ray, out RaycastHit raycastHit, 999f, aimColliderLayerMask)) { debugTransform.position = outhit.point; } else { debugTransform.position = ray.GetPoint(30); } When there isn't a collider in front of the player, the target point will be a little bit away from him if you write this code.
If you want the crosshair to only appear when you right click (like in a non-shooter focused game with shooting mechanics) then make a new script with this: using UnityEngine; using System.Collections; public class Cross : MonoBehaviour { // Graphic used for crosshair public Texture2D crosshairTex; // Rect for crosshair size and position private Rect crosshairRect; // bool to turn crosshair on and off public bool IsCrosshairVisible = true; void Awake() { Cursor.visible = false; crosshairRect = new Rect((Screen.width - crosshairTex.width) / 2, (Screen.height - crosshairTex.height) / 2, crosshairTex.width, crosshairTex.height); } void Update() { if (Input.GetMouseButtonDown(1)) { IsCrosshairVisible = !IsCrosshairVisible; } if (IsCrosshairVisible == true) { IsCrosshairVisible = true; } else { IsCrosshairVisible = false; } } void OnGUI() { // draw the crosshair in center of screen if (IsCrosshairVisible) GUI.DrawTexture(crosshairRect, crosshairTex); } }
@@CDisplay-o9t that works. I actually used this line of code(input.getmousebutton down and up) to make the aiming instead of using the new input system. Works well for me!
Code Monkey, you have outdone yourself. This is so fantastic. It also provides a great framework to expand upon. Thanks so much for providing so much learning for no cost to the viewer! Youre doing the community such a wonderful service. We are all so very grateful for your time and hard work helping all the little guys and gals out there trying to get better! Thanks!
@@CodeMonkeyUnity Great video. Could you tell us anything about the post processing you have set up? Is that just the demo scene in URP or are you using custom PP? I ask because I'm using HDRP and my demo scene doesn't look anywhere as nice as yours. Thanks for the great content. Liked and subscribed :D
Thank you for making this video. And all of your many other videos. They have proven to be very helpful in my learning. That said. In this video. The one thing I would have liked to have seen is a way to make Crosshair only come up when you are aiming. Thanks for the video!
i love this tutorial and everything was going smoothly until i finished the bulletprojectile script... the bullet would spawn in the scene but it wouldnt have any velocity, it just spawns and stays still. anyone had similar issues? ive rewatched and checked my scripts 20 times, still no fix
Bro i just fixed it what was the mistake is that in I forgot to writeline that was mouseWorldPosition = raycastHit.point; in ThirdPersonShooter Script in : if (Physics.Raycast(ray, out RaycastHit raycastHit, 999f, aimColliderLayerMask)) you also check it as his video is so fast that I didn't even noticed even after watching 10 times
Any chance you are willing to do a video on things you did in the final polished version? the weapon shake effect in particular is very cool, not to mention that you seem to have managed to use animation layers without the top layer twisting your character 45 degrees to the left, which is currently frustrating the hell out of me.
Great walkthrough CM. I was wondering if you experienced problems with the mixamo weapon related anims. Im experiencing a problem with ALL the weapon/aim anims from mixamo when applying the 'aim' animation layer mask weight to 1. Before applying the weight the character is facing straight forward in the idle animation like normal but when i make the weight 1 and activate the aim anim the character does not aim straight forward but to the left. So he goes from facing north to facing north west when the animation layer mask is applied. When setting up animation rigging to correct this the character just falls halfway into the ground and doesnt perform the idle animation but instead is just frozen in a weird pose.
I haven't encountered that issue but if you select the FBX file you downloaded and look in the inspector import animation settings you can change lots of things including applying a rotation offset
@@Luffius I had this same problem, if you go to the inspector for the animation, then go to animation window and go down to motion you can set it to the joints of the PlayerArmature or whatever you want it to rotate towards at the start of the animation. This is using the root motion node.
Bit late for an answer but if you select the animation taken from Mixamo once imported select Animation tab then scroll down to Root Transform Rotation and set it from Body orientation to original that should sort the aiming offset out.
At 06:44 you could change priority of virtual camera instead of disabling the GameObject. And at 16:05 you could just use Camera's transform.forward instead for calculating screen center and creating Ray with Camera object.
I'm having this weird issue where after I complete the work from the aim input section my camera starts moving weirdly, it starts teleporting instead of smoothly moving on screen.
I had the same issue. I tried EVERY fix I could Google. What finally "fixed it" for me was just closing Unity, playing Rocket League for a little bit and then coming back to it. I don't know what the **** happened in between but restarting Unity and going right back in, did NOT work. But coming back an hour later did? I have no idea. Its the second time I've come across this issue and the second time that little "turn it off and come back later" fix worked. I know its not exactly a solution but, that did it for me so I figured I'd share.
So this worked for me. I selected the PlayerArmature in the Hierarchy then in the Inspector I expanded the PlayerInput component and then clicked on Open Input Settings button. In the settings window I changed the Update Mode to Process Events in Dynamic Mode and that fixed it for me. Not sure about the trade offs of selecting this Update Mode though.
Thanks for the tutorial. But I have a question in the Animation section. I followed the steps like you showed at 29:20 and gave the "Aiming" layer a weight of 1 but for me it still is in the Idle animation of Base Layer. I can see that the Pistol Idle animation is playing as that blue line of progress runs on that state, but in the Game window, the character doesn't actually follow that animation but rather is still in the base layer idle animation. Any ideas as to what could be the issue here? Thanks.
@@CodeMonkeyUnity I replied a follow-up after a couple of days, but it's gone for some reason. Thanks for the prompt response from your side. Anyway, figured this issue out for anyone else that might come across the same problem. I did this - Go to the "Rig -> Animation Type" and change from "Generic" to "Humanoid" and click on "Apply". That fixed it.
tbh the controller from Unity is kinda trash since the jump and everything is basically hard coded, if you want to do something like removing the player control after jumping you basically have to rewrite everything
I like using FSMs. Tried this for the first time after writing different controllers bc it takes a long time to get everything nice and polished. Immediately hated it. I cant come up with game ideas anyway, so I'll just keep working on third person character controllers
For anyone having trouble getting the center of the screen with ScreenPointToRay and the Screen/2f method, this helped me out. Vector2 screenCenterPoint = new Vector3(0.5f, 0.5f, 0); Ray ray = Camera.main.ViewportPointToRay(screenCenterPoint);
Hi dude at 13:00 when I attach the sphere to the debug transform and play the scene nothing happens the sphere stays where it was placed and it does not follow the camera
@@UnofficialGalacticRepublic copy the script paste it and chat gpt and type "When I aim the debug transform stays in place" or something like that and test what it will give you but make sure to backup your original code just in case
Instead of using the Raycast, I just add an empty Gameobject to the MainCamera with a z distance of 500 and use its position for worldAimTarget. Don't have to get the screen center or add the invisible walls.
This is Great I have purchased the Space Combat kit from unity and I would like to implement my character with this into it. It would be awesome if you can do a tutorial on the space combat kit and implementation of this.
Hi Code Monkey, Thanks for the step by step guide. I'm not a programmer, so your videos has been a ton of help to me. It's just that I'm having problem getting the bullet projectile to move
@@unknownuser260 have the same problem, i've checked and re-checked the code at least 5 times, the game object inside the player is at the right distance, everything seems in order... i'm using Unity 2021.3.11f1, dunno if it's a useful info or not
Same happened to me, I think you forgot to attach the BulletProjectile.cs script to the bullet prefab as a component. Code Monkey dosent mention that step in the video but you have to do it if you're going to add velocity to your bullet.
Love the content, but could you slow down some. You type at full speed and then scroll as soon as your done to the next spot. Very hard to follow along without pausing and rewinding every few seconds.
Awesome tutorial. I was able to follow beginning to end as a complete noob. Took a little more time, but i did it haha! I'm stuck on the animations with Mixamo however, I uploaded the unity character model and used it as the skeleton but the animation doesn't seem to actually trigger. I can see in the animator window where it tries to, however!
The animation doesn't work or its just the animator not changing to that state? Make sure the animation is set as humanoid and the animator has the avatar assigned And check the conditions for transitioning into and out of that state
Thank you for the great video! I had a problem with the camera jumping around, and it turns out that since I was using the freelook camera, the camera was rotating much slower than (and independently of) the camera target, which caused a desync that looks really weird when going into aiming mode. So there seems to exist a hidden assumption here that you should use the virtual camera unless you want to make some additional changes to the code. Just pointing it out if anyone else wants to experiment like me. Thanks for the great video again :)
could you show us how to add animations like crouch, vault and slide? and you should 100% make tutorials on how to make throwables and an inventory system and gun system where we can shoot other people and deal damage and reload and switch guns, etc., it'd be really cool!
This was a great help!! Had a lot of problems setting up the upper body to move withe crosshair using IK.... Animation Rigging will make it a lot easy.
I just wanna point out this guy still answering questions in more than a 1 year video. True Legend!!! in 18:40, I want my character to be constantly fasing the way I'm looking and don't have an aim function. So I just used the code out of if statement and still works great! My only problem is, because player is actually looking to raycasted object, for example if I push my right shoulder to the wall and look at the wall, because of the perspective, object actually moves behind the character and causes to player to actually look back. Is there a possible way that I can fix this?
Heh yup as long as someone posts a comment on the video an not on a reply I'll probably see it the next day. For that issue the best solution is to look at how far the target object is, if it's too close then don't look at it. Either lower the rig weight or define a point a certain distance in front
@@CodeMonkeyUnity Thank you so much for the reply I'll give it a try. Another problem is, I'm running all this on Netcode. Because I don't want other players to shoot for myself, I put my aim point and muzzle point in my player prefab, and then made them separate prefabs so I can reach from transform function. Right now my bullets spawn, but doesn't spawn in my muzzle point, instead spawn at 0,0,0 and doesn't move. What should I do?
Thanks for great tutorial! How would you handle states with that? Do you think Aiming should have different states? Like, Idle, Moving, Jump, Crouching, Aiming? Do you think its necessary for that? Since aiming if elses getting complex in time, I thought FSM would be cool but i couldnt discriminate them
Can't wait for the video about Animation Rigging. I'm currently struggling to sync the multi aim constraint with Cinemachine. It causes jittering every times I move the mouse around while aiming.
Why are you applying the aim constraint to Cinemachine? I didn't touch that at all, the camera works exactly the same, only the arms/weapon are set to aim towards the mouse position. If the jittering is from the mouse target position, add some Lerp to smooth it out.
@@CodeMonkeyUnity Let me explain my setup. Currently, I have a rig layer set up that is solely responsible for aiming the weapon. I have the multi aim constraint set up for the weapon model to aim exactly at an empty transform attached to the camera. The jittering happens to the weapon when I move the mouse around. I tried using CinemachineBrain's manual update in Update method, and it fixes the problem. So, my speculation is that by default, the Cinemachine camera's translation and rotation is updated in LateUpdate method, which means the empty transform attached to the camera is also updated in LateUpdate, while the animation rigging is updated in Update method, so the entire rig is out of sync from the camera, causing the jittering. That's why I would like to know what kind of setup you made for the polished third person controller. It looks silky smooth.
Hey man great tutorial! On the polishing step what is the difference in you Avatar Masks for the layers and are the two animations for aiming/ stabilizing the same animation? Thanks!
What is the best way to expand this controller: to add your code inside the existing script or attach another script to an object and add more logic there?
Depends on what you want to add to it, if its adding some other feature like Auto Aim, I would make it in the same script, if its adding a complex weapon manager logic, I would make a separate script
Awesome tutorial. I have a request.. in continuation to this video, can you please teach on how to ride, say, a horse?. In which case the keys will control the horse, not the player figure sitting on it. Thank you.
💬 It took a lot of work to make this video but I'm really happy with the final result! I hope you like it!
✅ Get the Project Files unitycodemonkey.com/video.php?v=FbM4CkqtOuA
🌍 Get my Complete Courses! ✅ unitycodemonkey.com/courses
👍 Learn to make awesome games step-by-step from start to finish.
Also u want to continue mobile 3rd person shooter
Sir, need new unity mega bundle review🙏
aw man i love u tnks
Look My Channel, Im Make A Mobile Legends 2D Version, Thank You😁🙏🙏
It is so usefull sir. Can you please suggest any video, how to attach weapon to the player, like you used
for those stuck between 20:00-23:00:
1. make sure the BulletProjectile script is on the pfBulletProjectile prefab (click the prefab and drag the script on).
2. Also, click on the prefab and make sure Use Gravity is ticked off.
Still following the tutorial, but was stuck for a good while on this. Good luck!
update: works perfectly thank you so much this is an amazing tutorial
I have been stuck on this for an hour, thank you so much!
Thank you I was wondering why my bullet would spawn and just hover took me hours and reading this comment fixed it thanks!
Thank you!!! I spent 2 hours looking around and not understanding why it's not working lol
You're a life saver!
@@irisshard2336 ikr! lol, I'm very happy now!
Thank you so much!
If anyone is having difficulty aiming and walking at the same time, you need to create an Avatar Mask. Open up "Humanoid" in the Avatar Mask and deselect the legs and lower IK so that only the upperbody is green. Then, click the cog wheel on the Aiming layer and add the Avatar Mask to the Mask field. This will make it so that when aiming, only the upper body bones are affected and you will still be able to walk as per the Base Layer animations.
Great point, In addition to this,
make sure you set your model to humanoid.
After you import your fbx file, under the inspector, select "Rig" and then choose "Humanoid" under the animation type.
This will allow you to switch layers and also prevent the bug of (the character from showing halfway through the ground).
Is the avatar mask created from the aiming animation fbx?
@@noblephantasms7250 You can do this by Right Clicking Create go down to Avatar Mask.
From there I clicked on the legs, body and the bottom 1ks.
Then on your Animator and your Aming Layer, click the gear icon, add the mask you just made and click on IK pass.... This is what I did any way works for me :)
For people who don't know how to do it th-cam.com/video/W0eRZGS6dhQ/w-d-xo.html
@@pawepatrzek2785 thanks for the reply although I just finished University last month
I'll be real with you, channels such as Code Monkey and Brackeys are the reason I chose Unity over Unreal when it came to answering "which engine?"
The quality and accessibility of tutorials such as these _cannot_ be overstated. Thank you for all the terrific content, and keep doing what you do! You've earned another subscriber/supporter!
I'm glad the videos helped you! Thanks!
@@CodeMonkeyUnity why will nothing move or respond in the scene
@@alsgaming1426 make sure scripts and stuff are attached?
@@jaybehl7567 yes they are
@@jaybehl7567 But where to attach BullectProjectile script ?
you can put and "else{ mouseWorldPosition = ray.GetPoint(10);}" after the raycast so you dont need a collider for the skybox
Thank you so much
One of the most usefull comments on the TH-cam. Thank you!!!!
EXCELENT
I'm not sure how to implement this, unity says "mouseWorldPosition" does not exist in this context'
@@tartoras look the script in the video, he created a Vector3 called "mouseWorldPosition"
This is the first tutorial I found showing how to extend the Unity Starter controller up to a real use case scenario. Great content, thank you!
its finally happening! Im really hoping for a melee combat tutorial that expands upon the 3rd person starter assets. would it be possible to have the melee combat have animations where you dont just animate the upper body to perform melee attacks? like if you do a melee attack, you wont be able to move until the melee animation has finished playing like in most action games? a combo and targeting system would also be nice :)
Yes please! Would love this!
@@nooksniche lessssssss ho
Yeeeee
Yes please!
For the hit scan on 27:08 if the particle shows up on the feet it is because it is using the player transform position.
Make a var called like hitpoint, similiar to the debugTransform, in the 'raycast IF statement' set the new var hitpoint to the 'raycastHit.point', and in the shoot instantiate code replace transform.position to the hitpoint variable.
Thanks for the tutorial, learned alot!
ty dude =D
Was having trouble with this, thank you. You can also just replace transform.position with debugTransform.position in that if statement.
thanks bro I'm about to rage quit lol glad i check the comment section
How ? replace ? I need help
Thank u bro
When you turn the character to the direction you're aiming, you use Lerp with the current position in the first argument. Lerp really works when you continually provide the original starting value and a final value on every frame. If you don't want to keep track of the original starting value, use MoveToward or RotateToward instead. The progression of values you get with Lerp are only linear if you use it as designed, with the original starting value on every call.
Yes I intentionally do not want it to be linear. I want it to be faster the further away it is from the target so it gets there faster.
Thanks for the tutorial. It really helped me to move forward my project. Here is a tip:-
Instead of placing cubes around the environment for player. just get a point from ray at a distance.
Ray ray = _cam.ScreenPointToRay(screenCentrePoint);
debugTransform.position = ray.GetPoint(20);
GetPoint will give you at point on the ray at the distance you have given. so even if player is aiming at the sky it will work without placing collider around environment.
Vector2 screenCenterPoint = new Vector2(Screen.width / 2f, Screen.height / 2f);
Ray ray = Camera.main.ScreenPointToRay(screenCenterPoint);
if (Physics.Raycast(ray, out RaycastHit raycastHit, 999f, aimColliderLayerMak)) {
debugTransform.position = raycastHit.point; }
else
{
debugTransform.position = ray.GetPoint(20f);
}
Like this right?
Damn bro, I was about to ask if there was a way to fix that, and there you go saving the day. Thanks mate!
If anyone is a fool like me, make sure you also set the moustWorldPosition = to the ray.Getpoint() otherwise when you aim at the sky your not getting that variable updated.
Yes, this is exactly the solution I was looking for. Thank you.
Edit:
This does fix the abrupt change of aim when going from one target to another, but the aim is no longer accurate. I think I'll have to find a way to smooth out that abrupt change.
____________________________________________________
Great idea, thanks. Additionally, I would say that when you're aiming at objects other than sky, still better to use debugTransform.position = ray.GetPoint(20); because in this way your aiming will stay smooth. If debugTransform keeps jumping from object to another, your character's aim abruptly changes, which in my opinion is not desirable (at least for my game design):
Here's the code :
Vector3 mouseWorldPosition = Vector3.zero;
Vector2 screenCenterPoint = new Vector2(Screen.width / 2f, Screen.height / 2f);
Ray ray = Camera.main.ScreenPointToRay(screenCenterPoint);
if (Physics.Raycast(ray, out RaycastHit raycastHit, 999f, aimColliderLayerMask))
{
debugTransform.position = ray.GetPoint(20f);
mouseWorldPosition = ray.GetPoint(20f);
}
else
{
debugTransform.position = ray.GetPoint(20f);
mouseWorldPosition = ray.GetPoint(20f);
}
Another great tutorial, thanks a lot! Also I think I found a neat solution for aiming in the sky (14:02), without needing boundary colliders everywhere. If the raycast returns false move to an else block and create the aiming point by projecting a vector in the direction of the camera orientation, from the camera position, at a desired distance from it. For example I set mine to 200:
if (Physics.Raycast(ray, out RaycastHit raycastHit, 200f, AimColliderLayerMask))
{
DebugTransform.position = raycastHit.point;
}
else
{
DebugTransform.position = _cam.transform.position + _cam.transform.forward * 200f;
}
Let me know if I am overseeing something and there is a problem with this, but thanks again for the video.
Yup that's an excellent approach, that's what I would do if I used this controller in a full game instead of just a simple demo.
hey can you tell me like _cam is what what ihave to give refrence of here
@@alovelygondal7673 Hi, this is in relation to the main camera. if you want you can use this instead which will work as long as you have one main camera.
else
{
debugTransform.position = Camera.main.transform.position + Camera.main.transform.forward * 999f;
}
The instantiating bullet can be used in a realistic game as then we can set the spawn point in the guns barrel and then if this happens( 27:54 ) then it shows that the bullet actually spawns from the guns itself and not from the middle of the screen, many realistic FPS/TPS games do this thing and it adds that extra bit of realism to the game really cool, raycast can be used for a more arcade shooter
You should do a tutorial on a First Person Controller setup with full body awareness and animation rigging. I just realized while putting mine together that there are no real good tutorials for that out there for reference so I had to do mine all by scratch. It was actually more tricky than I expected. I never realized things like keeping the head and body separate for networking reasons. Or how difficult it really is to get the body to perform like an actual body in relation to eye sight and the hands/gun movement.
This! This is what I needed to know to make the game I had in my head for almost a year, but put it to the side for easier challenges
Excellent tutorial! I had already got a basic combat system going with the Third Person Controller, but I was not at all happy with the camera. This tutorial made it all right as rain, thank you! :)
For bullet not working, :
- Add the bullet script to your bullet => he not showed it but it said it (i realised that after 10x watching haha)
- Make your bullet a prefab, drag and drop it in the prefab folder. Than delete it from the scene, and drag and drop the prefab in "Bullet Projectil" from thirdPersonShooterController on the playerArmature
- If it bounce/not destroy; make the colider a few bigger than the cube
Wow I was stuck on that for so long! Thank you!
Thank you brother! These comments are gold for unity noobs that miss these subtle things and get stuck and on the verge of saying fuck this.
@@DeKosta Literally was me a second before I found this haha
Not all heroes wear capes
Thank u Bro
There is a legend that someday CodeMonkey Sensei will explain how to work with the animation Rigging Package ...
Brackeys made a tutorial on animation rigging, you should check it out
@@Fizz17 Yes I found somebody videos but I love Code Monkey videos Tutorials. He is ver clear and I can Understand all that he show...
You can also check kiwi coder he is doing a series using animation rigging
Yes, this is the way
if you feel that the camera lags when you move the mouse, you can try this solution found on Unity forum :
2021.2.7 uses version 1.2 of the Input system package which has an issue with inputs delta when set to fixed update and can cause the lags you are seeing.
To check if that's the issue you could try this:
Edit -> project settings -> Input system package
If Update Mode is set to Process events in fixed update change it to Process events in dynamic update
I hope this will help you and thank's for this tutorial :)
Thanks a lot!
This fixed the camera lag i had!
Thank you
I absolutely love this video. Right up to the point of adding a point animation. I can't find anything easy to follow that will allow me to add animations to the standard unity third person controller.
I figured this issue out for anyone else that might come across the same problem. I did this - Go to the "Rig -> Animation Type" and change from "Generic" to "Humanoid" and click on "Apply". That fixed it.
Also for the crosshair if anyone wants an easy way to enable it when aiming and disable when not you can add
[SerializeField] private GameObject crosshair; // makes a serialized field for the image of the crosshair to be assigned to.
In Awake: crosshair.SetActive(false); // hides the crosshair to make sure it is hidden at the start.
In Update
if (starterAssetsInputs.aim) // if the user is aiming
{
crosshair.SetActive(true); // set crosshair to enabled.
}
else // if they are not aiming
{
crosshair.SetActive(false); // disable the crosshair
}
Then in Unity drag the crosshair image onto the serialized field.
Hope this helps anyone who wants this easily.
The full code up to the crosshair section for me is:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cinemachine;
using StarterAssets;
public class ThirdPersonShooterController : MonoBehaviour
{
[SerializeField] private CinemachineVirtualCamera aimVirtualCamera;
[SerializeField] private float normalSensitivity;
[SerializeField] private float aimSensitivity;
[SerializeField] private GameObject crosshair;
private StarterAssetsInputs starterAssetsInputs;
private ThirdPersonController thirdPersonController;
private void Awake()
{
starterAssetsInputs = GetComponent();
thirdPersonController = GetComponent();
crosshair.SetActive(false);
}
private void Update()
{
if (starterAssetsInputs.aim)
{
aimVirtualCamera.gameObject.SetActive(true);
thirdPersonController.SetSensitivity(aimSensitivity);
crosshair.SetActive(true);
}
else
{
aimVirtualCamera.gameObject.SetActive(false);
thirdPersonController.SetSensitivity(normalSensitivity);
crosshair.SetActive(false);
}
}
}
Hey thanks it worked. It took a few tries because I'm not a coder and was far ahead by the time I found this comment
is there any way that this virtual camera only follows characters back and on look input its works same before ...if character rotate than the virtual camera shoul have to rotate as to follow charcters back
You are probably the only real help out there! Ty so much bro!!! Patron this guy... he deserve it!
Honestly this is awesome. Doing this except for a melee system would also be awesome, to cover both melee/ranged weapon systems.
for those wanting to make an automatic weapon, here's what I did (idk how much it'll help since I've changed the code quite a bit since following this tutorial)
1) add 3 variables to the top of the script:
private bool isFiring = false;
float shotCounter;
public float rateOfFire = 0.1f;
2) in update, add this where you're instantiating your bullet:
if(starterAssetsInputs.shoot)
{
isFiring = true;
}
else if(starterAssetsInputs.shoot == false)
{
isFiring = false;
}
if(isFiring == true)
{
shotCounter -= Time.deltaTime;
if(shotCounter
I have waited so long for this, thank you Mr. Monkey
Finally a simple and good tutorial about third person shooter. There's a lot out there but each one more difficult then other. Congratulations for this awesome tutorial.
This is perfect, I'm currently working on and trying to learn how to make some good feeling Third person shooter controls!
An absolute god you are. My first game will surely be completed because of you. Thank you.
Best of luck with your game!
dude thank you so much for this!!! I've been pulling my hair out for months trying to figure this new input system out and though I'm still reluctant to say I figured it out, I definitely made progress finally today with combining what I've been trying to do with what you did here... Thank you so much for this upload! You're making dreams come true my friend!
Nice! I'm glad the video helped you!
Great little tutorial. I liked the new input system you are using compared to the old one. The coding you added for the third person controller was also pretty informative. Gotta save this to use later if I get around to doing a tps shooter demo in the future.
I'll be honest, what i was expecting was ful tutorial without assets. But good theres a person that creates these free of charge for everyone ^^. Keep it up!
I've been searching online for a true first person shooter controller Tutorial and found nun if you could make one that would be amazing for those of you who don't know what a true FPS is it's like a third person controller it uses third person animations and a full body but the camera is mounted on the head games like escape from tarkov and arma 3 use it
33:21 This part does interest me a lot since it's one of the things I've had issues with for upper body aiming. I tried IK but it didn't quite work out as I wanted.
Select Rig, Change Avatar Definiton to "Copy From Other Avatar", and select Armature Avatar as source
@@zexanein Thank you, I was struggling with this all day!
I saw an error: @ around 27:20, near the ending of the Raycast shooting tutorial, the Instantiate methods are spawning the particles at transform.position, aka the player position.
This makes the particles spawn inside the player.
It should be changed to mouseWorldPosition or debugTransform.position which is the raycast.point value of where the raycast hit.
Oh yeah nice catch, yup it should be the mouseWorldPosition, seems I cut the video where I fixed it
Its funny when you do it because it looks like the character is exploding! Could you maybe add or explain the steps to get the Pistol Idle animation from Mixamo? I can only download the entire mesh, I dont know how to extract the .animation file from the .fbx
@@chrheca Click on the arrow icon to expand the object, inside is the animation, click on it then Ctrl + D to duplicate and it will duplicate it outside of the .fbx as a separate asset
@@CodeMonkeyUnity Something is missing the animation isn't playing and on preview it is a T mode animation
Thank you, I spent like an hour trying to find my mistake haha
Finally video launch lovely video
Please add simple climbing and ledge hanging. Thanks great series.
Just in case someone would be interested, you can also rotate the character (when aiming) based on the camera planar direction, this way it will always rotate according to the camera :
Vector3 cameraPlanarDirection = Vector3.ProjectOnPlane(Camera.main.transform.forward, transform.up).normalized;
transform.forward = Vector3.Lerp(transform.forward, cameraPlanarDirection, Time.deltaTime * 20f);
I just skipped to the end to first see how it will look like when i set it up and instantly liked. Just what i needed for my game (:
Can you make a video on how you polished everything at the end? Because I have the animations and functionality down, but it would be very helpful if there was a video showing how to add for example a walking animation while aiming, all the FX used and so on.
Other than that this video was great and really helpful :)
I'm planning on doing a video on animation rigging which is what I used to make the weapon aim at the target
For walking while aiming, that's just adding a Avatar mask on the second layer and only overriding the upper body, leaving the legs to walk
@@CodeMonkeyUnity Hey Code Monkey! What if I want incorporate a different movement animation while aiming? How does that work? Can you please make a video on that one or could you briefly explain it?
@@CodeMonkeyUnity ahhhhh see that's good so instead of doing it through code, animation rigging makes that much simpler, nice!
@@rickyreaves5794 I have since made that video on how the Aim Animation Rigging works unitycodemonkey.com/video.php?v=luBBz5oeR4Q
Awesome video! Would love to see/purchase a full (or more expansive) third person shooter (or FPS) tutorial from you ^^
SOOOO first go-round I broke everything at 7:00 into the video. My error was that Code Monkey quickly attaches the script for toggling between the zoom and normal camera that I missed that he had attached the PlayerAimContorller script to the PlayerAmature rather than the PlayerAimCamera. I have about a weeks worth or Unity so for anyone else that hits this error hope this helps.
Had same error dude
Third person shooter controller?
I know how to fix it... just open your thirdpersonshooter script and change private void"awake" and "update" to "Awake" and "Update". (capital letters)
i know im late to the party and i might have missed it but i did also have about 100 errors rolling in a minute when i had hit play to test out the zoom, what fixed it for me is under PlayerArmature, the ThirdPersonShooterController script, i dragged the PlayerAimCamera into the Aim Virtual Camera, and the errors went away and is working as it should be. hopefully that helps anyone out that might be having that issue or overlooking something potentially simple.
@@davisardians8411 thanks so much it worked
14:26 A more simple solution
if(Physics.Raycast(ray, out RaycastHit raycastHit, 999f, aimColliderLayerMask))
{
debugTransform.position = outhit.point;
}
else
{
debugTransform.position = ray.GetPoint(30);
}
When there isn't a collider in front of the player, the target point will be a little bit away from him if you write this code.
why it is 30f?
If you want the crosshair to only appear when you right click (like in a non-shooter focused game with shooting mechanics) then make a new script with this:
using UnityEngine;
using System.Collections;
public class Cross : MonoBehaviour
{
// Graphic used for crosshair
public Texture2D crosshairTex;
// Rect for crosshair size and position
private Rect crosshairRect;
// bool to turn crosshair on and off
public bool IsCrosshairVisible = true;
void Awake()
{
Cursor.visible = false;
crosshairRect = new Rect((Screen.width - crosshairTex.width) / 2,
(Screen.height - crosshairTex.height) / 2,
crosshairTex.width,
crosshairTex.height);
}
void Update()
{
if (Input.GetMouseButtonDown(1))
{
IsCrosshairVisible = !IsCrosshairVisible;
}
if (IsCrosshairVisible == true)
{
IsCrosshairVisible = true;
}
else
{
IsCrosshairVisible = false;
}
}
void OnGUI()
{ // draw the crosshair in center of screen
if (IsCrosshairVisible)
GUI.DrawTexture(crosshairRect, crosshairTex);
}
}
@@CDisplay-o9t Or just:
void Update() {
IsCrosshairVisible = Input.GetMouseButtonDown(1);
}
😱😱😱
@@CDisplay-o9t that works. I actually used this line of code(input.getmousebutton down and up) to make the aiming instead of using the new input system. Works well for me!
I was trying to find out how to add new buttons to the Starter Assets. Thanks!
Code Monkey, you have outdone yourself. This is so fantastic. It also provides a great framework to expand upon. Thanks so much for providing so much learning for no cost to the viewer! Youre doing the community such a wonderful service. We are all so very grateful for your time and hard work helping all the little guys and gals out there trying to get better! Thanks!
I'm glad you liked the video! Thanks!
@@CodeMonkeyUnity Great video. Could you tell us anything about the post processing you have set up? Is that just the demo scene in URP or are you using custom PP? I ask because I'm using HDRP and my demo scene doesn't look anywhere as nice as yours. Thanks for the great content. Liked and subscribed :D
@@JimmyThe It's just Bloom, a bit of Saturation and a Vignette effect
Thank you for making this video. And all of your many other videos. They have proven to be very helpful in my learning. That said. In this video. The one thing I would have liked to have seen is a way to make Crosshair only come up when you are aiming. Thanks for the video!
Which pack did you use for the gun animations for the final demo?
Best video yet @Code Monkey! And great point at the end to 'never stop learning'. Sooo true
i love this tutorial and everything was going smoothly until i finished the bulletprojectile script... the bullet would spawn in the scene but it wouldnt have any velocity, it just spawns and stays still. anyone had similar issues? ive rewatched and checked my scripts 20 times, still no fix
Add a Debug.Log where you're setting the velocity, is that line running? Are you maybe setting it to 0,0,0?
Is your script actually attached to the bullet prefab?
@@-pcmr-108i faced the same problem and i tried what you said and that was the error for me idk how i did missed that but thank you !.
Bro facing the same problem.
Bro i just fixed it what was the mistake is that in I forgot to writeline that was
mouseWorldPosition = raycastHit.point;
in ThirdPersonShooter Script in :
if (Physics.Raycast(ray, out RaycastHit raycastHit, 999f, aimColliderLayerMask))
you also check it as his video is so fast that I didn't even noticed even after watching 10 times
Any chance you are willing to do a video on things you did in the final polished version? the weapon shake effect in particular is very cool, not to mention that you seem to have managed to use animation layers without the top layer twisting your character 45 degrees to the left, which is currently frustrating the hell out of me.
Great walkthrough CM. I was wondering if you experienced problems with the mixamo weapon related anims. Im experiencing a problem with ALL the weapon/aim anims from mixamo when applying the 'aim' animation layer mask weight to 1. Before applying the weight the character is facing straight forward in the idle animation like normal but when i make the weight 1 and activate the aim anim the character does not aim straight forward but to the left. So he goes from facing north to facing north west when the animation layer mask is applied. When setting up animation rigging to correct this the character just falls halfway into the ground and doesnt perform the idle animation but instead is just frozen in a weird pose.
I haven't encountered that issue but if you select the FBX file you downloaded and look in the inspector import animation settings you can change lots of things including applying a rotation offset
@@CodeMonkeyUnity You truly deserve more love! Thank you 🙏
@@CosmicAlchemistt Could you pls explain to me what you have done to fix this problem?
@@Luffius I had this same problem, if you go to the inspector for the animation, then go to animation window and go down to motion you can set it to the joints of the PlayerArmature or whatever you want it to rotate towards at the start of the animation. This is using the root motion node.
Bit late for an answer but if you select the animation taken from Mixamo once imported select Animation tab then scroll down to Root Transform Rotation and set it from Body orientation to original that should sort the aiming offset out.
At 06:44 you could change priority of virtual camera instead of disabling the GameObject.
And at 16:05 you could just use Camera's transform.forward instead for calculating screen center and creating Ray with Camera object.
Yes those are perfectly valid alternatives
I'm having this weird issue where after I complete the work from the aim input section my camera starts moving weirdly, it starts teleporting instead of smoothly moving on screen.
same here
I had the same issue. I tried EVERY fix I could Google. What finally "fixed it" for me was just closing Unity, playing Rocket League for a little bit and then coming back to it. I don't know what the **** happened in between but restarting Unity and going right back in, did NOT work. But coming back an hour later did? I have no idea. Its the second time I've come across this issue and the second time that little "turn it off and come back later" fix worked.
I know its not exactly a solution but, that did it for me so I figured I'd share.
Still having this issue. Anyone found a solid way to fix this?
So this worked for me. I selected the PlayerArmature in the Hierarchy then in the Inspector I expanded the PlayerInput component and then clicked on Open Input Settings button. In the settings window I changed the Update Mode to Process Events in Dynamic Mode and that fixed it for me. Not sure about the trade offs of selecting this Update Mode though.
This is a fantastic workout with the new Input system and the third-person character controller! Very well done! Thanks!
Thanks for the tutorial. But I have a question in the Animation section. I followed the steps like you showed at 29:20 and gave the "Aiming" layer a weight of 1 but for me it still is in the Idle animation of Base Layer. I can see that the Pistol Idle animation is playing as that blue line of progress runs on that state, but in the Game window, the character doesn't actually follow that animation but rather is still in the base layer idle animation. Any ideas as to what could be the issue here? Thanks.
Did you maybe assign a mask with nothing selected? Does the aim animation work correctly by itself?
@@CodeMonkeyUnity I replied a follow-up after a couple of days, but it's gone for some reason. Thanks for the prompt response from your side.
Anyway, figured this issue out for anyone else that might come across the same problem. I did this - Go to the "Rig -> Animation Type" and change from "Generic" to "Humanoid" and click on "Apply". That fixed it.
I had the exact same issue and BAM, there's your comment... thank god I didn't stop scrolling :) Thanks Santosh and CodeMonkey!
@@Santosh-tq4nj hey need help in this can you please explain these steps in detail as i am new to unity
@@darshankhaire879 have you managed to solve it?
This channel is the best for indie devs like me 🥰
tbh the controller from Unity is kinda trash since the jump and everything is basically hard coded, if you want to do something like removing the player control after jumping you basically have to rewrite everything
I like using FSMs. Tried this for the first time after writing different controllers bc it takes a long time to get everything nice and polished. Immediately hated it. I cant come up with game ideas anyway, so I'll just keep working on third person character controllers
can't wait for the Code Monkey's 3D TPS game in the future
For anyone having trouble getting the center of the screen with ScreenPointToRay and the Screen/2f method, this helped me out.
Vector2 screenCenterPoint = new Vector3(0.5f, 0.5f, 0);
Ray ray = Camera.main.ViewportPointToRay(screenCenterPoint);
if you have any questions ask me, i spent hours on this tutorial to made it working from 0.
Hi dude at 13:00 when I attach the sphere to the debug transform and play the scene nothing happens the sphere stays where it was placed and it does not follow the camera
@@clips_from_everything for me the sphere moves but when im aiming it stays still
@@UnofficialGalacticRepublic copy the script paste it and chat gpt and type "When I aim the debug transform stays in place" or something like that and test what it will give you but make sure to backup your original code just in case
@@mutlugameofhalit I just carried on in the tutorial and it somehow got fixed along the way
Instead of using the Raycast, I just add an empty Gameobject to the MainCamera with a z distance of 500 and use its position for worldAimTarget.
Don't have to get the screen center or add the invisible walls.
Sorry for my bad english but if u can shoot u need to swap bullet scrip in pfbulletprojectile
really love this guy and his efforts.
Thanks, I'm glad you like the videos!
I was waiting for this since the day it was announced, Thank you!!!!
This is Great I have purchased the Space Combat kit from unity and I would like to implement my character with this into it. It would be awesome if you can do a tutorial on the space combat kit and implementation of this.
Hi Code Monkey, Thanks for the step by step guide. I'm not a programmer, so your videos has been a ton of help to me. It's just that I'm having problem getting the bullet projectile to move
Did you set the rigidbody.velocity? Also make sure you're not spawning it inside a collider
@@CodeMonkeyUnity I did, but it just "float" at the spawn until a new bullet spawns in and knocks it away.
@@unknownuser260 have the same problem, i've checked and re-checked the code at least 5 times, the game object inside the player is at the right distance, everything seems in order... i'm using Unity 2021.3.11f1, dunno if it's a useful info or not
Same happened to me, I think you forgot to attach the BulletProjectile.cs script to the bullet prefab as a component. Code Monkey dosent mention that step in the video but you have to do it if you're going to add velocity to your bullet.
@@alexsulea429 thank you, I thought I was going crazy and missing something despite going over it a dozen times
Thanks for the motivation.
I was just about to fall asleep then the video began. Like a bucket of ice water.
your visual studio burns my eye😂
Add "Volume" to your bullet ,and press new profile ,add "Bloom" intensity set to 1 , you will have a nie and shiny like ball in the video.
volume add "postprocessing" color adjustment >> contrast ,then your scene will be more colorful
all your videos are good.... But this is best :)
Love the content, but could you slow down some. You type at full speed and then scroll as soon as your done to the next spot. Very hard to follow along without pausing and rewinding every few seconds.
Thanks for all
Awesome tutorial. I was able to follow beginning to end as a complete noob. Took a little more time, but i did it haha! I'm stuck on the animations with Mixamo however, I uploaded the unity character model and used it as the skeleton but the animation doesn't seem to actually trigger. I can see in the animator window where it tries to, however!
The animation doesn't work or its just the animator not changing to that state?
Make sure the animation is set as humanoid and the animator has the avatar assigned
And check the conditions for transitioning into and out of that state
I can't seem to trigger the animation as well even though I did everything codemoney did!
bru, u sick! seriously! well done!
Thanks! using this controller I could make my LD49 game thanks again
I try to find this tutorial for a long time. Thanks
Comment section is very helpful!
What a quality channel! Thanks for video.
Thank you for the great video! I had a problem with the camera jumping around, and it turns out that since I was using the freelook camera, the camera was rotating much slower than (and independently of) the camera target, which caused a desync that looks really weird when going into aiming mode. So there seems to exist a hidden assumption here that you should use the virtual camera unless you want to make some additional changes to the code.
Just pointing it out if anyone else wants to experiment like me. Thanks for the great video again :)
could you show us how to add animations like crouch, vault and slide? and you should 100% make tutorials on how to make throwables and an inventory system and gun system where we can shoot other people and deal damage and reload and switch guns, etc., it'd be really cool!
This was a great help!! Had a lot of problems setting up the upper body to move withe crosshair using IK.... Animation Rigging will make it a lot easy.
What you mean by animation rigging ?
@@pytchoun140 it's a package provided by unity for runtime dynamic animation
@@marmikparikh967 do you have tutorial?
@@pytchoun140 there r tutorials on unity's TH-cam channel. Check it there
@@marmikparikh967 which one
Good to see you 🥰
I just wanna point out this guy still answering questions in more than a 1 year video. True Legend!!!
in 18:40, I want my character to be constantly fasing the way I'm looking and don't have an aim function. So I just used the code out of if statement and still works great! My only problem is, because player is actually looking to raycasted object, for example if I push my right shoulder to the wall and look at the wall, because of the perspective, object actually moves behind the character and causes to player to actually look back. Is there a possible way that I can fix this?
Heh yup as long as someone posts a comment on the video an not on a reply I'll probably see it the next day.
For that issue the best solution is to look at how far the target object is, if it's too close then don't look at it. Either lower the rig weight or define a point a certain distance in front
@@CodeMonkeyUnity Thank you so much for the reply I'll give it a try. Another problem is, I'm running all this on Netcode. Because I don't want other players to shoot for myself, I put my aim point and muzzle point in my player prefab, and then made them separate prefabs so I can reach from transform function. Right now my bullets spawn, but doesn't spawn in my muzzle point, instead spawn at 0,0,0 and doesn't move. What should I do?
thank for the video! it was super useful, but where you learned about the animation rigging package? any video?, thank btw
I read the manual and played around with the samples.
I've actually got a video on that package coming out this weekend so stay tuned!
Thanks for great tutorial! How would you handle states with that? Do you think Aiming should have different states? Like, Idle, Moving, Jump, Crouching, Aiming? Do you think its necessary for that? Since aiming if elses getting complex in time, I thought FSM would be cool but i couldnt discriminate them
Can't wait for the video about Animation Rigging. I'm currently struggling to sync the multi aim constraint with Cinemachine. It causes jittering every times I move the mouse around while aiming.
Why are you applying the aim constraint to Cinemachine? I didn't touch that at all, the camera works exactly the same, only the arms/weapon are set to aim towards the mouse position.
If the jittering is from the mouse target position, add some Lerp to smooth it out.
@@CodeMonkeyUnity Let me explain my setup. Currently, I have a rig layer set up that is solely responsible for aiming the weapon. I have the multi aim constraint set up for the weapon model to aim exactly at an empty transform attached to the camera. The jittering happens to the weapon when I move the mouse around.
I tried using CinemachineBrain's manual update in Update method, and it fixes the problem. So, my speculation is that by default, the Cinemachine camera's translation and rotation is updated in LateUpdate method, which means the empty transform attached to the camera is also updated in LateUpdate, while the animation rigging is updated in Update method, so the entire rig is out of sync from the camera, causing the jittering.
That's why I would like to know what kind of setup you made for the polished third person controller. It looks silky smooth.
@@AppsolusZero Want to know too, didnt sucess to do the animation rigging
Awesome video, thank you)
Thx so much dude. I need this tutorial my re4 similar game:)
Hey man great tutorial! On the polishing step what is the difference in you Avatar Masks for the layers and are the two animations for aiming/ stabilizing the same animation? Thanks!
very good, thanks for sharing.
Awesome! Always had troubles starting on a system like this. Looking forward to use this in an idea I had that I was always putting on the backlog :p
a tutorial on how to do an rts cover system like company of heroes would be cool.
I was playing the CoH3 beta a while ago and I thought about that! I might do it when it comes out
Make more tutotials about shooter game please
where should I put the bulletProjectileRaycast for the polished game part?
hiiii
woah , been waiting!!
As always awasome explanation, I grab the course of Unity tips thanks again
What is the best way to expand this controller: to add your code inside the existing script or attach another script to an object and add more logic there?
Depends on what you want to add to it, if its adding some other feature like Auto Aim, I would make it in the same script, if its adding a complex weapon manager logic, I would make a separate script
@@CodeMonkeyUnity thanks for the prompt reply! I was thinking about adding more actions and animation handlings, like melee fight, taunts/gestures.
Great tutorial!
You're the best!
Thank you!
Awesome tutorial.
I have a request.. in continuation to this video, can you please teach on how to ride, say, a horse?. In which case the keys will control the horse, not the player figure sitting on it. Thank you.
This is the perfect video that i need
Thank u very much