Hướng dẫn cơ bản cho người mới bắt đầu để phát triển trò chơi trong Unity

Unity là một công cụ tuyệt vời để tạo nguyên mẫu mọi thứ từ trò chơi đến hình ảnh tương tác. Trong bài viết này, chúng tôi giới thiệu cho các bạn tất cả những gì bạn cần biết để bắt đầu sử dụng Unity.

Đầu tiên, một chút về tôi: Tôi là một nhà phát triển thống nhất theo sở thích, nhà lập mô hình 3d và nhà thiết kế đồ họa, người đã làm việc với Unity và Blender trong hơn 5 năm. Tôi hiện là sinh viên Toán tài chính tại University College Dublin và thỉnh thoảng tôi làm thiết kế đồ họa tự do, tạo mẫu web và tạo mẫu trò chơi.

Giới thiệu

Bài viết này hướng đến những ai chưa từng sử dụng Unity trước đây, nhưng đã có kinh nghiệm lập trình hoặc thiết kế / phát triển web. Đến cuối bài viết này, bạn sẽ có một cái nhìn tổng quan chung về engine cũng như tất cả các chức năng và mã cần thiết để bắt đầu tạo một trò chơi cơ bản.

Tại sao Unity?

Nếu bạn muốn làm trò chơi

Thực sự có rất ít lựa chọn khi phát triển Indie Game. Ba lựa chọn chính nếu bạn muốn xây dựng trò chơi là Unreal, Unity hoặc GameMaker.

Thống nhất có lẽ là nền tảng ít được ủng hộ nhất trong số 3 nền tảng. Nó cung cấp cho bạn một sản phẩm rất thô sơ, nhưng rất linh hoạt, được ghi chép đầy đủ và có khả năng mở rộng cao để xây dựng khá nhiều thể loại trò chơi mà bạn có thể nghĩ đến.

Có rất nhiều trò chơi rất thành công như Escape from Tarkov (FPS), Monument Valley (Puzzler) và This War of Mine (Strategy / Survival) đều được xây dựng trên Unity.

Trên thực tế, động cơ mà bạn xây dựng trò chơi đầu tiên của mình có lẽ không phải là yếu tố quan trọng, vì vậy lời khuyên của tôi là chỉ chọn một động cơ và sử dụng nó.

Nếu bạn muốn thử nghiệm trải nghiệm người dùng

Vì sự thống nhất chỉ là một công cụ với một loạt các vật lý, hoạt hình và kết xuất 3D thời gian thực, nên đây cũng là một không gian tuyệt vời để tạo ra các nguyên mẫu tương tác hoàn chỉnh cho các nghiên cứu UX.

Unity có hỗ trợ đầy đủ cho VR và AR và do đó có thể là một công cụ tuyệt vời để khám phá kiến ​​trúc, tự động hóa và mô phỏng với khách hàng.

Các phần của bài viết này

  • Tại sao Unity?
  • Cửa sổ trình soạn thảo Unity
  • Đối tượng trò chơi Unity
  • Các thành phần nội trang hợp nhất
  • Tạo các thành phần tùy chỉnh
  • Cấu trúc của một MonoBehaviour
  • Thao tác với GameObjects
  • Raycasting
  • Phát hiện va chạm
  • Các tính năng tiên tiến
  • Lời khuyên cho người mới
  • Tài nguyên và Cộng đồng tốt đẹp
  • Phần kết luận

Cửa sổ trình soạn thảo Unity

Cửa sổ trình soạn thảo được chia thành một vài phần. Chúng tôi sẽ đề cập đến vấn đề này rất ngắn gọn vì chúng tôi sẽ đề cập đến nó liên tục trong suốt bài viết. Nếu bạn quen thuộc với điều này rồi chỉ cần bỏ qua quá khứ!

Chế độ xem cảnh: Cho phép đặt và di chuyển các GameObject trong Chế độ xem cảnh trò chơi: Xem trước cách người chơi sẽ nhìn thấy cảnh từ máy ảnh Người kiểm tra: Cung cấp thông tin chi tiết về GameObject đã chọn trong cảnh. Nội dung / Dự án: Tất cả các prefabs, kết cấu, mô hình, tập lệnh, v.v. được lưu trữ ở đây Cấu trúc phân cấp: Cho phép lồng ghép và cấu trúc các GameObject trong khung cảnh

Bây giờ chúng ta bắt đầu tốt!

