Cách tạo trò chơi Android cơ bản với Unity

trong hướng dẫn tương tự này, chúng ta sẽ xem xét cách tạo Android trò chơi sử dụng Unity.



Yêu cầu:

  • Thống nhất
  • Một trình soạn thảo văn bản tốt như NotePad ++ (Tùy chọn nhưng được khuyến nghị)
  • SDK Android
Nếu chưa có, bạn nên bắt đầu bằng cách tải xuống và cài đặt Unity SDK và cả Android SDK. Chúng tôi cần Android SDK để có thể kiểm tra APK của trò chơi trong môi trường Android.

Khởi chạy Unity và tạo một dự án mới. Biến nó thành một dự án 2D.



Có một số bảng để làm quen - bảng Phân cấp sẽ chứa tất cả các yếu tố cảnh của chúng tôi (cảnh = bất kỳ “cấp độ” nào bạn hiện đang làm việc). Sau đó, có tab Trò chơi được sử dụng để chơi / thử nghiệm trò chơi của bạn khi ở bên trong trình chỉnh sửa và ở bên phải, bạn có bảng Thanh tra, nơi bạn sẽ chỉnh sửa nhiều thứ khác nhau như ánh sáng, vật lý, v.v.



Điều đầu tiên chúng tôi muốn làm là tạo một sprite - đây sẽ là nhân vật chính của chúng tôi (mà chúng tôi điều khiển). Bạn có thể vẽ sprite của riêng mình, như chỉ vẽ hình vuông bằng mắt hoặc bạn có thể lấy sprite từ internet - chỉ cần đảm bảo rằng đó là tệp .PNG (nền trong suốt).



Kéo và thả sprite của bạn vào cửa sổ cảnh chính (cửa sổ lớn nhất) - nó cũng sẽ xuất hiện trên bảng Hierarchy ở bên trái.

Vì vậy, bây giờ chúng tôi sẽ tạo một vài nền tảng - đây có thể là những hình vuông đơn giản, bởi vì chúng tôi có thể dễ dàng thay đổi kích thước chúng để tạo thành các bức tường và các nền tảng khác.

Vì vậy, chỉ cần tạo một hình vuông mới “sprite” và kéo và thả nó vào cửa sổ Scene như bạn đã làm với nhân vật sprite của mình.



Bây giờ chúng ta cần hướng dẫn Unity cung cấp vật lý cho nhân vật chính của chúng ta - nhấp vào nhân vật chính của bạn (nó sẽ được đánh dấu bằng màu xanh lam trong cửa sổ Cảnh), sau đó trên bảng Thanh tra, tìm “GameObjects”.

Nhấp vào “Thêm thành phần> Vật lý 2D> RigidBody2D”. Điều này sẽ tự động thêm vật lý vào sprite của bạn, mà nếu không, bạn sẽ phải tự viết script trong SDK khác.

Chúng tôi muốn ngăn nhân vật chính quay vòng ngoài tầm kiểm soát - vì vậy hãy tìm tab Ràng buộc trong bảng Thanh tra (với hình chính vẫn được đánh dấu trong cửa sổ Cảnh) và chọn hộp “Freeze Rotation Z”.

Nếu bạn nhấn nút “Phát”, nhân vật chính của bạn sẽ rơi từ trên trời xuống và rơi không ngừng - chúng tôi sẽ giải quyết vấn đề đó sau, nhưng chỉ cần lưu ý cách chúng tôi có thể dễ dàng áp dụng vật lý. Vật lý chúng tôi áp dụng phụ thuộc vào hình dạng mà chúng đang được áp dụng - vì vậy, nếu bạn áp dụng cùng một vật lý cho một hình cầu, chẳng hạn, nó sẽ lăn tròn.

Chúng tôi cũng muốn sửa hướng của mình để ngăn nhân vật quay và quay tự do xung quanh. Tìm ‘ràng buộc’ trong trình kiểm tra với người chơi được chọn và đánh dấu vào hộp để đóng băng vòng quay Z. Bây giờ hãy nhấp vào chơi lại và bạn sẽ thấy người chơi của mình hiện rơi từ trên trời xuống đất diệt vong vô hạn.

