Cách tạo trò chơi Android cơ bản với Unity
Trong bài hướng dẫn trước đây của Appual có tựa đề Cách tạo trò chơi nền tảng Unity cơ bản ( và phần 2), chúng tôi đã sử dụng Unity và trình cắm thêm WebGL tích hợp để tạo một trò chơi trình duyệt dựa trên HTML5 đơn giản - trong hướng dẫn tương tự này, chúng ta sẽ xem xét cách tạo một trò chơi Android cơ bản bằng Unity.
Yêu cầu:
- Unity
- Trình soạn thảo văn bản tốt như NotePad ++ (Tùy chọn nhưng được khuyến nghị)
- Android SDK
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 với - bảng phân cấp sẽ chứa tất cả các yếu tố cảnh của chúng ta (scene = bất cứ cấp độ nào bạn hiện đang làm việc). Sau đó, có tab Game được sử dụng để chơi / thử nghiệm trò chơi của bạn trong khi bên trong trình chỉnh sửa và bên phải bạn có bảng Inspector, 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 ra một sprite - đây sẽ là nhân vật chính của chúng tôi (mà chúng tôi kiểm soát). Bạn có thể vẽ sprite của riêng bạn, giống như chỉ vẽ một hình vuông với đôi mắt, hoặc bạn có thể lấy một sprite từ internet - chỉ cần đảm bảo đó là một 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 phân cấp ở bên trái.
Vì vậy, bây giờ chúng tôi sẽ tạo ra một vài nền tảng - đây có thể là 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 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 giống như bạn đã làm với nhân vật sprite của bạn.
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 tô màu xanh trong cửa sổ Scene), sau đó trên bảng Inspector, 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à bạn sẽ phải tự viết mã trong một SDK khác.
Chúng ta muốn ngăn chặn nhân vật sprite chính quay vòng ngoài tầm kiểm soát - vì vậy hãy tìm tab Constraints trong bảng Inspector (với sprite chính vẫn được đánh dấu trong cửa sổ Scene), và đánh dấu vào ô Freeze Rotation Z.
Nếu bạn nhấn nút Play, nhân vật chính của bạn sẽ rơi từ bầu trời và chỉ rơi vô tận - chúng tôi sẽ chăm sóc điều đó 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 ta áp dụng phụ thuộc vào hình dạng chúng đang được áp dụng cho - vì vậy nếu bạn áp dụng cùng một vật lý cho một hình cầu, ví dụ, nó sẽ cuộn xung quanh.
Chúng tôi cũng muốn sửa định hướng của chúng tôi để ngăn chặn nhân vật quay và tự do xung quanh. Tìm 'ràng buộc' trong thanh tra với trình phát được chọn và đánh dấu vào ô để đóng băng xoay Z. Bây giờ hãy nhấp vào phát lại và bạn sẽ thấy trình phát của mình hiện rơi từ bầu trời xuống doom vô hạn của mình.
Để ngăn chặn nhân vật chính của chúng tôi từ chỉ rơi không ngừng, chúng tôi sẽ cần phải thêm một máy va chạm. Đây là cơ bản chỉ là phác thảo rắ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 sprite. Đá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ờ 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à ở lại đó.
Vì vậy, bây giờ chúng tôi muốn đảm bảo rằng máy ảnh sẽ theo nhân vật chính của bạn - bên trong hiện trường, nên đã có một đối tượng máy ảnh. Bạn muốn kéo nó lên trên cùng của nhân vật chính.
Điều này đặc biệt quan trọng nếu bạn đang tạo ra một nhân vật dựa trên 3D, một cái gì đó giống như Slope, nơi bạn cần máy ảnh để duy trì 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 vào bảng Hierarchy và trong danh sách GameObjects, bạn muốn kéo camera bên dưới nhân vật sprite chính (Player GameObject). Điều này sẽ làm cho nhân vật sprite chính là ' cha mẹ' của máy ảnh. Vì vậy, bất cứ khi nào Player GameObject di chuyển xung quanh màn hình, máy ảnh sẽ theo sau.
Vì vậy, đối với hướng dẫn trò chơi này, chúng tôi sẽ tạo ra trò chơi kiểu Á hậu vô tận cơ bản, giống như Run 3, nơi nhân vật chính của bạn sẽ chạy trên màn hình và tránh chướng ngại vật (hoặc chơi trò chơi nếu bạn gặp phải chướng ngại vật. để thực hiện một vài tập lệnh, hầu hết trong số đó sẽ được cung cấp trong hướng dẫn này.
Nhấn chuột phải vào thư mục Assets và tạo một thư mục mới - đặt tên là Scripts . Bây giờ kích phải vào thư mục mới này và nhấn Create> C # Script và đặt tên là PlayerControls . Kịch bản này sẽ xác định hành vi của nhân vật chính của chúng tôi.
Khi bạn nhấp đúp vào tập lệnh mới này, nó sẽ mở ra trong Visual Studio - cách khác (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 ++.
Các tập tin kịch bản nên đã có một chút mã tấm nồi hơi bên trong nó - về cơ bản đây là kịch bản mà cần phải được để lại một mình hoặc chỉ cần điều chỉnh theo nhu cầu của bạn, và sẽ tiết kiệm cho chúng tôi rất nhiều thời gian. Vì vậy, chúng ta sẽ thêm một đối tượng mới.
Trên dòng void Start ():
công Rigidbody2D rb;
Đoạn mã tiếp theo chúng ta cần thêm vào trong Start (), và được sử dụng để tìm ra rigidbody - về cơ bản, chúng tôi hướng dẫn Unity xác định vị trí vật lý mà chúng ta gắn vào GameObjects (nhân vật chính của chúng ta) và Start () sẽ được thực hiện 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 bên trong Update ()
rb.velocity = new Vector2 (3, rb.velocity.y);
Cập nhật () làm liên tục làm mới, vì vậy bất kỳ mã được thêm vào trong đó sẽ chạy liên tục (trừ khi đối tượng bị hủy). Vì vậy, những gì chúng tôi đã làm là hướng dẫn kịch bản mà chúng tôi muốn các rigidbody để có một vector mới bằng cách sử dụng cùng một tốc độ trên trục Y (rb.velocity.y), nhưng với tốc độ 3 trên trục ngang. Trong tương lai, bạn cũng có thể sử dụng ' FixedUpdate ()' tương tự nhưng khác nhau, bởi vì ở đó bạn có thể kiểm soát số lượng cập nhật / làm mới của tập lệnh.
Lưu tập lệnh và quay trở lại Unity, sau đó nhấp vào nhân vật chính của bạn để tô sáng nó. Trong bảng Inspector, vào Add Component> Scripts và thêm tập lệnh mà chúng ta vừa lưu. Bây giờ khi bạn nhấp vào nút Phát, nhân vật chính sẽ liên tục di chuyển về phía cạnh nền tảng.
Mẹo CHUYÊN NGHIỆP: Nếu vấn đề xảy ra với máy tính của bạn hoặc máy tính xách tay / máy tính xách tay, bạn nên thử sử dụng phần mềm Reimage Plus có thể quét các kho lưu trữ và thay thế các tệp bị hỏng và bị thiếu. Điều này làm việc trong hầu hết các trường hợp, nơi vấn đề được bắt nguồn do một tham nhũng hệ thống. Bạn có thể tải xuống Reimage Plus bằng cách nhấp vào đâyTạo điều khiển đầu vào trình phát
Vì vậy, vì đây là một trò chơi phong cách Á hậu vô tận với những trở ngại, chúng ta cần phải thêm điều khiển cho người chơi như nút 'nhảy'.
Mở lại kịch bản từ trước và chúng tôi sẽ thêm mã bổ sung này:
if (Input.GetMouseButtonDown (0)) {rb.velocity = new Vector2 (rb.velocity.x, 5); }
Bạn sẽ đặt nó bên trong phương thức Update (), và về cơ bản nó cho Unity biết rằng khi người chơi nhấp chuột vào nút của họ (sẽ được dịch thành một màn hình trên Android), nhân vật chính sẽ nhảy vào không khí. Điều này là do chúng tôi đã thêm một vận tốc trên trục Y với giá trị là 5 (giá trị cao hơn có nghĩa là một bước nhảy cao hơn, tất nhiên).
Nếu bạn không quá quen thuộc với mã hóa, chúng tôi đã sử dụng câu lệnh If bởi vì nếu về cơ bản là có hoặc không có chỉ dẫn - nghĩa 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 là tập lệnh sẽ không chạy.
Tiếp tục và nhấp vào nút Phát và đảm bảo nó hoạt động chính xác trước khi tiếp tục.
Tiếp theo, chúng ta sẽ thêm các chướng ngại vật của chúng ta (có thể phá hủy nhân vật chính), một điểm số trò chơi và một trò chơi trên menu.
Nếu bạn thử nghiệm trò chơi cho đến nay, vấn đề duy nhất chúng tôi có cho đến nay là 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ó căn cứ hay không - đây là về cơ bản 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 ta sẽ sửa lỗi đó.
Trong kịch bản lệnh, thêm bit mã trên phương thức Update ():
public Transform groundCheck; public startPosition; công phao mặt đấtCheckRadius; công khai LayerMask whatIsGround; bool onGround riêng; Và sau đó thêm dòng tiếp theo này vào phương thức Update bên trên câu lệnh if: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Và tiếp theo, bạn sẽ thay đổi dòng sau đây để bao gồm && onGround if (Input.GetMouseButtonDown (0) && onGround) {Vì vậy, toàn bộ kịch bản của chúng ta về cơ bản sẽ trông giống như sau: public class PlayerControls : MonoBehaviour { public Rigidbody2D rb; public Transform groundCheck; public startPosition; công phao mặt đấtCheckRadius; công khai LayerMask whatIsGround; bool onGround riêng; void Start () {rb = GetComponent (); } void Update () {rb.velocity = new Vector2 (3, rb.velocity.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); if (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = new Vector2 (rb.velocity.x, 5); }}}
Để giải thích những gì chúng tôi đã làm, chúng tôi đã tạo ra một biế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 đã đặt bán kính và chúng tôi hướng dẫn Unity kiểm tra xem bán kính có trùng với lớp nền của chúng tôi không - và vì vậy nếu bán kính của chúng ta được đồng bộ với mặt đất, nhân vật của chúng ta có thể nhảy và nếu chúng ta đã có không khí nhảy, chúng ta không thể nhảy lại được. Về cơ bản, onGround sẽ là true nếu biến đổi có tên groundCheck chồng chéo với lớp mặt đất. Hy vọng rằng có ý nghĩa.
Vì vậy, hãy lưu tập lệnh và quay trở 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 chúng ta.
Bây giờ nhấn chuột phải vào Hierarchy và tạo một đối tượng trống mới, và kéo nó để bên dưới sprite nhân vật chính trong cửa sổ Scene chính - định vị đối tượng trống mà chúng ta muốn sàn được phát hiện. Đổi tên đối tượng thành Check Ground, sau đó kéo đối tượng bên dưới đối tượng trò chơi của người chơi như chúng ta đã làm trước đó bằng camera (để tạo mối quan hệ cha - con giữa các đối tượng). Bây giờ các đối tượng trống sẽ làm theo nhân vật chính sprite, giống như máy ảnh, và nó sẽ liên tục kiểm tra khoảng cách sàn.cam
Bây giờ chọn sprite nhân vật chính và vào bảng Inspector - kéo đối tượng Check Ground vào không gian gọi là groundCheck. Vị trí 'transform' phải bằng với vị trí của đối tượng mới này, và nó nói Radius ở đâu, làm cho nó là 0.1.
Chúng ta cần xác định lớp mặt đất. Chỉ cần chọn địa hình mặt đất và trong Thanh 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. Nơi nó nói là gì Ground trên đối tượng nhân vật chính của chúng tôi sprite, cũng chọn lớp mặt đất.
Những gì chúng tôi đã làm là hướng dẫn kịch bản trình phát để thực hiện kiểm tra - nếu điểm nhỏ trên màn hình chồng chéo với bất kỳ thứ gì khớp với lớp, ký tự sẽ chỉ nhảy nếu điều này là đúng.
Game Over trên menu Collision và Game
Vì vậy, để quấn nó tất cả lên, những điều cuối cùng chúng tôi muốn làm là A: Hãy va chạm với những trở ngại dẫn đến một trò chơi trên, và B: Tạo một trò chơi trên màn hình menu với một nút chơi một lần nữa.
Những gì bạn về cơ bản muốn làm là:
- Thêm một đối tượng Player và chỉ định một rigidbody và một collider của sự lựa chọn của bạn với nó.
- Thêm một đối tượng Enemy và chỉ định một rigidbody và một collider của choise của bạn với nó. (và tùy chọn, thêm thẻ Đối tượng vào nó)
- Tạo một tập lệnh C # mới và thêm nó làm thành phần cho Trình phát (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 phải tạo tập lệnh mới nếu bạn đã có)
- Thêm phần này vào tập lệnh của bạn:
void OnCollisionEnter (Collision coll) {Debug.Log ("Va chạm"); // Kiểm tra xem nó có đăng ký một xung đột hay không, nếu nó hoạt động, bạn có thể loại bỏ dòng này nếu (coll.gameobject.tag == "Enemy") { // nhìn thấy nếu đối tượng mà người chơi của bạn va chạm có một thẻ tên là "Kẻ thù ", điều này có thể được thay thế bằng if (coll.gameobject.name == ... nhưng sử dụng thẻ là một cách dễ dàng để làm điều đó. // Thêm mã của bạn ở đây, như: Application.LoadLevel (" GameOver "); .Log ("Working"); // nếu làm việc, bạn có thể xóa dòng này. }
Chơi xung quanh với kịch bản ví dụ đó - với một số thử nghiệm và lỗi, bạn sẽ làm cho nó làm chính xác những gì chúng ta cần.
Bây giờ để xem chính xác làm thế nào để tạo ra một cấp độ GameOver với một nút Play, xem phần cuối cùng của hướng dẫn của ứng dụng Làm thế nào để tạo một nền tảng Unity cơ bản trò chơi Pt. 2.
Mẹo CHUYÊN NGHIỆP: Nếu vấn đề xảy ra với máy tính của bạn hoặc máy tính xách tay / máy tính xách tay, bạn nên thử sử dụng phần mềm Reimage Plus có thể quét các kho lưu trữ và thay thế các tệp bị hỏng và bị thiếu. Điều này làm việc trong hầu hết các trường hợp, nơi vấn đề được bắt nguồn do một tham nhũng hệ thống. Bạn có thể tải xuống Reimage Plus bằng cách nhấp vào đây