Đối tượng trò chơi Unity

GameObjects là gì

GameObjects là khối xây dựng cốt lõi của mọi thứ trong công cụ trò chơi Unity. Cái tên gần như cho nó đi:

Bất cứ thứ gì bạn đặt trong một cảnh trong Unity phải được bao bọc trong một 'đối tượng trò chơi'.

Nếu bạn đã có nền tảng thiết kế web, bạn có thể nghĩ về GameObjects là một phần tử rất giống! Các thùng chứa cực kỳ nhàm chán, nhưng có khả năng mở rộng cao để tạo ra các chức năng hoặc hình ảnh phức tạp.

Theo nghĩa đen, mọi thứ từ hiệu ứng hạt, máy ảnh, trình phát, yếu tố giao diện người dùng,… (danh sách tiếp tục) đều là GameObject.

Tạo hệ thống phân cấp

Giống như phát triển web, GameObject cũng là một vùng chứa. Cũng giống như bạn lồng các s để tạo ra các bố cục hoặc sự trừu tượng đa dạng và mong muốn, bạn có thể muốn làm điều tương tự với các đối tượng trò chơi.

Logic đằng sau việc lồng các đối tượng trò chơi cũng giống như phát triển web, tôi sẽ đưa ra một vài ví dụ…

Lộn xộn & Hiệu quả

Tương tự web: Bạn có nhiều phần tử tương tự có thể được tạo động nhanh chóng để đáp ứng tương tác của người dùng và muốn giữ chúng gọn gàng. Dịch Unity: Bạn đang xây dựng một bản sao Minecraft và bạn có vô số khối trong cảnh, bạn cần thêm và xóa 'các khối' của khối khỏi cảnh vì lý do hiệu suất. Do đó, việc chúng được cấp cha mẹ cho một GameObject trống cho mỗi đoạn có ý nghĩa, vì xóa đoạn cha mẹ sẽ xóa tất cả các khối con.

Định vị

Tương tự Web: Bạn muốn giữ vị trí của nội dung chứa 'tương đối' với vùng chứa chứ không phải với trang web. Unity Dịch: Bạn đã tạo ra một loạt các máy bay không người lái trợ giúp bay lượn xung quanh người chơi. Bạn thực sự không muốn viết mã để bảo họ đuổi theo người chơi, vì vậy thay vào đó bạn tạo họ như con của đối tượng trò chơi người chơi.

Các thành phần nội trang hợp nhất

Mô hình thành phần tác nhân

GameObjects riêng của chúng khá vô dụng - như chúng ta đã thấy chúng chỉ là những thùng chứa. Để thêm chức năng cho chúng, chúng ta phải thêm các thành phần, về cơ bản là các tập lệnh được viết bằng C # hoặc Javascript.

Unity hoạt động dựa trên mô hình Thành phần diễn viên, nói một cách đơn giản GameObjects là tác nhân và Thành phần là tập lệnh của bạn.

Nếu bạn đã viết bất kỳ ứng dụng web nào trước đây, bạn sẽ quen với ý tưởng tạo các thành phần nhỏ có thể tái sử dụng như nút, thành phần biểu mẫu, bố cục linh hoạt có nhiều lệnh khác nhau và thuộc tính có thể tùy chỉnh. Sau đó, lắp ráp các thành phần nhỏ này thành các trang web lớn hơn.

Ưu điểm lớn của phương pháp này là mức độ tái sử dụng và các kênh giao tiếp được xác định rõ ràng giữa các phần tử. Tương tự như vậy trong quá trình phát triển trò chơi, chúng tôi muốn giảm thiểu nguy cơ xảy ra các tác dụng phụ ngoài ý muốn. Các lỗi nhỏ có xu hướng vượt khỏi tầm kiểm soát nếu bạn không cẩn thận và rất khó gỡ lỗi. Do đó, việc tạo ra các thành phần nhỏ, mạnh mẽ và có thể tái sử dụng là rất quan trọng.

Các thành phần tích hợp chính

