Last Updated: November 21, 2025
Project Setup
New Project > 2D Template
Create 2D project with correct settings
Edit > Project Settings > Graphics
Configure rendering settings
Window > Rendering > Lighting
Access lighting window
Edit > Project Settings > Physics 2D
Configure 2D physics settings
GameObject Basics
GameObject.Find("ObjectName")
Find GameObject by name
GameObject.FindWithTag("Player")
Find GameObject by tag
Instantiate(prefab, position, rotation)
Create GameObject instance
Destroy(gameObject)
Destroy GameObject
Destroy(gameObject, 2f)
Destroy after 2 seconds
gameObject.SetActive(false)
Deactivate GameObject
DontDestroyOnLoad(gameObject)
Persist between scenes
Transform & Position
transform.position
World position (Vector3)
transform.localPosition
Position relative to parent
transform.position = new Vector3(0, 0, 0)
Set position
transform.Translate(Vector3.right * speed * Time.deltaTime)
Move GameObject
transform.rotation
Rotation (Quaternion)
transform.Rotate(0, 0, 90)
Rotate 90 degrees on Z axis
transform.localScale
Scale (Vector3)
Vector3.Distance(pos1, pos2)
Distance between positions
Sprites
SpriteRenderer
Component to render sprites
GetComponent<SpriteRenderer>()
Get SpriteRenderer component
spriteRenderer.sprite = newSprite
Change sprite
spriteRenderer.color = Color.red
Tint sprite color
spriteRenderer.flipX = true
Flip sprite horizontally
spriteRenderer.sortingLayerName = "Foreground"
Set sorting layer
spriteRenderer.sortingOrder = 10
Set order in layer
Sprite Editor (Texture Import Settings)
Slice sprite sheets
Rigidbody2D (Physics)
Rigidbody2D rb
2D physics component
rb.velocity = new Vector2(x, y)
Set velocity directly
rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse)
Apply force (jump)
rb.gravityScale = 1f
Gravity multiplier
rb.bodyType = RigidbodyType2D.Kinematic
Set to kinematic (no physics)
rb.constraints = RigidbodyConstraints2D.FreezeRotation
Lock rotation
rb.mass = 2f
Set object mass
rb.drag = 0.5f
Air resistance
Colliders 2D
BoxCollider2D
Rectangle collision box
CircleCollider2D
Circle collision
PolygonCollider2D
Custom shape collision
EdgeCollider2D
Line/edge collision
collider.isTrigger = true
Make collider a trigger
OnCollisionEnter2D(Collision2D collision)
Called when collision starts
OnTriggerEnter2D(Collider2D other)
Called when entering trigger
collision.gameObject.tag
Get tag of collided object
Input
Input.GetKey(KeyCode.Space)
Check if key is held down
Input.GetKeyDown(KeyCode.Space)
Check if key was just pressed
Input.GetKeyUp(KeyCode.Space)
Check if key was just released
Input.GetAxis("Horizontal")
Get horizontal input (-1 to 1)
Input.GetAxisRaw("Vertical")
Get vertical input (no smoothing)
Input.GetMouseButton(0)
Left mouse button (0=left, 1=right)
Input.mousePosition
Mouse position on screen
Camera.main.ScreenToWorldPoint(Input.mousePosition)
Convert mouse to world position
Animation
Animator
Component for animations
animator.SetBool("isRunning", true)
Set bool parameter
animator.SetFloat("speed", 5f)
Set float parameter
animator.SetTrigger("jump")
Trigger animation once
Window > Animation
Open Animation window
Window > Animator
Open Animator controller
MonoBehaviour Lifecycle
Awake()
Called when script instance loaded
Start()
Called before first frame update
Update()
Called every frame
FixedUpdate()
Called at fixed intervals (physics)
LateUpdate()
Called after all Updates
OnEnable()
Called when object enabled
OnDisable()
Called when object disabled
OnDestroy()
Called when object destroyed
Time
Time.deltaTime
Time since last frame (framerate independent)
Time.fixedDeltaTime
Fixed update interval
Time.time
Time since game started
Time.timeScale = 0.5f
Slow motion (0 = paused)
Audio
AudioSource
Component to play audio
audioSource.Play()
Play audio clip
audioSource.PlayOneShot(clip)
Play clip once (overlap allowed)
audioSource.Stop()
Stop playing audio
audioSource.volume = 0.5f
Set volume (0-1)
audioSource.loop = true
Loop audio
Camera
Camera.main
Get main camera
camera.orthographicSize = 5f
Set camera zoom (2D)
transform.position = target.position + offset
Follow player (camera script)
Vector3.Lerp(start, end, t)
Smooth camera movement
UI
using UnityEngine.UI;
Import UI namespace
Text textComponent
UI Text component
textComponent.text = "Score: " + score
Update UI text
Image imageComponent
UI Image component
Button buttonComponent
UI Button component
Canvas
Container for UI elements
Scene Management
using UnityEngine.SceneManagement;
Import scene management
SceneManager.LoadScene("MainMenu")
Load scene by name
SceneManager.LoadScene(0)
Load scene by index
SceneManager.GetActiveScene().name
Get current scene name
Coroutines
StartCoroutine(MyCoroutine())
Start coroutine
IEnumerator MyCoroutine()
Coroutine method signature
yield return new WaitForSeconds(2f)
Wait 2 seconds
yield return null
Wait one frame
StopCoroutine(coroutine)
Stop running coroutine
💡 Pro Tip:
Use Time.deltaTime for smooth movement. Put physics code in FixedUpdate(). Use layers and sorting layers to control sprite rendering order!