Giới thiệu UI trong lập trình game với Unity3D

Lập trình game Flappy bird với unity3D

0.0 (0 đánh giá)
Tạo bởi HowKteam Cập nhật lần cuối 04:33 24-10-2016 5.279 lượt xem 7 bình luận
Học nhanh

Danh sách bài học

Giới thiệu UI trong lập trình game với Unity3D

Không có gì tuyệt vời hơn là luyện tập với ví dụ thực tế. Nào cùng nhau thử thách bản thân với trò chơi nổi tiếng: Flappy bird.

Bạn nên có kiến thức về:

  • Lập trình C# cơ bản
  • Class
  • OOP trong C#

Code BackGroundMove.cs

using UnityEngine;
using System.Collections;

public class BirController : MonoBehaviour {

    public float flyPower = 100;

    public AudioClip flyClip;
    public AudioClip gameOverClip;

    private AudioSource audioSource;

    GameObject obj;
    GameObject gameController;
	// Use this for initialization
	void Start () {
        obj = gameObject;
        audioSource = obj.GetComponent<AudioSource>();
        audioSource.clip = flyClip;

        if (gameController == null)
        {
            gameController = GameObject.FindGameObjectWithTag("GameController");
        }
	}
	
	// Update is called once per frame
	void Update () {
	    if (Input.GetMouseButton(0))
        {
            audioSource.Play();
            obj.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, flyPower));
        }
	}

    void OnCollisionEnter2D(Collision2D other)
    {
        EndGame();
    }    

    void EndGame()
    {
        audioSource.clip = gameOverClip;
        audioSource.Play();
        gameController.GetComponent<GameController>().EndGame();
    }
}

Code BirdController.cs

using UnityEngine;
using System.Collections;

public class BirController : MonoBehaviour {

    public float flyPower = 100;

    public AudioClip flyClip;
    public AudioClip gameOverClip;

    private AudioSource audioSource;

    GameObject obj;
    GameObject gameController;
	// Use this for initialization
	void Start () {
        obj = gameObject;
        audioSource = obj.GetComponent<AudioSource>();
        audioSource.clip = flyClip;

        if (gameController == null)
        {
            gameController = GameObject.FindGameObjectWithTag("GameController");
        }
	}
	
	// Update is called once per frame
	void Update () {
	    if (Input.GetMouseButton(0))
        {
            audioSource.Play();
            obj.GetComponent<Rigidbody2D>().AddForce(new Vector2(0, flyPower));
        }
	}

    void OnCollisionEnter2D(Collision2D other)
    {
        EndGame();
    }    

    void EndGame()
    {
        audioSource.clip = gameOverClip;
        audioSource.Play();
        gameController.GetComponent<GameController>().EndGame();
    }
}

Code WallMove.cs

using UnityEngine;
using System.Collections;

public class WallMove : MonoBehaviour {

    public float moveSpeed;
    public float minY;
    public float maxY;

    public float oldPosition;
    private GameObject obj;
    // Use this for initialization
    void Start()
    {
        obj = gameObject;
        oldPosition = 10;
        moveSpeed = 5;
        minY = -1;
        maxY = 1;
    }

    // Update is called once per frame
    void Update()
    {
        obj.transform.Translate(new Vector3(-1 * Time.deltaTime * moveSpeed, 0, 0));        
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.tag.Equals("ResetWall"))
            obj.transform.position = new Vector3(oldPosition, Random.Range(minY, maxY + 1), 0);
    }
}

Code GameController.cs

using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using System.Reflection.Emit;

public class GameController : MonoBehaviour {

    public bool isEndGame;
    bool isStartFirstTime = true;
    int gamePoint = 0;
    public Text txtPoint;
    public GameObject pnlEndGame;
    public Text txtEndPoint;
    public Button btnRestart;

    public Sprite btnIdle;
    public Sprite btnHover;
    public Sprite btnClick;

    // Use this for initialization
    void Start () {
        Time.timeScale = 0;
        isEndGame = false;
        isStartFirstTime = true;
        pnlEndGame.SetActive(false);
    }
	
	// Update is called once per frame
	void Update () {
        if (isEndGame)
        {
            if (Input.GetMouseButtonDown(0) && isStartFirstTime)
            {
                StartGame();
            }
        }       
        else
        {
            if (Input.GetMouseButtonDown(0))
            {
                Time.timeScale = 1;
            }
        } 
	}

    public void RestartButtonClick()
    {
        btnRestart.GetComponent<Image>().sprite = btnClick;
    }

    public void RestartButtonHover()
    {
        btnRestart.GetComponent<Image>().sprite = btnHover;
    }

    public void RestartButtonIdle()
    {
        btnRestart.GetComponent<Image>().sprite = btnIdle;
    }

    public void GetPoint()
    {
        gamePoint++;
        txtPoint.text = "Point: " + gamePoint.ToString();
    }

    void StartGame()
    {
        SceneManager.LoadScene(0);
    }

    public void Restart()
    {
        StartGame();
    }

    public void EndGame()
    {
        isEndGame = true;
        isStartFirstTime = false; ;
        Time.timeScale = 0;
        pnlEndGame.SetActive(true);
        txtEndPoint.text = "Your point\n" + gamePoint.ToString();
    }
}

 

File game Demo

File Assets

Bài sau chúng ta sẽ cùng nhau tìm hiểu về Animation động cho game.

Đừng quên: “Luyện tập – Thử thách – Không ngại khó


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nội dung bài viết

Tác giả

Khóa học

Lập trình game Flappy bird với unity3D

Lập trình game Flappy bird với unity3D

Đánh giá

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
duyhouse đã bình luận 11:03 19-09-2017

Ai chỉ mình viết hàm cho nó có BestScore được KO? Mình ko biết viết cho nó. Theo LT mình thì (nếu myscore > bestscore thì set myscore vào) nhưng mình ko biết viết

dhuuloc8818 đã bình luận 22:26 01-07-2017

ad ơi! em ko làm dc vụ nhấn vô btnRestart, em có viết code && isStartFirstTime với gắn function cho btn rồi. em xài visual studio 2017 unity 561f1. ad chỉ em cách fix vs

dhuuloc8818 đã bình luận 22:26 01-07-2017

ad ơi! em ko làm dc vụ nhấn vô btnRestart, em có viết code && isStartFirstTime với gắn function cho btn rồi. em xài visual studio 2017 unity 561f1. ad chỉ em cách fix vs

namha3630 đã bình luận 00:08 06-01-2017
Mình muốn thêm một UI text là High Score và dùng hàm so sánh biến highScore với endPoint để có dc high score và đã có được high score = end Point ở cuối game nhưng mỗi khi restart game thì biến highScore cũng bị restart về 0 dẫn đến việc mỗi lần load lại game thì high score cũng chỉ = end point chứ ko có được high score thật sự. Cho mình hỏi làm sao để lưu lại biến highScore mỗi khi load lại game?
Thuan đã bình luận 16:46 15-12-2016
Cảm ơn.
Không có video.