Hướng dẫn clone game FlappyBird
Mô tả các thành phần trong game: ...

Bước 1: Download resource
Trong thư mục Asset lần lượt tạo các thư mục: right click vào Asset --> create --> chọn Folder
- Resources: lưu tài nguyên hình ảnh
- Scripts: lưu mã nguồn
- Animations: lưu các sprite động
- Scenes:
- Prefabs:

Bước 2: Tạo sprite
Kéo tệp tin *.psd vào thư mục Resources --> click chọn hình
Ở mục Inspector:
 - TextureType: chọn Sprite(2D and UI)
 - Sprite Mode: chọn Multiple
--> sau đó chọn Sprite Editor -->
 - Bấm vào mục Slice --> chỉnh sửa lại các sprite cho như ý sao đó nhớ chọn Apply trên cửa sổ Sprite Editor. Như vậy đã tạo ra được các sprite

Bước 3: Tạo hình nền BackGround - Viết Script di chuyển BG
- Tạo GameObject: background gồm 2 thành phần sky (set layer = 0) và đất (set layer = 2). Số layer lớn ở ngoài cùng.
- Tạo Prefabs: cho background --> Các đối tượng tạo ra từ Prefabs thì chỉ cần thay đổi một thuộc tính nào đó trong Prefabs thì tất cả các đối tượng khác cũng thay đổi theo.

  + Thêm tốc độ di chuyển backgroud (lưu ý đặt biến public float SPEED), chỉnh từ giao diện trên prefabs background.
- Viết Scripte cho background: để bg di chuyển
void Update () {
transform.Translate(Vector3.left * SPEED * Time.deltaTime);
}

Bước 4: Tạo BGLooper - để các bg khác đụng vào BGLooper thì sẽ quay lại phía sau
- add Component Box Collider 2D cho.
- add Component Rigidbody 2D, lưu ý: để thuộc tính: Gravity Scale = 0; --> ko có trọng lượng
- Thêm mã nguồn đụng cái BGLooper thì sẽ quay lại
void OnTriggerEnter2D(Collider2D collider) {
if (collider.name == "BGLooper") {
Vector3 pos = this.transform.position;
float widthOfBGObject =  ((BoxCollider2D) collider).size.x;
pos.x += widthOfBGObject * numBG;
this.transform.position = pos;
}
}

Bước 5: Tạo các ống nước
- Tạo GameObject Pipe
- Add 2 cái Box Collider 2D cho ống phía trên và ống phía dưới, set vùng va chạm
- Add component Rigidbody 2D, lưu ý: để thuộc tính: Gravity Scale = 0; --> ko có trọng lượng
- Add script: Pipe
- Tạo Prefads: cho ống nước --> Mục đích: ....
- Viết mã nguồn để ống nước di chuyển
        void Update () {
transform.Translate(Vector3.left * SPEED * Time.deltaTime);
}
- Code ống nước di chuyển gặp BGLooper thì set lại vị trí phía sau:
void OnTriggerEnter2D(Collider2D collider) {
if (collider.name == "BGLooper") {
Vector3 pos = this.transform.position;
pos.x += distancePipe * numBG;
pos.y = Random.Range(MinY, MaxY);
transform.position = pos;
}
}

Bước 6: Tạo animation cho chú chim
- Chọn 3 sprite chim sau đó kéo thả vào vùng Hierachy. Tạo đối tượng GameObject Bird, kéo clony_bird_sprite_12 thả vào Bird. --> chúng ta có gameobject Bird.
- Viết mã nguồn cho chú chim chuyển động
public float jumpVelocity = 3.0f;
float g = -9.8f;

void Update () {
//x = x0 + v0 * t + a * t * t /2
transform.position += Vector3.up * (jumpVelocity * Time.deltaTime + g * Time.deltaTime * Time.deltaTime / 2);
//vt = v0 + a * t
jumpVelocity += g * Time.deltaTime;

if (Input.GetMouseButtonDown(0)) {
jumpVelocity = 2.5f;
}
}
- Xét va chạm giữa chú chim và ống nước:
 + Đặt tag cho các ống nước là: Pipe  --> để sau này dễ tìm các đối tượng là loại ống nước
void OnTriggerEnter2D(Collider2D collider) {
if ( collider.gameObject.tag == "Pipe")
{
jumpVelocity = 0;
}
}

---Hướng dẫn cách debug trên Unity.