10/21/2013

Project RPG Bài 1. Hướng dẫn làm thanh máu (HP)




Bài này sẽ giúp các bạn có thể bắt đầu làm một game nhập vai (RPG) với thành phần cơ bản không thể thiếu đó là thanh máu (Hay còn gọi là HP - Health Point) bằng cách sử dụng GUI trong C#.


B1. Khởi động Unity và vào File | New Project và điều chỉnh như sau:


B2. Vào Game Object | Creat Other | Cube như hình sau để tạo một khối hộp.


B3. Tại thẻ Inspector, bấm vào hình bánh răng và chọn Reset để trả các giá trị tọa độ hay độ căng lại vị trí ban đầu.

 

B4. Nhập giá trị cho Scale thành X = 100, Y = 1 và Z = 100 như hình sau:

 

B5.  Tại thẻ Project, truy cập vào thư mục Assets | Standard Assets | Character Controllers và kéo thả First Person Controller.prefab vào khung nhìn Scene.

Click vào hình để xem chi tiết

B6. Nhấp chọn vào prefab vừa đưa vào khung nhìn Scene và điều chỉnh giá trị tọa độ tại thẻ Inspector như sau:


B7. Nhấp chuột phải vào thư mục Assets trong thẻ Project và chọn Create | Folder và đặt tên là Script.


B8. Nhấp chuột phải vào thư mục Script và chọn Creat | C# Script và đặt tên là PlayerHealth.


B9. Double click vào file C# PlayerHealth vừa tạo và gõ đoạn code sau vào:

using UnityEngine;
using System.Collections;

public class PlayerHealth : MonoBehaviour {

public int maxHealth = 100;
public int curHealth = 100;

public float healthBarLength;

// Use this for initialization
void Start () {
healthBarLength = Screen.width / 2;
}

// Update is called once per frame
void Update () {
AddjustCurrentHealth(0);
}

void OnGUI(){
GUI.Box(new Rect(10,10, healthBarLength, 20), curHealth + "/" + maxHealth);
}

public void AddjustCurrentHealth(int adj) {
curHealth += adj;

if(curHealth < 0)
curHealth = 0;

if(curHealth > maxHealth)
curHealth = maxHealth;

if(maxHealth < 1)
maxHealth = 1;

healthBarLength = (Screen.width / 2) * (curHealth / (float)maxHealth);
}
}


B10. Trở lại làm việc với Unity Editor, tại thẻ Hierarchy đổi tên First Person Controller thành Player.


B11. Kéo thả file C# Player Health vào Player như hình sau:

Click vào hình để xem chi tiết

B12. Nhấp chọn Main Camera trong thẻ Hierarchy và ấn Delete để xóa đối tượng này.

B13. Nhấp chuột phải vào Cube trong thẻ Hierarchy và chọn Rename rồi đổi tên thành Plane. Sau đó ấn Play để kiểm tra thành quả.




B14. Tiếp tục thực hiện thanh máu cho Enemy. Vào Game Object | Creat Other | Cube và điều chỉnh các giá trị tại thẻ Inspector như sau:

 
B15. Nhấp chuột phải vào thư mục Script trong thẻ Project và chọn Creat | C# Script và đặt tên là EnemyHealth.


B16. Double click vào file C# EnemyHealth vừa tạo và nhập đoạn code sau vào:

using UnityEngine;
using System.Collections;

public class EnemyHealth : MonoBehaviour {
public int maxHealth = 100;
public int curHealth = 100;
public float healthBarLength;
// Use this for initialization
void Start () {
healthBarLength = Screen.width / 2;
}
// Update is called once per frame
void Update () {
AddjustCurrentHealth(0);
}
void OnGUI(){
GUI.Box(new Rect(10, 40, healthBarLength, 20), curHealth + "/" + maxHealth);
}
public void AddjustCurrentHealth(int adj) {
curHealth += adj;
if(curHealth < 0)
curHealth = 0;
if(curHealth > maxHealth)
curHealth = maxHealth;
if(maxHealth < 1)
maxHealth = 1;
healthBarLength = (Screen.width / 2) * (curHealth / (float)maxHealth);
}
}


B17. Kéo thả file C# EnemyHealth vào Evil Cube như hình sau:


