This script would move the player:
Up arrow - move forward
Down arrow - move backward
Left arrow key - left
Right arrow key - right
Space bar- jump
xxxxxxxxxx
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float moveSpeed = 5f;
public float jumpForce = 10f;
private Rigidbody rb;
private bool isGrounded;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
// Check if the player is on the ground
isGrounded = Physics.Raycast(transform.position, Vector3.down, 0.5f);
// Jump if the player presses the space bar and is on the ground
if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
{
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);
}
// Move the player forward or backward based on input
float verticalInput = Input.GetAxis("Vertical");
Vector3 movement = new Vector3(0, 0, verticalInput);
movement = movement.normalized * moveSpeed * Time.deltaTime;
rb.MovePosition(transform.position + transform.TransformDirection(movement));
// Rotate the player based on horizontal input
float horizontalInput = Input.GetAxis("Horizontal");
transform.Rotate(0, horizontalInput * 5f, 0);
}
}
xxxxxxxxxx
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BehaviourName : MonoBehaviour {
[Header("Controls")]
public float PlayerSpeed = 10;
public string hAxis = "Horizontal";
public string vAxis = "Vertical";
private Rigidbody2D rb;
private void Start() {
// Get the Rigidbody2D component attached to the GameObject
rb = GetComponent<Rigidbody2D>();
}
void Update() {
// Get the input from the horizontal and vertical axes
float horizontalInput = Input.GetAxis(hAxis);
float verticalInput = Input.GetAxis(vAxis);
// Calculate the movement vector based on the input and player speed
Vector2 movement = new Vector2(horizontalInput, verticalInput) * PlayerSpeed * Time.deltaTime;
// Move the player using the Rigidbody2D component
rb.MovePosition(rb.position + movement);
}
}
xxxxxxxxxx
public float speed = 5;
void Update() {
float x = Input.GetAxisRaw("Horizontal");
float y = Input.GetAxisRaw("Vertical");
gameObject.transform.Translate(new Vector3(x,y,0) * speed * Time.deltaTime);
}
xxxxxxxxxx
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour {
[Header("Horizontal Movement")]
public float moveSpeed = 10f;
public Vector2 direction;
private bool facingRight = true;
[Header("Vertical Movement")]
public float jumpSpeed = 15f;
public float jumpDelay = 0.25f;
private float jumpTimer;
[Header("Components")]
public Rigidbody2D rb;
public Animator animator;
public LayerMask groundLayer;
public GameObject characterHolder;
[Header("Physics")]
public float maxSpeed = 7f;
public float linearDrag = 4f;
public float gravity = 1f;
public float fallMultiplier = 5f;
[Header("Collision")]
public bool onGround = false;
public float groundLength = 0.6f;
public Vector3 colliderOffset;
// Update is called once per frame
void Update() {
bool wasOnGround = onGround;
onGround = Physics2D.Raycast(transform.position + colliderOffset, Vector2.down, groundLength, groundLayer) || Physics2D.Raycast(transform.position - colliderOffset, Vector2.down, groundLength, groundLayer);
if(!wasOnGround && onGround){
StartCoroutine(JumpSqueeze(1.25f, 0.8f, 0.05f));
}
if(Input.GetButtonDown("Jump")){
jumpTimer = Time.time + jumpDelay;
}
animator.SetBool("onGround", onGround);
direction = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
}
void FixedUpdate() {
moveCharacter(direction.x);
if(jumpTimer > Time.time && onGround){
Jump();
}
modifyPhysics();
}
void moveCharacter(float horizontal) {
rb.AddForce(Vector2.right * horizontal * moveSpeed);
if ((horizontal > 0 && !facingRight) || (horizontal < 0 && facingRight)) {
Flip();
}
if (Mathf.Abs(rb.velocity.x) > maxSpeed) {
rb.velocity = new Vector2(Mathf.Sign(rb.velocity.x) * maxSpeed, rb.velocity.y);
}
animator.SetFloat("horizontal", Mathf.Abs(rb.velocity.x));
animator.SetFloat("vertical",rb.velocity.y);
}
void Jump(){
rb.velocity = new Vector2(rb.velocity.x, 0);
rb.AddForce(Vector2.up * jumpSpeed, ForceMode2D.Impulse);
jumpTimer = 0;
StartCoroutine(JumpSqueeze(0.5f, 1.2f, 0.1f));
}
void modifyPhysics() {
bool changingDirections = (direction.x > 0 && rb.velocity.x < 0) || (direction.x < 0 && rb.velocity.x > 0);
if(onGround){
if (Mathf.Abs(direction.x) < 0.4f || changingDirections) {
rb.drag = linearDrag;
} else {
rb.drag = 0f;
}
rb.gravityScale = 0;
}else{
rb.gravityScale = gravity;
rb.drag = linearDrag * 0.15f;
if(rb.velocity.y < 0){
rb.gravityScale = gravity * fallMultiplier;
}else if(rb.velocity.y > 0 && !Input.GetButton("Jump")){
rb.gravityScale = gravity * (fallMultiplier / 2);
}
}
}
void Flip() {
facingRight = !facingRight;
transform.rotation = Quaternion.Euler(0, facingRight ? 0 : 180, 0);
}
IEnumerator JumpSqueeze(float xSqueeze, float ySqueeze, float seconds) {
Vector3 originalSize = Vector3.one;
Vector3 newSize = new Vector3(xSqueeze, ySqueeze, originalSize.z);
float t = 0f;
while (t <= 1.0) {
t += Time.deltaTime / seconds;
characterHolder.transform.localScale = Vector3.Lerp(originalSize, newSize, t);
yield return null;
}
t = 0f;
while (t <= 1.0) {
t += Time.deltaTime / seconds;
characterHolder.transform.localScale = Vector3.Lerp(newSize, originalSize, t);
yield return null;
}
}
private void OnDrawGizmos() {
Gizmos.color = Color.red;
Gizmos.DrawLine(transform.position + colliderOffset, transform.position + colliderOffset + Vector3.down * groundLength);
Gizmos.DrawLine(transform.position - colliderOffset, transform.position - colliderOffset + Vector3.down * groundLength);
}
}
xxxxxxxxxx
void Update() {
float h = Input.GetAxisRaw(“Horizontal”);
float v = Input.GetAxisRaw(“Vertical”);
gameObject.transform.position = new Vector2 (transform.position.x + (h * speed),
transform.position.y + (v * speed));
Can be used with joystick
xxxxxxxxxx
public class ExampleClass : MonoBehaviour
{
CharacterController characterController;
public float speed = 6.0f;
public float jumpSpeed = 8.0f;
public float gravity = 20.0f;
private Vector3 moveDirection = Vector3.zero;
void Start()
{
characterController = GetComponent<CharacterController>();
}
void Update()
{
if (characterController.isGrounded)
{
// We are grounded, so recalculate
// move direction directly from axes
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0.0f, Input.GetAxis("Vertical"));
moveDirection *= speed;
if (Input.GetButton("Jump"))
{
moveDirection.y = jumpSpeed;
}
}
// Apply gravity. Gravity is multiplied by deltaTime twice (once here, and once below
// when the moveDirection is multiplied by deltaTime). This is because gravity should be applied
// as an acceleration (ms^-2)
moveDirection.y -= gravity * Time.deltaTime;
// Move the controller
characterController.Move(moveDirection * Time.deltaTime);
}
}
xxxxxxxxxx
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
Rigidbody rb;
[SerializeField] float movementSpeed = 6f;
[SerializeField] float jumpForce = 5f;
// Start is called before the first frame update
void Start()
{
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update()
{
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
rb.velocity = new Vector3(horizontalInput * movementSpeed, rb.velocity.y, verticalInput * movementSpeed);
if (Input.GetButtonDown("Jump"))
{
rb.velocity = new Vector3(rb.velocity.x, jumpForce, rb.velocity.z);
}
}
}