Let's add them to our controller, inserting the code below immediately after gravity is applied, replacing the previous if statement. These design choices help add a feeling of weight and commitment to jumping, making it more exciting. As well, there isn't usually any automatic deceleration applied when there is no movement input from the player. Most platforming games tend to restrict a player's control while they are in the air, typically by reducing how quickly they can accelerate. Our controller is very nearly complete, but we'll add a little bit more polish to the air controls before wrapping it up. As well, we set our y velocity to zero each frame we are grounded. Jumping is now only permitted when our controller is grounded. Replace the line modifying velocity.x with the following if statement. We can handle this by checking to see if moveInput has a non-zero value. This is fine, but we might want to have the deceleration rate different than our walkAcceleration. Note that when no keys are being pressed, moveInput will be zero, causing our controller to slow to a stop. Mathf.MoveTowards is being used to move our current x velocity value to its target, our controller's speed (in the direction of our sampled input). x, speed * moveInput, walkAcceleration * Time. Add the following at the top of the Update method. Let's change that by adding some horizontal velocity when the left or right keys are pressed. Our velocity isn't being modified yet, so our controller won't move. This will translate the controller by velocity every frame, multiplied by deltaTime to ensure our game is framerate independent transform. This is a lot to ask from a capsule-shaped object that is designed to react to the world in the way a real-world capsule would.īy instead directly modifying the position of our controller, we are able to very finely tune exactly how it interacts with the world, which is essential to crafting a game that feels and plays fluidly.Īdd the following line of code in the Update method. Characters often need to be able to run, slide, crouch, climb-all possibly with different acceleration and friction values dependant on their current state, or the surface they are interacting with. However, something like a capsule rigidbody would be poor at representing an object capable of very complex actions, like a character controller. Using constraints and joints, they can be used to model more complex objects, like a multi-limb robot. Box rigidbodies will excel at representing a wooden crate, cylinder rigidbodies as a an oil drum, and so on. Rigidbodies behave very similarly to the real world objects they represent. So why not use them for character controllers? Both of these extensively support rigidbodies. R2d.velocity = new Vector2((moveDirection) * maxSpeed, ) ĭebug.DrawLine(groundCheckPos, groundCheckPos - new Vector3(0, colliderRadius, 0), isGrounded ? een : Color.red) ĭebug.DrawLine(groundCheckPos, groundCheckPos - new Vector3(colliderRadius, 0, 0), isGrounded ? een : Color.Unity comes packaged with two physics engines: PhysX for 3D, and Box2D for 2D. T.localScale = new Vector3(Mathf.Abs(t.localScale.x), t.localScale.y, ) įor (int i = 0 i < colliders.Length i++) MoveDirection = Input.GetKey(Ke圜ode.A) ? -1 : 1 If ((Input.GetKey(Ke圜ode.A) || Input.GetKey(Ke圜ode.D)) & (isGrounded || Mathf.Abs() > 0.01f)) It has no meaning the purpose of transform.forward (as well as. R2d.collisionDetectionMode = CollisionDetectionMode2D.Continuous ĬameraPos = Public class CharacterController2D : MonoBehaviour Create a new script, name it "CharacterController2D" and paste the code below inside it:ĬharacterController2D.cs using System.Collections.Assign your sprite to "player_sprite" and move it inside the "Player" Object.Create another GameObject, call it "player_sprite" and add the Sprite Renderer component to it.Create a new GameObject and call it "Player".Open Scene with your 2D level (make sure the level sprites have 2D colliders attached, so the player won't fall through).The controller will be physics-based and will use a Rigidbody2D component. To make a 2D Platformer Character Controller in Unity, follow the steps below. 2D Platformer is a type of game where the player jumps between platforms, avoids obstacles, and fights enemies, all of which is observed from a 2D side-view perspective.
0 Comments
Leave a Reply. |