Skip to content
Wonderful Code See
Wonderful Code See

Master the Code, Shape Your Future

  • Home
  • IT Consulting
  • Artificial Intelligence
    • AI Applications
  • CS Fundamentals
    • Data Structure and Algorithm
    • Computer Network
  • System Design
  • Programming
    • Python Stack
    • .NET Stack
    • Mobile App Development
    • Web Development
    • Unity Tutorials
    • IDE and OA
  • Technology Business
    • Website building tutorials
  • Dev News
Wonderful Code See

Master the Code, Shape Your Future

Unity in Practice 0007 – Very First Unity C# Code to Move and Jump a 2D Ball

WCSee, May 8, 2025May 17, 2025

This tutorial walks you through creating a simple Unity project where a 2D ball can move left/right and jump using keyboard input. It’s perfect for beginners who want to learn how to work with physics, input detection, and scripting in Unity.


🔄 What You’ll Build

  • A 2D ball that moves left/right using the A/D or arrow keys.
  • Pressing Space makes the ball jump upward.
  • The movement and jump behavior are handled in a custom C# script.

🎨 Step 1 – Create Your Scene

  1. Create a 2D Sprite for the Ball:
    • In the Unity Hierarchy, right-click → 2D Object → Sprite → Circle, then name it Ball.
    • Add a Rigidbody2D and a CircleCollider2D component to the Ball.
  2. Create 2 Ground:
    • Right-click → 2D Object → Sprite → Square, then name it VGround and HGround.
    • Stretch it wide at the bottom of the scene.
    • Add a BoxCollider2D to make it solid.

refer previous article for detail: Unity in Practice 0004 – Unity Rigidbody – Wonderful Code See


💻 Step 2 – Write the Movement and Jump Script

  1. Create a new C# script: BallScript.cs
  2. Attach it to the Ball GameObject.
  3. Code:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BallScript : MonoBehaviour
{

    public Rigidbody2D rb;

    public float moveSpeed;
    public float jumpForce;

    private float xInput;

    // Start is called before the first frame update
    void Start()
    {
    }

    // Update is called once per frame
    void Update()
    {
        // Get horizontal input
        xInput = Input.GetAxis("Horizontal");

        // Apply horizontal movement
        rb.velocity = new Vector2(xInput * moveSpeed, rb.velocity.y);


        // Jump on Space key press
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.velocity = new Vector2(rb.velocity.x, jumpForce);
        }
    }
}

🛠 Step 3 – Set Up References in the Inspector

  • Drag the Ball GameObject into the rb field.

▶️ Step 4 – Run the Scene

  • Press the Play button.
  • Use the keyboard:
    • Press A/D or ←/→ to move the ball left and right.
    • Press Space to jump when the ball is on the ground.

✅ Summary

You now have a basic but functional 2D movement and jumping system. This is a great starting point for platformers, side-scrolling games, or physics experiments.

🧠 Advance:Line-by-Line Detail Explanation:

xInput = Input.GetAxis("Horizontal");
  • Purpose: Reads the player’s horizontal movement input.
  • How it works:
    • Unity’s built-in "Horizontal" axis maps:
      • A or ← : returns -1
      • D or → : returns +1
      • No key pressed : returns 0
    • It also applies smoothing for gradual acceleration/deceleration.
  • Result: xInput becomes a float value between -1 and 1, indicating the direction and intensity of horizontal input.

rb.velocity = new Vector2(xInput * moveSpeed, rb.velocity.y);
  • Purpose: Moves the ball horizontally.
  • Explanation:
    • rb refers to the Rigidbody2D component attached to the GameObject.
    • rb.velocity sets the object’s current velocity.
    • new Vector2(...) creates a 2D velocity vector.
  • Details:
    • xInput * moveSpeed determines the speed along the X-axis.
      • For example, if xInput = 1 and moveSpeed = 5, the velocity becomes 5 to the right.
    • rb.velocity.y preserves the current Y-axis velocity (such as jumping or gravity).
  • Result: The ball moves left/right based on input, without affecting vertical movement.

if (Input.GetKeyDown(KeyCode.Space))
  • Purpose: Detects if the Space key was just pressed.
  • Difference:
    • GetKeyDown: Returns true only on the frame the key is initially pressed.
    • GetKey: Returns true every frame the key is held down.
    • GetKeyUp: Returns true when the key is released.
  • Use Case: Ideal for triggering a jump only once per press.

rb.velocity = new Vector2(rb.velocity.x, jumpForce);
  • Purpose: Makes the ball jump by applying upward velocity.
  • Explanation:
    • rb.velocity.x keeps the existing horizontal movement.
    • jumpForce (usually a positive number) sets the jump height.
    • This line overrides the Y velocity, making the object jump instantly.
    • Note: This code does not check if the object is on the ground, so it allows infinite jumping in mid-air. To fix this, ground-check logic is needed.
Please follow and like us:
RSS
Facebook
Facebook
fb-share-icon
X (Twitter)
Visit Us
Follow Me
Tweet
Pinterest
Pinterest
fb-share-icon
Post Views: 147

Related posts:

Unity in Practice 0012 – Blend Tree in Unity Unity in Practice 0014 – Unity 2D Dash and Dash Cooldown with Time.deltaTime Unity in Practice 0011 – Player Jump with Ground Check in Unity Unity in Practice 0010 – Flipping a 2D Character Horizontally in Unity Unity in Practice 0009 – How to Use Sprite Sheets in Unity for 2D Animation and UI Unity in Practice 0008 – Encapsulation and Inspector Access with Unity’s [SerializeField] Unity in Practice 0004 – Unity Rigidbody Unity Game Development – Systematic Learning Roadmap (2025 Edition)
Unity Tutorials Game DevelopmentUnity GameUnity Move and Jump

Post navigation

Previous post
Next post

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Free HTTPS Certificate Setup: A Complete Guide for CentOS 7 + Nginx + Let’s Encrypt
  • Understanding Architecture Evolution: Monolith, Microservices, and PBC
  • A Comprehensive Guide to AI Agents: Definition, Role, Examples, and Future Prospects
  • The History of Artificial Intelligence (AI): From Turing to ChatGPT
  • Clone a WordPress with ASP.NET and React Part 2: Create ASP.NET Projects Code Files with AI
  • Clone a WordPress with ASP.NET and React Part 1: Initialize Project Structure with AI
  • Clone a WordPress with ASP.NET Core and React: An AI-Assisted Development Journey
  • Artificial Intelligence (AI) Learning Roadmap for Beginners in 2025
  • Set Up and Customize Website Using WordPress | Building Website Tutorials Part 4
  • How to Export Wide Excel sheet to PDF Without Cutting Columns

Recent Comments

    Categories

    • Artificial Intelligence (6)
      • AI Applications (1)
    • CS Fundamentals (1)
      • Computer Network (1)
    • IT Consulting (24)
    • Programming (20)
      • .NET Stack (3)
      • IDE and OA Tool Tips (1)
      • Python Stack (1)
      • Unity Tutorials (15)
    • System Design (5)
    • Technology Business (7)
      • Website building tutorials (6)

    Archives

    • June 2025 (5)
    • May 2025 (52)
    ©2025 Wonderful Code See | WordPress Theme by SuperbThemes
    Manage Consent
    To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
    Functional Always active
    The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
    Preferences
    The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
    Statistics
    The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
    Marketing
    The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
    Manage options Manage services Manage {vendor_count} vendors Read more about these purposes
    View preferences
    {title} {title} {title}