Tôi nghĩ đã đến lúc xem một vài ví dụ về các thành phần tích hợp được cung cấp bởi Unity Games engine.

  • MeshFilter: Cho phép bạn gán vật liệu cho lưới 3D vào GameObject
  • MeshRender: Cho phép bạn gán vật liệu cho Lưới 3D
  • [Hộp | Mesh] Collider: Cho phép phát hiện GameObject trong khi va chạm
  • Rigidbody: Cho phép mô phỏng vật lý thực tế hoạt động trên GameObjects với Lưới 3d và sẽ kích hoạt các sự kiện phát hiện trên máy va chạm hộp
  • Ánh sáng: Chiếu sáng các phần của cảnh của bạn
  • Máy ảnh: Xác định chế độ xem của trình phát được gắn vào GameObject
  • Các thành phần Canvas UI khác nhau để hiển thị GUI

Còn nhiều thứ khác nữa, nhưng đây là những thứ chính bạn cần làm quen. Một mẹo là bạn có thể truy cập tất cả các tài liệu cho những tài liệu này thông qua tài liệu hướng dẫn thống nhất và tài liệu tham khảo tập lệnh ngoại tuyến cho dù bạn ở đâu:

Tạo các thành phần tùy chỉnh

Các thành phần cấu tạo chủ yếu kiểm soát vật lý và hình ảnh, nhưng để thực sự tạo ra một trò chơi, bạn sẽ cần phải chấp nhận đầu vào của người dùng và thao tác các thành phần tiêu chuẩn đó cũng như chính GameObjects.

