CHƯƠNG 3: CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG
3.2.2.1. UI Thời gian, điểm số, thất bại, chiến thắng
- Trong unity ta sé tao UI chita 2 gameobject kiéu Text la Score và Time , kiểu 2 gameobject Image la anh That Bai va Chién Thang
M4 Coin :
Time :
Hình 3.9. Tạo Ui thời gian và điểm số
Kiến trúc phần mềm 17|Page
- Tiép theo trong phan Script ta co 3 file la uiModel, uiView va colliderController
© uiModel (Model):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class uiModel : MonoBehaviour
{
public int score;
public float timeRemaining;
public uiModel (float initial Time)
{
timeRemaining = initialTime;
}
public void UpdateTime(float deltaTime)
{
timeRemaining -= deltaTime;
}
public void AddScore(int points)
{
score += points;
- Lớp này chứa đữ liệu và logic liên quan đến giao diện người dùng, trong trường hợp nảy là điểm số (score) và thời gian còn lại (timeRemaining).
- Phuong thirc UpdateTime cap nhật thời ứ1an cũn lại dựa trờn delta time.
-_ Phương thức AddScore thêm điểm số mới vào điểm số hiện tại.
© uiView (View):
Kiến trúc phần mềm 18|Page
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.U],
public class u1View : MonoBehaviour
{
public Text scoreText;
public Text timeText;
public Image gameOverlmage;
public Image gameWinImage;
public void UpdateScore(int newScore)
{
scoreText.text = "Coin : " + newScore.ToString() + "/ 100";
public void UpdateTime(float time)
{
timeText.text = "Time : "+ Mathf.Round(time). ToString();
public void ShowGameOver(bool isGameOver)
{
gameOverlmage.gameObject.SetActive(isGameOver);
public void ShowGameWin(bool isGameWin)
{
game Winlmage.gameObject.SetActive(isGame Win);
Kiến trúc phần mềm 19|Page
-- Lớp này điều khiến hiển thị của giao diện người dùng, bao gồm điểm số, thời gian, hình ảnh kết thúc game (Game Over hoặc Game Win).
- Phương thức UpdateScore cập nhật hiển thị điểm số trên giao diện người dùng.
- Phương thức UpdateTime cập nhật hiển thị thời gian con lại trên giao diện người dùng.
- Phương thức ShowGameOver và ShowGameWIn điều khiến việc hiển thị hình ảnh kết thúc game trên giao diện người dùng.
-_ Ta sẽ kéo 4 gameobject vừa tạo ở trong Unity vào 4 biến tương đương trong code đề hiển thị ra ngoài màn hình
® colliderController (Controller):
// Thoi Gian Va Diem private uiModel uimodel;
private ul View uiview;
void Start()
{
Time.timeScale = |;
// Thoi Gian Va Diem uimodel = new uiModel(100);
uiview = GetComponent<ui View>();
}
void Update() t
// Thoi Gian
uimodel. Update Time(Time.deltaTime);
ulview. UpdateTime(uimodel.timeRemaining);
if (uimodel.timeRemaining <= 0)
{
uimodel.timeRemaining = 0;
Kiến trúc phần mềm 20|Page
Time.timeScale = 0;
ulview.ShowGameOver(true);
audioManager. PlayS fx(audioManager.gameOvers):;
audioManager.StopBerMusic();
}
- Được sử dụng để cập nhật và hiển thị thông tin liên quan đến điểm số và thời gian con lai, đồng thời điều khiến việc hiển thị các hình ảnh kết thúc game khi can
thiét.
3.2.2.2, Thanh mau
- Trong Unity ta tao 1 game object cha lam nén trong do co | gameobject con để thể hiện máu còn lai . Sau d6 add slider cho gameobject cha trong inspector cua sliđer có thuộc tính FillRect set giá trị cho cho thanh slider, dé set giá trị ta kéo ứameobject con vảo trong thuộc tớnh đú lỳc nảy ta cú thể tựy chỉnh giỏ trị của thanh slider do.
Hinh 4.0. Thiét dat slider cho thanh mdu
- Phan Script ta co 3 file la heartView va colliderController , khéng can heartModel vì Trong trường hợp này, dữ liệu liên quan đến sức khỏe (health) chỉ đơn giản là một biến integer (ví dụ: currentHealth), không cần một lớp Model riêng biệt để lưu trữ.
- Logic liên quan đến thanh máu đơn giản: Các phương thức xử lý sức khỏe nhu TakeDamage va SetHealth được triển khai trực tiếp trong lớp colliderController, do đó không cần một lớp Model riêng biệt để chứa logic này.
Kiến trúc phần mềm 21|Page
- Dit liệu và lopIc được xử lý tại chỗ: Việc xử lý đữ liệu và logic lién quan đến sức khỏe được thực hiện tại chỗ trong lớp colliderController, không cần phải tách ra một lớp Model riêng biệt.
-_ Trong mô hình MVC, lớp Model thường được sử dụng để chứa dữ liệu phức tạp hoặc logic phức tạp liên quan đến dữ liệu. Trong trường hợp này, vì đữ liệu và logic don giản, và cả hai đều được xử lý tại chỗ trong lớp Controller (colliderController), không có cần thiết phải có một lớp Model riêng biệt.
® heartView (View):
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.U],
public class heart View : MonoBehaviour
{
public Slider healthSlider;
public Image gameOverlmage;
public Animator anim;
void Start()
{
anim = GetComponent<Animator>();
}
public void SetHealth(int health)
{
healthSlider. value = health;
public void SetMaxHealth(int health)
{
healthSlider.max Value = health;
Kiến trúc phần mềm 22|Page
healthSlider. value = health;
}
public void ShowGameOvers(bool isGameOver)
{
gameOverlmage.gameObject.SetActive(isGameOver);
public void UpdataAnimationHurt(bool hurt)
{
anim.SetBool("dau", hurt);
}
-- Lớp này là một phần của View trong mô hình MVC, chịu trách nhiệm hiển thị và tương tác với người chơi hoặc môi trường liên quan đến thanh máu (health) của nhân vật.
- heartView sử dụng các thành phần như healthSlider để hiến thị thanh máu dưới dạng một thanh truot (Slider), gameOverlmage đề hiển thị hình ảnh khi trò chơi kết thúc, và anim đề điều khién animation liên quan đến sức khỏe.
- Phuong thirc SetHealth được sử dụng dé cập nhật giá trị sức khỏe trên thanh trượt.
- Phương thức SetMaxHealth được sử dụng để cập nhật giá trị tối đa của sức
khỏe và hiển thị nó trên thanh trượt.
- Phương thức ShowGameOvers được sử dụng để hiển thị hình ảnh khi trò chơi kết thúc.
- Phương thức UpdataAnimationHurt có thể là một phương thức phụ trợ để
điều khiến animation khi nhân vật bị tốn thương.
® colliderController(Controller) : using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class colliderController : MonoBehaviour
Kiến trúc phần mềm 23|Page
// Mau
public heart View heartview;
private int currentHealth;
private int totalHealth = 3;
// Start is called before the first frame update void Start()
{
Time.timeScale = |;
// Mau
currentHealth = totalHealth;
heartview.SetMaxHealth(totalHealth);
// Mau
void TakeDamage(int damage)
{
currentHealth -= damage;
heartview.SetHealth(currentHealth);
if (currentHealth <= 0)
{
Time.timeScale = 0;
heartview.ShowGameOvers(true);
audioManager. PlayS fx(audioManager.gameOver);
audioManager.StopBerMusic();
Kiến trúc phần mềm 24|Page
public void OnTriggerExit2D(Collider2D other)
{
if (other.gameObject.tag == "enemy")
{
anim.SetBool("dau", false);
}
- Trong colliderController, heartView duoc su dung đề hiển thị sức khỏe của nhân vật và các tương tác liên quan đến sức khỏe như khi nhân vật bi tôn thương hoặc khi trò chơi kết thúc do hết sức khỏe.