Để ngăn nhân vật chính của chúng ta rơi không ngừng, chúng ta sẽ cần thêm một máy va chạm. Về cơ bản, đây chỉ là đường viền chắc chắn của một hình dạng mà chúng tôi sẽ thêm vào nhân vật chính. Đánh dấu nhân vật chính của bạn, nhấp vào “Thêm thành phần> Vật lý 2D> BoxCollider2D.

Bây giờ, hãy làm điều tương tự với nền tảng bạn đã tạo trước đó. Nhân vật chính của bạn bây giờ sẽ 'va chạm' với nền tảng và ở đó.

Vì vậy, bây giờ chúng tôi muốn đảm bảo rằng máy ảnh sẽ đi theo nhân vật chính của bạn - bên trong cảnh, hẳn đã có một đối tượng máy ảnh. Bạn muốn kéo cái này trên đỉnh nhân vật chính.

Điều này đặc biệt quan trọng nếu bạn đang tạo Á hậu dựa trên 3D , cái gì đó như Dốc nơi bạn cần máy ảnh liên tục ở phía sau đối tượng trò chơi chính (nhân vật chính của bạn).

Bây giờ hãy chuyển đến bảng Phân cấp và trong danh sách GameObjects, bạn muốn kéo máy ảnh bên dưới nhân vật chính (Player GameObject). Điều này sẽ làm cho ký tự sprite chính là ‘ cha mẹ' của máy ảnh. Vì vậy, bất cứ khi nào Người chơi GameObject di chuyển xung quanh màn hình, camera sẽ theo sau.