Để bắt đầu tạo các thành phần, hãy vào GameObject mong muốn> Thêm thành phần> nhập tên thành phần mới của bạn vào thanh tìm kiếm> tập lệnh mới (c #).

Theo khuyến nghị chung, tôi khuyên bạn không nên sử dụng Javascript trong Unity. Nó đã không được cập nhật với tất cả những thứ tuyệt vời đi kèm với ES6 và hầu hết những thứ nâng cao hơn đều dựa vào những thứ C # được chuyển sang Javascript… Nó chỉ trở thành một công việc khổng lồ theo kinh nghiệm của tôi.

Cấu trúc của một MonoBehaviour

Chức năng chính

Tất cả các thành phần kế thừa từ Lớp MonoBehaviour. Nó bao gồm một số phương pháp tiêu chuẩn, quan trọng nhất:

  • void Start () được gọi bất cứ khi nào một đối tượng chứa script được khởi tạo trong cảnh. Điều này hữu ích bất cứ lúc nào chúng ta muốn thực hiện một số mã khởi tạo, ví dụ. đặt thiết bị của người chơi sau khi chúng xuất hiện trong một trận đấu.
  • void Update () được gọi là mọi khung. Đây là nơi mà phần lớn mã liên quan đến đầu vào của người dùng sẽ chuyển đến, cập nhật các thuộc tính khác nhau như chuyển động của người chơi trong cảnh.

Biến kiểm tra

Thường thì chúng ta muốn làm cho các thành phần linh hoạt nhất có thể. Ví dụ: tất cả các loại vũ khí có thể có sát thương, tốc độ bắn, has_sight khác nhau, v.v. Trong khi tất cả các loại vũ khí về cơ bản giống nhau, chúng tôi có thể muốn tạo ra các biến thể khác nhau một cách nhanh chóng thông qua trình chỉnh sửa thống nhất.

Một ví dụ khác mà chúng tôi có thể muốn làm điều này là khi tạo một thành phần giao diện người dùng theo dõi chuyển động chuột của người dùng và đặt con trỏ vào khung nhìn. Ở đây, chúng ta có thể muốn kiểm soát độ nhạy của con trỏ đối với các chuyển động (nếu người dùng đang sử dụng cần điều khiển hoặc gamepad so với chuột máy tính). Vì vậy, sẽ có ý nghĩa nếu các biến này dễ dàng thay đổi cả trong chế độ chỉnh sửa và cũng thử nghiệm với chúng trong thời gian chạy.

Chúng ta có thể làm điều này một cách dễ dàng bằng cách khai báo chúng dưới dạng các biến công khai trong phần thân của thành phần.

Chấp nhận đầu vào của người dùng

Tất nhiên, chúng tôi muốn trò chơi của mình phản hồi ý kiến ​​của người dùng. Các cách phổ biến nhất để làm điều đó là sử dụng các phương thức sau trong hàm Update () của một thành phần (hoặc bất kỳ nơi nào khác mà bạn thích):

  • Input.GetKey (KeyCode.W) Trả về True W Phím đang bị nhấn giữ
  • Input.GetKeyDown (KeyCode.W) Trả về giá trị True khi nhấn phím W lần đầu tiên
  • Input.GetAxis (“Dọc”), Input.GetAxis (“Ngang”) Trả về giữa -1,1 chuyển động nhập chuột

Thao tác với GameObjects

Khi chúng tôi có thông tin người dùng nhập, chúng tôi muốn GameObjects trong cảnh của chúng tôi phản hồi. Chúng tôi có thể xem xét một số loại phản hồi:

  • Dịch, Xoay, Quy mô
  • Tạo GameObjects mới
  • Gửi tin nhắn đến GameObjects / thành phần hiện có

Sự biến đổi

Tất cả các GameObject đều có thuộc tính chuyển đổi cho phép thực hiện nhiều thao tác hữu ích khác nhau trên đối tượng trò chơi hiện tại.

Các phương pháp trên khá tự giải thích, chỉ cần lưu ý rằng chúng tôi sử dụng gameObject viết thường để tham chiếu đến GameObject sở hữu phiên bản cụ thể này của thành phần.

Nói chung, bạn nên sử dụng [Vị trí, Xoay] cục bộ thay vì vị trí / xoay toàn cục của một đối tượng. Điều này thường giúp dễ dàng di chuyển các đối tượng theo cách có ý nghĩa, vì trục không gian cục bộ sẽ được định hướng và tập trung vào đối tượng chính chứ không phải gốc thế giới và các hướng x, y, z.

Nếu bạn cần chuyển đổi giữa không gian cục bộ và thế giới (trường hợp này thường xảy ra), bạn có thể sử dụng như sau:

Như bạn có thể tưởng tượng, có một số đại số tuyến tính khá đơn giản đằng sau điều này được gợi ý bởi 'Inverse' trong tên phương pháp.

Tạo GameObjects mới

Vì GameObjects về cơ bản là tất cả mọi thứ trong cảnh của bạn, bạn có thể muốn tạo chúng một cách nhanh chóng. Ví dụ: nếu người chơi của bạn có một số loại bệ phóng đạn, bạn có thể muốn có thể tạo đạn khi đang bay có logic đóng gói riêng của chúng để bay, gây sát thương, v.v.

Đầu tiên chúng ta cần giới thiệu khái niệm về Nhà lắp ghép . Chúng tôi có thể tạo những thứ này đơn giản bằng cách kéo bất kỳ GameObject nào trong hệ thống phân cấp cảnh vào thư mục nội dung.

Về cơ bản, điều này lưu trữ một mẫu của đối tượng mà chúng ta vừa có trong cảnh của chúng ta với tất cả các cấu hình giống nhau.

Khi chúng ta có các thành phần nhà lắp ghép này, chúng ta có thể gán chúng cho các biến kiểm tra (như chúng ta đã nói trước đó) trên bất kỳ thành phần nào trong cảnh, để chúng ta có thể tạo các GameObject mới như được chỉ định bởi nhà lắp ghép bất kỳ lúc nào.

Sau đó, chúng tôi có thể thực hiện 'khởi tạo' nhà lắp ghép và điều khiển nó đến vị trí mong muốn trong cảnh và thiết lập các mối quan hệ mẹ cần thiết.

Truy cập GameObjects và Components khác

Thông thường, chúng ta cần giao tiếp với các GameObject khác cũng như các thành phần liên quan của chúng. Khi bạn có tham chiếu đến một đối tượng trò chơi, điều này khá đơn giản.

ComponentName comp = some_game_object.GetComponent ();

Sau đó, bạn có thể truy cập bất kỳ phương thức / biến công khai nào của thành phần để thao tác với GameObject. Đây là một chút đơn giản, tuy nhiên việc thu thập tham chiếu đến GameObject có thể được thực hiện theo một số cách…

Truy cập thông qua biến kiểm tra viên

Đây là đơn giản nhất. Chỉ cần tạo một biến công khai cho GameObject, như chúng tôi đã trình bày trước đó với các prefabs và kéo và thả thủ công vào thành phần thông qua trình kiểm tra. Sau đó truy cập vào biến như trên.

Truy cập thông qua gắn thẻ

Chúng tôi có thể gắn thẻ GameObjects hoặc prefabs thông qua trình kiểm tra và sau đó sử dụng các chức năng tìm đối tượng trò chơi để định vị các tham chiếu đến chúng.

Điều này được thực hiện đơn giản như dưới đây.

GameObject some_game_object = GameObject.FindGameObjectWithTag (“Gạch”);

Truy cập thông qua chuyển đổi

Nếu chúng ta muốn truy cập các thành phần trong đối tượng cha nào đó, chúng ta có thể dễ dàng thực hiện việc này thông qua thuộc tính biến đổi.

ComponentName comp = gameObject.transform.parent.GetComponent ();

Truy cập qua SendMessage

Ngoài ra, nếu chúng ta muốn gửi thông báo đến nhiều thành phần khác hoặc muốn gửi thông báo đến một đối tượng nằm trong cấu trúc phân cấp lồng nhau, chúng ta có thể sử dụng các hàm gửi thông báo, chúng chấp nhận tên của hàm theo sau là các đối số.

gameObject.SendMessage (“MethodName”, params); // Phát messagegameObject.SendMessageUpwards (“MethodName”, params); // Chỉ nhận được bởi các thành phần được lồng ở trên.

Raycasting

Bạn có thể đã nghe nói về điều này trước đây khi mọi người so sánh các trò chơi FPS là 'dựa trên vật lý' hoặc 'dựa trên tia'. Raycasting về cơ bản giống như có một con trỏ laser, khi nó tiếp xúc với một 'máy va chạm' hoặc 'vật cứng', nó sẽ trả về một 'cú đánh' và trả lại các chi tiết của đối tượng.

Có hai tình huống mà điều này có ích (Có thể còn nhiều thứ hơn):

  1. Nếu bạn đang thiết kế một hệ thống vũ khí cho một trò chơi, bạn có thể sử dụng raycasting để phát hiện đòn đánh và thậm chí tùy chỉnh độ dài của tia để các vật phẩm cận chiến chỉ 'trúng đích' ở phạm vi ngắn
  2. Tạo một tia từ con trỏ chuột đến một điểm trong không gian 3d, tức là nếu bạn muốn người dùng có thể chọn đơn vị bằng chuột của họ trong một trò chơi chiến lược.

Như bạn có thể thấy, mã cho điều này liên quan nhiều hơn một chút. Điều quan trọng cần hiểu là để truyền một tia tới vị trí con chuột đang trỏ trong không gian 3 chiều thì cần có phép chuyển đổi ScreenPointToRay. Lý do cho điều này là máy ảnh đang kết xuất không gian 3D dưới dạng khung nhìn 2d trên màn hình máy tính xách tay của bạn, do đó, tự nhiên có một phép chiếu liên quan để chuyển trở lại 3D.

Phát hiện va chạm

Trước đó chúng ta đã đề cập đến các thành phần Collider và Rigidbody có thể được thêm vào một đối tượng. Quy tắc cho va chạm là một vật thể trong vụ va chạm phải có thân cứng và vật kia là vật va chạm (hoặc cả hai đều có cả hai thành phần). Lưu ý rằng khi sử dụng raycasting, các tia sẽ chỉ tương tác với các vật thể có gắn các bộ phận của máy va chạm.

Sau khi thiết lập bên trong bất kỳ thành phần tùy chỉnh nào được gắn vào đối tượng, chúng ta có thể sử dụng các phương thức OnCollisionEnter, OnCollisionStay và OnCollisionExit để phản hồi các va chạm. Khi chúng tôi có thông tin va chạm, chúng tôi có thể yêu cầu GameObject chịu trách nhiệm và sử dụng những gì chúng tôi đã học trước đó để tương tác với các thành phần gắn liền với nó.

Một điều cần lưu ý là các vật thể cứng cung cấp vật lý như lực hấp dẫn cho các vật thể, vì vậy nếu bạn muốn tắt tính năng này, bạn sẽ cần kiểm tra is_kinematic bật.

Các tính năng tiên tiến

Chúng tôi sẽ không đi sâu vào vấn đề này bây giờ nhưng có lẽ trong một bài viết trong tương lai - chỉ để bạn biết rằng chúng tồn tại.

Tạo GUI

Unity có một công cụ giao diện người dùng hoàn chỉnh để tạo ra GUI cho trò chơi của bạn. Nhìn chung, các thành phần này hoạt động khá giống với phần còn lại của động cơ.

Mở rộng trình soạn thảo Unity

Unity cho phép bạn thêm các nút tùy chỉnh vào trình kiểm tra của mình để bạn có thể ảnh hưởng đến thế giới trong chế độ chỉnh sửa. Ví dụ: để giúp xây dựng thế giới, bạn có thể phát triển một cửa sổ công cụ tùy chỉnh để xây dựng các ngôi nhà mô-đun.

Hoạt hình

Unity có hệ thống hoạt ảnh dựa trên đồ thị cho phép bạn pha trộn và điều khiển các hoạt ảnh trên các đối tượng khác nhau, chẳng hạn như người chơi thực hiện hệ thống hoạt ảnh dựa trên xương.

Vật liệu và PBR

Unity chạy công cụ kết xuất dựa trên vật lý cho phép chiếu sáng thời gian thực và vật liệu thực tế. Thực tế là bạn sẽ cần phải học mô hình 3d trước hoặc sử dụng các mô hình do người khác tạo và tối ưu hóa trước khi bạn làm được điều này, để tạo ra những thứ thực sự trông đẹp mắt.

Lời khuyên cho người mới

Nếu bạn đang lên kế hoạch viết trò chơi đầu tiên của mình, đừng đánh giá thấp sự phức tạp và thời gian cần thiết để viết ngay cả những trò chơi nhỏ nhặt nhất. Hãy nhớ rằng hầu hết các trò chơi ra mắt trên Steam đều có đội ngũ làm việc toàn thời gian trong nhiều năm!

Chọn một khái niệm đơn giản và chia nó thành các cột mốc nhỏ có thể đạt được. Bạn nên tách trò chơi của mình thành các thành phần nhỏ độc lập nhất có thể, vì bạn ít có khả năng gặp lỗi hơn nhiều nếu bạn giữ các thành phần đơn giản hơn là các khối mã nguyên khối.

Trước khi bạn bắt đầu và viết bất kỳ mã nào cho bất kỳ phần nào trong trò chơi của mình, hãy nghiên cứu xem người khác đã làm gì trước đây để giải quyết vấn đề tương tự - rất có thể họ sẽ có một giải pháp mượt mà hơn nhiều.

Tài nguyên và Cộng đồng tốt đẹp

Thiết kế trò chơi có một trong những cộng đồng tốt nhất trong số đó và có vô số chuyên gia có tay nghề cao trong ngành đưa nội dung lên miễn phí hoặc không có gì. Đó là một lĩnh vực yêu cầu Nhà tạo mẫu 3d, Nghệ sĩ khái niệm, Nhà thiết kế trò chơi, Lập trình viên, v.v. Tôi đã liên kết một số tài nguyên chung tuyệt vời mà tôi đã xem qua cho từng trường sau đây:

Nghệ thuật khái niệm

  • Trường thiết kế Feng Zhu (Hướng dẫn nghệ thuật khái niệm dài hơn 90 giờ)
  • Tyler Edlin Art (Cộng đồng nghệ thuật BST tuyệt vời với phản hồi từ các chuyên gia về các thử thách hàng tháng)
  • Art Cafe (Phỏng vấn và Hội thảo với các Nghệ sĩ Ý tưởng Nổi tiếng)
  • Trent Kaniuga (Người vẽ tranh minh họa và họa sĩ 2D cũng đang làm trò chơi của riêng mình)

Mô hình 3D

  • CG Cookie (Kiến thức cơ bản về mô hình lưới tốt nhất trong Máy xay sinh tố từ trước đến nay, họ có vô số nội dung tuyệt vời khác cho máy xay sinh tố)
  • Tor Frick (Nhà tạo mẫu & Điêu khắc bề mặt cứng trong Máy xay sinh tố)
  • Gleb Alexandrov (Hướng dẫn dựng hình mạnh mẽ ngắn trong Máy xay sinh tố)

Thiết kế trò chơi

  • DoubleFine Amnesia Fortnight (GameDevs thực hiện hackathon trong 2 tuần và ghi lại toàn bộ quá trình thiết kế của họ)
  • GameMakers Toolkit (Kiểm tra các Nguyên tắc Thiết kế Trò chơi)

Lập trình

  • Anh hùng thủ công (Viết một trò chơi và công cụ từ đầu trong C)
  • Jonathan Blow (nhà phát triển độc lập phát trực tiếp quá trình phát triển trò chơi của mình)
  • Brackeys (Hướng dẫn hợp nhất tốt đẹp)

Phần kết luận

Hy vọng các bạn thích hướng dẫn này! Tôi làm một chút công việc thiết kế đồ họa cũng như các nguyên mẫu trò chơi và giao diện người dùng, vì vậy hãy xem danh mục đầu tư của tôi ! Tôi cũng được liên kết trong .

Danh mục đầu tư| LinkedIn