Thursday, September 19, 2019

[Unity][Game 2D][Bài 1] Hướng dẫn tạo 1 game bắn súng 2D đơn giản với Unity

Tạo game mobile bắn súng 2D bằng phần mềm Unity.



Biên dịch và soạn thảo: TrongTran


Giới thiệu

Trong bài này, mình sẽ hướng dẫn các bạn cách tạo một game bắn súng 2D bằng phần mềm Unity.

Dưới đây là một số kỹ năng mà bạn sẽ học được bao gồm:

  • Tạo các sprites
  • Khởi tạo các đối tượng.
  • Thêm và sử dụng các thành phần vật lý Rigidbody cho các đối tượng 2D.
  • Đặt một lực lên một đối tượng.



II. Tạo đối tượng tàu vũ trụ

Trong phần này, mình sẽ tạo 1 tàu vũ trụ đơn giản. Nó là một sprite mà chúng ta sẽ có thể di chuyển theo bốn hướng bằng các phím mũi tên trên bàn phím: trái, phải, lên và xuống.

Bắt đầu nào.


Đầu tiên bạn khởi chạy phần mềm Unity và tạo dự án mới như bên dưới nhé:





Trong cửa sổ tạo project, bạn có thể đặt tên dự án, vị trí lưu dự án, cũng như chế độ 2D (vì trò chơi này sẽ là 2D).



Sau đó, bạn nhấp vào nút “Create objects” (ở dưới cùng của cửa sổ) và Unity sẽ chuyển sang màn hình làm việc.



 Sau khi chuyển sang màn hình làm việc, bạn có thể kiểm tra xem chế độ 2D có được kích hoạt hay không, dựa trên logo 2D nằm ở góc trên cùng bên phải của “Scene”.

Tiếp theo mình sẽ tạo 1 sprite cho tàu vũ trụ. Trong ví dụ này mình làm đơn giản với 1 hình tam giác. Thường thì bạn sẽ dùng các phần mềm đồ hoạ nhưng trong bài này mình chỉ dùng hình tam giác cho nó nhanh.
Từ cửa sổ “Project”, Mình chọn [ Create | Sprites | Triangle] như trong hình bên dưới:



Với thao tác này, mình đã tạo ra 1 hình tam giác trong cửa số “Project”.

Bạn có thể kéo và thả sprite này (tức là, đối tượng màu trắng có hình tam giác) từ cửa sổ Project sang cửa sổ Scene; điều này sẽ tạo ra một đối tượng mới gọi là Triangle trong cửa sổ hierarchy.

               

Trong hình bên trên, bạn có thể nhận thấy các dòng trắng ở dưới cùng và bên trái màn hình; đây là những ranh giới xác định những gì sẽ hiển thị trên màn hình; vì vậy bằng cách thả đối tượng của bạn trong các dòng này, bạn đảm bảo rằng người chơi sẽ được nhìn thấy (hoặc bị tắt) bởi camera.

Để đổi tên đối tượng từ Triangle thành player, bạn có thể nhấp chuột phải vào nó trong cửa sổ Hierarchy, sau đó chọn rename để đổi tên đối tượng thành “player”.

Hiện tại, chúng ta có một player (tức là hình tam giác mà bạn xem như là tàu vũ trụ) và chúng ta sẽ cần di chuyển nó theo các phím được nhấn trên bàn phím; Để làm được điều này ta cần viết script cho đối tượng player.

 Chúng ta sẽ tiến hành code với ngôn ngữ C # bằng cách chọn [ Create | C # script] từ cửa sổ và đổi tên tập lệnh này thành MovePlayer.

 Sau đó, ta mở tập lệnh này và thêm đoạn mã sau vào trong function “update” (phần in đậm màu xanh là phần bạn cần thêm vào):


void Update ()
{
if (Input.GetKey (KeyCode.LeftArrow))
     {
          gameObject.transform.Translate (Vector3.left * 0.1f);
     }
     if (Input.GetKey (KeyCode.RightArrow))
     {
          gameObject.transform.Translate (Vector3.right * 0.1f);
     }
     if (Input.GetKey (KeyCode.UpArrow))
     {
          gameObject.transform.Translate (Vector3.up * 0.1f);
     }
     if (Input.GetKey (KeyCode.DownArrow))
     {
          gameObject.transform.Translate (Vector3.down * 0.1f);
     }
}


Mình sẽ giải thích một số chức năng của đoạn code bên trên như sau:


Mình sử dụng function “Update” để kiểm tra đầu vào từ bàn phím.

Nếu mũi tên bên trái được nhấn, đối tượng player (tức là tàu vũ trụ) sẽ dịch sang bên trái (tức là 0,1 mét sang bên trái).

Nếu mũi tên phải được nhấn, đối tượng player (tức là tàu vũ trụ) sẽ dịch sang phải (tức là 0,1 mét sang phải).

** Lưu ý rằng mình sử dụng chức năng GetKey để kiểm tra xem phím được nhấn; tuy nhiên, nếu bạn muốn kiểm tra xem một Key đã được phát hành hay chưa thì bạn có thể sử dụng chức năng GetKeyDown thay thế. **