B18. Vào GameObject | Creat Other | Directional Light và điều chỉnh thông số tại thẻ Inspector như sau:


B19. Cuối cùng, ấn nút Play để kiểm tra thành quả.




20 comments:

  1. This comment has been removed by the author.

    ReplyDelete
  2. Em chào anh, em mới tìm hiểu veefUnity ạ,em có mấy thắc mắc sau khi đọc bài ạ:
    1.Tại sai cần đối tượng Player trong khi chỉ cần 2 Cube để vẽ 2 thanh HP
    2. Hàm OnGUI() được thực thi khi nào ạ, bì em không thấy gọi nó trong update.
    Em cảm ơn anh. :)

    ReplyDelete
    Replies
    1. 1. Ở các bài viết sau mình sẽ phải sử dụng tính năng di chuyển của player để làm chức năng tấn công nên nếu tạo cube ko thì ko nhúc nhích được gì bạn nhé :D

      2. Các hàm trong OnGUI sẽ được cập nhật mỗi khung hình khi game chạy nên không cần thiết phải đưa vào hàm Update bạn nhé

      Delete
    2. cho e hỏi ở bước 9 khi build code e bị lỗi Framework 'Mono / .NET 3.5' not installed. e phải sửa lỗi này như thế nào ạ ?

      Delete
    3. cài .net mới nhất cho máy tính

      Delete
  3. This comment has been removed by the author.

    ReplyDelete
  4. Chào bạn, cảm ơn bạn vì bài hướng dẫn này. Mình có 1 lỗi nhỏ là khi mình thay đổi giá tri của curHealth = bất kỳ giá trị nào trong file EnemyHealth thì thanh máu trên màn hình vẫn không thay đổi(giữ nguyên giá trị ban đầu). Bạn có thể giúp mình được không @@

    ReplyDelete
    Replies
    1. Bạn ơi, thay đổi giá trị trong code ko làm ảnh hưởng gì tới game nhé. ếu bạn muốn thay đổi giá trị trong game thì phải thay đổi ở thẻ Inspector

      Delete
  5. ad ơi? thế mấy cái grass vs cây cối! nhân vật thì lấy ở đâu và làm thế nào ạ?

    ReplyDelete
    Replies
    1. Ở B1, lúc bạn tạo Project, bạn check vào ô Character Controller để import các tài nguyên này vào. Nếu bạn quên, bạn nhấp phải vào thẻ Project và chọn Import Package | Character Controller

      Delete
  6. anh ơi cho em hỏi.em làm đúng các bước như hướng dẫn nhưng đến lúc play thì báo là lỗi trình biên dịch.thế là bị sao ạ.vì lần đầu em làm chạy bình thường.lần 2 làm lại thử cho quen đến lúc chạy thì báo lỗi đó.

    ReplyDelete
    Replies
    1. Có thể là do bị trùng file với PJ cũ đấy bạn, bạn nên tạo lại PJ mới nhé

      Delete
  7. ad oi sao em làm tới bài 6 là bị lỗi code ko à

    ReplyDelete
  8. ad ơi mình kéo thả file C# vào Player nhưng nó bảo file ko tồn tại :( sửa thế nào hả ad :( mình dùng uni4 nhé :v

    ReplyDelete
  9. sao minh hien 2 thanh 100 la dung hay sai

    ReplyDelete
  10. mình dùng unity bản 5. Muốn lấy hình ảnh thì import như thế nào
    Thanks

    ReplyDelete
  11. E thay đổi giá trị trong code thì sẽ thế nào đây ad, e cám ơn ad, mỗi lần build chỉ đc 1 thanh HP thôi ợ, làm nhiều cái cùng lúc thì sao ad?
    ------------------------------------
    Truyền hình số HD - Xem tivi hơn 50 kênh miễn phí thuê bao tháng.
    Chuyên phân phối: Dau thu DVB T2 chính hãng VTV, VTC, LTP...
    Đầu thu nhiều người quan tâm: Dau thu DVB T2 VTC T201

    ReplyDelete
  12. Admin ơi, có thể upload final project ở bài này lên cho ae đc không? Thanks!

    ReplyDelete
  13. cám ơn bạn đã chia sẻ nha
    mời bạn ghé site tải app store vn ủng hộ mình nha

    ReplyDelete