Vì vậy, đối với hướng dẫn trò chơi này, chúng tôi sẽ chỉ tạo một trò chơi loại người chạy vô tận cơ bản, giống như Chạy 3 , trong đó nhân vật chính của bạn sẽ chạy trên màn hình và né tránh chướng ngại vật (hoặc 'trò chơi kết thúc' nếu bạn gặp chướng ngại vật '. Điều này sẽ cần một vài kịch bản, hầu hết sẽ được cung cấp trong hướng dẫn này.

Nhấp chuột phải vào thư mục “Tài sản” và tạo một thư mục mới - đặt tên cho nó Tập lệnh . Bây giờ hãy nhấp chuột phải vào thư mục mới này và nhấn “Create> C # Script” và đặt tên cho nó PlayerControls . Tập lệnh này sẽ xác định hành vi của nhân vật chính của chúng ta.

Khi bạn nhấp đúp vào tập lệnh mới này, nó Nên mở trong Visual Studio - ngoài ra (và sở thích cá nhân của tôi), bạn có thể chỉnh sửa nó trong một cái gì đó như NotePad ++.

Tệp script nên đã có một chút mã “boiler plate” bên trong nó - về cơ bản đây là script cần được để riêng hoặc chỉ được điều chỉnh theo nhu cầu của bạn và sẽ giúp chúng tôi tiết kiệm rất nhiều thời gian. Vì vậy, chúng tôi sẽ thêm một đối tượng mới.

Trên dòng void Start ():

công cộng Rigidbody2D rb;

Đoạn mã tiếp theo mà chúng tôi cần thêm sẽ đi trong Start () và được sử dụng để tìm phần cứng - về cơ bản, chúng tôi hướng dẫn Unity xác định vị trí vật lý mà chúng tôi đã gắn vào GameObjects (nhân vật chính của chúng tôi) và Bắt đầu () sẽ được thực thi khi một đối tượng hoặc tập lệnh mới được tạo.

Vì vậy, tiếp theo, xác định vị trí đối tượng vật lý.

rb = GetComponent< Rigidbody2D > ();

Và bạn sẽ thêm dòng này vào bên trong Update ()

rb.velocity = Mới Vector2 (3, rb.velocity.y);

Những gì Update () làm là làm mới liên tục, vì vậy bất kỳ mã nào được thêm vào đó sẽ chạy liên tục (trừ khi đối tượng bị phá hủy). Vì vậy, những gì chúng tôi đã làm là hướng dẫn tập lệnh rằng chúng tôi muốn thân cứng có một vectơ mới sử dụng cùng tốc độ trên trục Y (rb.velocity.y), nhưng với tốc độ 3 trên trục hoành. Trong tương lai, bạn cũng có thể sử dụng ‘ FixedUpdate () ’ tương tự nhưng khác, vì ở đó bạn có thể kiểm soát lượng cập nhật / làm mới của tập lệnh.

Lưu tập lệnh và quay lại Unity, sau đó nhấp vào nhân vật viết chính của bạn để đánh dấu nó. Trong bảng Thanh tra, đi tới Thêm thành phần> Tập lệnh và thêm tập lệnh mà chúng tôi vừa lưu. Bây giờ khi bạn nhấp vào nút Play, nhân vật chính sẽ liên tục di chuyển về phía cạnh nền tảng.

Tạo điều khiển đầu vào của trình phát

Vì vậy, vì đây là một trò chơi theo phong cách người chạy vô tận với các chướng ngại vật, chúng tôi cần thêm các điều khiển cho người chơi như nút ‘nhảy’.

Mở lại tập lệnh từ trước đó và chúng tôi sẽ thêm mã bổ sung này:

 nếu (Input.GetMouseButtonDown (0)) {rb.velocity = Mới Vector2 (rb.velocity.x, 5); }

Bạn sẽ đặt nó vào bên trong phương thức Update () và những gì nó làm về cơ bản là nói với Unity rằng khi người chơi nhấp vào nút chuột của họ (sẽ được dịch là một lần chạm vào màn hình trên Android), nhân vật chính sẽ “nhảy ' trong không khí. Điều này là do chúng tôi đã thêm vận tốc trên trục Y với giá trị là 5 (tất nhiên, giá trị cao hơn sẽ có nghĩa là bước nhảy cao hơn).

Nếu bạn không quá quen thuộc với việc viết mã, chúng tôi đã sử dụng Nếu tuyên bố bởi vì Nếu về cơ bản là một loại hướng dẫn 'làm hoặc không' - nghĩa đen của nó là NẾU điều này xảy ra, hãy thực hiện lệnh này . Vì vậy, nếu người chơi không nhấp chuột (hoặc nhấn vào màn hình Android của họ) thì rõ ràng tập lệnh sẽ không chạy.

Hãy tiếp tục và nhấp vào nút “Phát” và đảm bảo rằng nó hoạt động chính xác trước khi tiếp tục.

Tiếp theo, chúng tôi sẽ thêm các chướng ngại vật của chúng tôi (có thể “tiêu diệt” nhân vật chính), điểm số trò chơi và menu “trò chơi kết thúc”.

Nếu bạn đã thử nghiệm trò chơi cho đến nay, vấn đề duy nhất mà chúng tôi gặp phải cho đến nay là việc nhấn nút 'nhảy' mà chúng tôi đã tạo sẽ nhảy nhân vật bất kể chúng có nối đất hay không - về cơ bản đây là Flappy Birds, và không phải là một người chạy như chúng tôi muốn. Nhưng chúng tôi sẽ khắc phục điều đó.

Trong tập lệnh, hãy thêm đoạn mã này ở trên phương thức Update ():

 công cộng Biến đổi mặt bằngCheck; công cộng Chuyển đổi startPosition; công cộng   Phao nổi groundCheckRadius; công cộng LayerMask whatIsGround; riêng tư   bool trên mặt đất; Và sau đó thêm dòng tiếp theo này vào phương thức Cập nhật phía trên nếu câu lệnh: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Và tiếp theo, bạn sẽ thay đổi dòng sau để bao gồm “&& onGround” nếu (Input.GetMouseButtonDown (0) && onGround) {Vì vậy, toàn bộ tập lệnh của chúng ta về cơ bản sẽ giống như sau: công cộng   lớp học   PlayerControls : MonoBehaviour { công cộng Rigidbody2D rb; công cộng Biến đổi mặt bằngCheck; công cộng Chuyển đổi startPosition; công cộng   Phao nổi groundCheckRadius; công cộng LayerMask whatIsGround; riêng tư   bool trên mặt đất; vô hiệu   Khởi đầu () {rb = GetComponent (); } vô hiệu   Cập nhật () {rb.velocity = Mới Vector2 (3, rb.velocity.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); nếu (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = Mới Vector2 (rb.velocity.x, 5); }}}

Để giải thích những gì chúng tôi đã làm, chúng tôi đã tạo một 'chuyển đổi' mới, có nghĩa là một vị trí trong không gian của thế giới trò chơi. Chúng tôi đã thiết lập bán kính của nó và chúng tôi đang hướng dẫn Unity kiểm tra xem bán kính có trùng với lớp 'mặt đất' của chúng tôi hay không - và vì vậy nếu bán kính của chúng tôi được đồng bộ hóa với 'mặt đất', nhân vật của chúng tôi sẽ có thể nhảy và nếu chúng tôi 'đã ở trên không từ một cú nhảy, chúng ta sẽ không thể nhảy lại. Về cơ bản, trên mặt đất sẽ đúng nếu biến đổi có tên groundCheck đang chồng lên lớp mặt đất. Hy vọng rằng điều đó có ý nghĩa.

Vì vậy, hãy lưu tập lệnh và quay lại Unity và bạn sẽ nhận thấy rằng nhiều tùy chọn hơn đã được thêm vào Trình kiểm tra sau khi đánh dấu trình phát. Đây là các biến công khai và chúng ta có thể điều chỉnh chúng theo ý thích của mình.

Bây giờ hãy nhấp chuột phải vào Cấu trúc phân cấp và tạo một đối tượng trống mới và kéo nó sao cho bên dưới nhân vật chính trong cửa sổ Cảnh chính - định vị đối tượng trống này ở nơi chúng ta muốn tầng được phát hiện. Đổi tên đối tượng thành “Kiểm tra đất”, sau đó kéo nó bên dưới đối tượng trò chơi của người chơi giống như chúng ta đã làm trước đó với máy ảnh (để tạo mối quan hệ cha - con giữa các đối tượng). Bây giờ đối tượng trống sẽ theo dõi nhân vật chính, giống như camera, và nó sẽ liên tục kiểm tra khoảng cách sàn. Camera

Bây giờ chọn nhân vật chính và chuyển đến bảng Thanh tra - kéo đối tượng Kiểm tra Mặt đất vào không gian có tên “groundCheck”. Vị trí 'biến đổi' phải bằng với vị trí của đối tượng mới này và ở vị trí 'Bán kính', hãy đặt nó là 0,1.

Chúng ta cần xác định lớp nền. Chỉ cần chọn địa hình mặt đất và trong Trình kiểm tra, tìm nút cho “Lớp: Mặc định” (đó là hộp thả xuống) và chọn “Thêm lớp”.

Bây giờ chọn “mặt đất” làm lớp cho nền tảng của chúng tôi và lặp lại điều này cho bất kỳ nền tảng nào khác trong cửa sổ trò chơi. Khi nó cho biết “Ground là gì” trên đối tượng sprite nhân vật chính của chúng ta, hãy chọn layer mặt đất.

Những gì chúng tôi đã làm là hướng dẫn tập lệnh trình phát thực hiện kiểm tra - nếu điểm nhỏ trên màn hình chồng lên bất kỳ thứ gì khớp với lớp, nhân vật sẽ chỉ nhảy nếu điều này là đúng.

Trò chơi kết thúc trên Va chạm và Menu trò chơi

Vì vậy, để kết thúc tất cả, điều cuối cùng chúng tôi muốn làm là A: Va chạm với chướng ngại vật dẫn đến kết thúc trò chơi và B: Tạo màn hình menu 'trò chơi kết thúc' với nút chơi lại.

Về cơ bản những gì bạn muốn làm là:

  1. Thêm một Người chơi đối tượng và gán một cơ thể cứng nhắc và một máy va chạm của sự lựa chọn của bạn với nó.
  2. Thêm một Kẻ thù đối tượng và gán một cơ thể cứng nhắc và một máy va chạm sự lựa chọn của bạn với nó. (và tùy chọn, thêm Thẻ 'kẻ thù' với nó)
  3. Tạo một cái mới Tập lệnh C # và thêm nó như một thành phần vào Người chơi (hoặc sử dụng bất kỳ tập lệnh nào được đính kèm với trình phát, không cần tạo một tập lệnh mới nếu bạn đã có)
  4. Thêm điều này vào tập lệnh của bạn:
vô hiệu OnCollisionEnter ( Va chạm coll) { Gỡ lỗi . Nhật ký ('Va chạm'); // Kiểm tra xem nó có đăng ký xung đột hay không, nếu nó hoạt động, bạn có thể xóa dòng này nếu (coll.gameobject. nhãn == 'Kẻ thù') { // xem vật thể mà người chơi của bạn va chạm có thẻ gọi là 'Kẻ thù không