Bây giờ bạn có thể lưu tập lệnh, kiểm tra xem có bất kỳ lỗi nào trong cửa sổ bảng điều khiển hay không. Sau đó liên kết tập lệnh (tức là kéo và thả tập lệnh) đến đối tượng player” (Hình tam giác) trong cửa sổ hierarchy. Một khi điều này được thực hiện, bạn có thể chạy mô phỏng và kiểm tra xem bạn có thể di chuyển player sang trái và phải hay không. Sau khi nhấn các phím mũi tên trên bàn phím, bạn sẽ thấy tàu vũ trụ di chuyển theo bốn hướng.

Lưu ý rằng để bật hoặc tắt mô phỏng, bạn có thể nhấn phím tắt CTRL + P hoặc sử dụng hình tam giác màu đen nằm ở đầu cửa sổ.

III. Tạo hiệu ứng tên lửa nhả đạn


Trong phần này, Mình sẽ hướng dẫn bạn cách làm cho tên lửa có thể bắn ra được đạn. Có nghĩa là mỗi khi bạn nhấn nút “Space” (Nút khoảng trắng) thì tên lửa sẽ bắn ra 1 viên đạn.
Chúng ta cần thực hiện các bước sau:
Tạo một đối tượng tên lửa.
Lưu đối tượng này dưới dạng prefab (tức là mẫu).
Phát hiện khi nút “Space” được nhấn.
Khởi động prefab tên lửa và thêm vận tốc cho nó để nó di chuyển lên khi bắn.

Đầu tiên, hãy tạo một đối tượng mới cho tên lửa:


Tại cửa sổ Project,
Mình sẽ tạo một sprite hình tròn (Create | Sprites | Circle) và đổi tên thành “bullet”.


Sau khi tạo một sp
rite hình tròn , mình sẽ kéo và thả vào cửa sổ hierarchy, điều này sẽ tạo ra một đối tượng mới gọi là “bullet”.



Sử dụng Scale, Mình scale bullet thành (0,1; 0,1; 0,1) nhằm giảm kích thước của viên đạnỞ đây mình không quan trọng vị trí của đối tượng. 

Thêm một thành phần Rigidbody2D vào đối tượng này (
Components | Physics2D | Rigidbody2D) từ menu trên cùng và đặt thuộc tính Gravity Scale của thành phần này (tức là Rigidbody2D) thành 0, như được minh họa trong hình tiếp theo.



Bằng cách thêm một thành phần Rigidbody2D vào đối tượng này, chúng ta sẽ đảm bảo rằng có thể áp dụng lực cho đối tượng hoặc sửa đổi vận tốc của đối tượng; điều này đang được nói, bởi vì chúng ta có chế độ xem từ trên xuống, chúng ta không muốn vật thể này bị ảnh hưởng bởi trọng lực (nếu không nó sẽ rơi xuống) và đây là lý do tại sao chúng ta đặt thuộc tính Gravity Scale thành 0 cho đối tượng này.

Bây giờ chúng ta có thể chuyển đổi viên đạn này thành một prefab bằng cách kéo và thả đối tượng này (tức là, viên đạn) vào Scene.



Sau đó, bạn có thể xóa đối tượng bullet khỏi cửa sổ hierarchy.

Cuối cùng nhưng không kém phần quan trọng, chúng ta cần code cho player để khởi tạo và đẩy viên đạn này nếu người chơi nhấn phím cách.

Mình tiếp tục mở script ban đầu tên MovePlayer.
Thêm mã sau vào đầu tập lệnh (mã mới in đậm).


public class MovePlayer : MonoBehaviour
{
public GameObject bullet;

thêm mã sau vào hàm “Update”:



if (Input.GetKeyDown (KeyCode.Space))
{
GameObject b = (GameObject)(Instantiate (bullet, transform.position + transform.up*1.5f, Quaternion.identity));
b.GetComponent<Rigidbody2D> ().AddForce (transform.up * 1000);
}

Trong đoạn code trên:
Mình đã tạo một GameObject mới. GameObject này được gọi là “bullet”. Nếu người chơi nhấn nút “Space”, viên đạn mới sẽ ngay lập tức xuất hiện phía trên tàu vũ trụ. Sau đó chúng tôi thêm một lực hướng lên vào viên đạn để nó bắt đầu di chuyển lên trên.
Bây giờ bạn có thể lưu tập lệnh của mình và kiểm tra xem nó có bị lỗi trong cửa sổ Console không.
Nếu bạn nhấp vào đối tượng “player” trong cửa sổ hierarchy và nếu bạn nhìn vào cửa sổ mô phỏng, bạn sẽ thấy rằng một trường mới gọi là Bullet đã xuất hiện cho thành phần MovePlayer.
Bây giờ bạn kéo và thả prefab được gọi là “bullet” vào trường này.




Khi điều này được thực hiện, bạn có thể bật mô phỏng và kiểm tra xem sau khi nhấn nút “Space”, “player” có thể bắn ra một viên đạn.




No comments:

Post a Comment

Cách tính BW và latency trong 1 hệ thống SoC sử dụng chuẩn giao tiếp AXI protocol

Tác giả:  TrongTran Ngày:  31/12/2019 Nếu bạn nào đang làm về verification cho system performance (ST) thì bài này sẽ bổ ích cho bạn. Ngày ...