Bạn có niềm đam mê trở thành lập trình viên game chuyên nghiệp? Bạn đang băn khoăn không biết nên đến với nền tảng nào để bắt đầu hành trình của mình? Hãy đến với lập trình game trên Unity – Engine phổ biến nhất trong thế giới game và mang đến cơ hội nghề nghiệp ngoài sức tưởng tượng.

Lập trình Unity là gì?

lap-trinh-unity-la-gi

Lập trình unity là gì?

Sơ lược vềUnity

Tìm hiểu vềlập trình Unity là gì một chút nhé bạn. Unity là một phần mềm làm game đa nền tảng được phát triển bởi Unity Technologies chủ yếu để phát triển video game cho máy tính, consoles và điện thoại. Phát triển game bằng cách kéo thả (drag and drop). Lần đầu tiên nó được công bố chạy trên hệ điều hành OS X, tại Apple’s Worldwide Developers Conference vào năm 2005, đến nay đã mở rộng ra 27 nền tảng.

Tính đến hiện tại, 6 phiên bản chính của phần mềm này đã được phát hành. Tại triển lãm WWDC năm 2006, Unity đã vinh dự được Apple đã trao thưởng giải Best Use of Mac OS X Graphics.

Lập trình Unity là gì?

Unity hỗ trợ đồ họa 2D và 3D, được lập trình bằng 3 ngôn ngữ là C#, Boo và UnityScript. Ngôn ngữ chính thức dành cho lập trình viên Unity hiện nay là C#.

Tại sao Unity được thiết kế để phát triển game bằng cách kéo thả mà chúng ta còn phải biết lập trình trên đó nữa? Câu trả lời nằm ở hạn chế của phần kéo thả đó. Mình lấy 1 ví dụ dễ hiểu như sau:

Đây là trò chơi bắn máy bay đơn giản. Ngoài việc kéo thả các giao diện nút bấm cho main menu, đặt nhân vật, khung nền… vào khung hiển thị có thể thực hiện bằng cách drag and drop. Nhiều hiệu ứng động lặp đi lặp lại như bầu trời của nền sẽ đi lùi liên tục để tạo hiệu ứng máy bay đang di chuyển tới, đạn bắn, vụ nổ…, bạn không thể cứ pick 1 đối tượng rồi thả liên tục lên trên đó hoặc canh chỉnh bằng tay mãi được. Đó là những hiệu ứng tự động, và để tự động, cách duy nhất là bạn phải lập trình.

Và để lập trình được với Unity, những điều kiện tiên quyết bạn phải có là:

Cách thức xây dựng, vận hành của Game trên Unity. 

Cach-thuc-xay-dung-van-hanh-cua-Game-tren-Unity

Cách thức xây dựng, vận hành của Game trên Unity

Bạn phải hiểu được cách thức tương tác với game trên Unity thì mới làm việc với nó được. Những khái niệm như: Giao diện của Unity; Các khái niệm trong Unity như: Project, Assets, Scene, Prefabs… Trong bài viết này, mình chủ yếu hướng các bạn vào phần lập trình Unity nên mình chỉ trình bày một số khái niệm như:

GameObject: Một đối tượng cụ thể trong game gọi là một game object. Ví dụ: nhân vật, đồ vật…

Component: Một GameObject sẽ có nhiều thành phần cấu tạo nên nó như là hình ảnh (sprite render), tập hợp các hành động (animator), mã điều khiển (script)… Đây là những functions kế thừa từ MonoBehaviour class và có thể ghi đè trong các class con để thực hiện các sự kiện quan trọng nào đó. Hai sự kiện phổ biến nhất trong một Component là:

  • Start() chạy một lần duy nhất trước hàm update.
  • Update() là một vòng lặp chạy liên tục. Nó được gọi một lần cho mỗi khung hình (thường là 25 khung hình mỗi giây). mỗi thứ như vậy gọi là một component của GameObject. 

Script: Script là tập tin chứa các đoạn mã nguồn, dùng để khởi tạo và xử lý các đối tượng trong game.Trong Unity có thể dùng C#, Java Script, BOO để lập trình Script. Bạn có thể điều chỉnh bất cứ thuộc tính của component khác thông qua script. Có thể nói script như là ‘não’ người, nó có thể điều khiển các bộ phận còn lại.

Không khác gì những ứng dụng được viết bằng ngôn ngữ C# khác. Cấu trúc của một đoạn mã bao gồm 3 thành phần chính: 

Biến (variable) chứa bất kì giá trị kiểu số hoặc kiểu kí tự.

Hàm (function) dùng để thực thi một việc gì đó thông thường thực thi cùng biến và các biểu thức toán học. Các function trong Unity được phân thành 3 nhóm: liên quan đến game – game relate (như system, input, network), đối tượng đặc trưng – object specific, người dùng định nghĩa – user defined.

Chú thích (comment) sẽ bị chương trình dịch bỏ qua khi chạy chương trình, nó chỉ cho phép người dùng ghi chú lại những gì người dùng cần nhớ hoặc để vô hiệu hóa dòng mã lệnh nào đó.

Bạn lưu ý rằng: một script chỉ hoạt động được khi nó là một thành phần của một GameObject nào đó.

Lập trình C#: Cái này là bắt buộc nhé vì C# là ngôn ngữ được dùng phổ biến nhất trong cộng đồng Unity. Ngoài ra như mình nói, Unity có hai loại engine hỗ trợ 2D và 3D. Bạn nên định hướng sẽ “thân” với loại nào hơn. Thường là các starter nên bắt đầu với Unity 2D.

Lập trình Unity 2D là gì?

lap-trinh-unity-2D-la-gi

Lập trình unity 2D là gì?

Công cụ cần cho lập trình Unity 2D

Trước hết, để lập trình Unity 2D thì bạn phải tải Unity 2D đã. Download và cài đặt cả 2 Engine 2D và 3D tích hợp trong 1 software tại đường dẫn:

http://unity3d.com/unity/download

Kế đến là công cụ soạn thảo. Unity đã tích hợp một editor và IDE có tên là MonoDevelop để bạn soạn thảo. Để mở các file source của bạn, hãy click đúp vào chúng trong Project của bạn. Khi bạn tạo mới hay thay đổi hãy save lại và nó sẽ tự động biên dịch, các error hoặc warning sẽ được tìm thấy nếu có và sẽ được liệt kê trong unity (trong tag Console). Error có màu đỏ và warning là màu vàng.

Mặc định Unity đã tạo giúp bạn những lệnh sau:

  • MonoBehaviour class: Đây là class cho script của bạn tên class cũng là tên script bạn đặt.
  • Thư viện riêng của Unity: Unity EngineSystem Collection (Đừng tự bỏ cái nào nhé)
  • Hai funtion được tạo sẵn là Start() và Update().

Xây dựng chương trình Unity 2D đầu tiên của bạn

Mình sẽ lấy ví dụ tạo hiệu ứng dịch chuyển hình nền tự động liên tục từ trên xuống (gọi là Scrolling Background) nhé. Đây là hiệu ứng rất phổ biến trong các game 2D mà trò chơi Planes như mình đã nói là 1 ví dụ.

Bước thứ nhất là tạo Object. Để đỡ mất thời gian, mình mượn luôn bộ Assets của bạn đó bao gồm tất tần tật âm thanh, hình ảnh dùng cho game, các object như: máy bay lục, máy bay xanh dương, thiên thách, bầu trời, vụ nổ… Các bạn tải về ở đây, sau đó tạo các thư mục lưu trữ, copy chúng vào như hình nhé.

Hiệu ứng scrolling background chỉ dùng đến object là ảnh bầu trời vũ trụ có tên là Gameplay BG lưu trữ trong thư mục Assets/Sprite.

Nếu chỉ drag and drop vào khung hình thì ảnh bầu trời này luôn đứng yên. Để tạo hiệu ứng scroll liên tục từ trên xuống dưới, mình sẽ dùng 1 Object 3D là quad để dán ảnh bầu trời này lên, sau đó lập trình để quad này xoay với tốc độ nhất định từ trên xuống sẽ thành hiệu ứng scrolling background.

Nhấp chọn GameObject 🡪 3D Object 🡪 Quad.

Thế là bạn đã tạo 1 Object 3D là quad.

Sau đó ta “tô màu” khối cầu này bằng hình bầu trời nhé. Vào thư mục Assets 🡪 tạo thư mục Materials 🡪 Vảo thư mục Materials 🡪 Chuột phải 🡪 Create 🡪 Material.

Một vài tinh chỉnh sơ bộ ở cửa sổ Inspector:

Bạn drag file Background vừa tạo drop vào khung Element như hình để apply Material của quad vào Components.

Tạo một project gọi là BackGroundQuad:

Các bạn nhìn xuống cửa sổ … vào lại thư mục Materials và chọn thiết bị sẽ triển khai. Tùy dự án này sẽ chạy ở đâu, nếu trên điện thoại bạn làm như thế này.

Bấm vào New texture (ô vuông đen to bên góc phải đấy), bạn sẽ thấy 1 của sổ hiện ra để chọn texture cho quad, bấm hình bầu trời của bạn nhé. Thế là bạn đã gắn bầu trời vào quad xong.

Bước tạo Object đã hoàn tất.

Giờ là bước quan trọng nhất: lập trình. Bạn vào thư mục Assets 🡪 Script 🡪 Tạo 1 thư mục con tên BG. Đây sẽ là thư mục lưu file lập trình. Trong thư mục BG tạo script sau: BGScaler được viết bằng C#

Drag file vừa tạo drop vào cửa sổ Inspector.

Bạn nhấp vào file sẽ thấy được giao diện viết code Monodevelope. Nhập lệnh giống như trong hình vào nhé:

Mình sẽ giải thích chương trình:

Bắt đầu từ Start(), ngay khi chương trình bắt đầu chạy, những Component trong Unity sẽ được khởi tạo các dữ liệu y như những gì bạn viết trong đây:

Từ dòng 6 – dòng 10: Bạn sẽ khai báo 3 biến của Component để dùng là:

  • speed: Dùng để kiểm soát tốc độ scroll của quad.
  • offset: Độ dời. Vector2 ở đây là vector hai chiều (x, y) của khung offset nằm trong Material/Background khi bạn nhấp vào đấy. Số “2” tương ứng với index của offset trong khung (Vậy vector1 sẽ biểu diễn (x,y) của Tiling, thế thôi). Bạn khởi tạo x = 0, y = 0 cú pháp zero.
  • _mat: Khi tạo 3D Object quad thì thứ để Unity 2D nhận biết và hiển thị quad cho bạn xem chính là Material, bạn gán cho nó là biến _mat để dùng.

Dòng 14 là dòng với nội dung get Material mình vừa nói để làm việc. Để hiểu cú pháp, bạn đối chiếu với hình dưới:

_mat sẽ ánh xạ đến thành phần Materials nằm trong Component Renderer.

offset sẽ lấy độ dời của tấm ảnh (bằng hàm GetTextureoffset()) dựa trên _mat. Parameter _Maintext là tên của texture ảnh background trên quad.

Kế tiếp là Update(), từ các thời điểm giá trị bắt đầu trở về sau trong quá trình chạy nó sẽ liên tục cập nhật và thay đổi giá trị này theo như những gì bạn viết trong hàm này:

Dòng 20: biến _offset sẽ thay đổi theo chiều trục y tức background của _mat sẽ dời từ trên xuống dưới, tốc độ thay đổi bằng giá trị thực của Component speed nhân với Time.deltaTime là một hàm làm smooth hiệu ứng dời của Object.

Dòng 21: Ở start(), bạn đã get Material của quad để dùng trạng thái đầu tiên của nó cho chương trình xử lý thì để quad liên tục được cập nhật trạng thái mới sau khi dời, bạn sẽ set tất cả thay đổi đó của _offset trở lại cho quad để hiệu ứng này tác động trở lại quad, thông qua SetTextureoffset() cùng hai parameter _Maintext và _offset.

Thế là xong, bạn nhấp vào run, truyền giá trị speed và sửa lỗi nếu có.

Tài liệu học tập và cộng đồng lập trình game bằng Unity

Engine Unity cực kỳ nổi tiếng nên tài liệu rất nhiều nhé, mình sẽ chia sẻ một số tài liệu tham khảo cho Unity 2D:

Tài liệu:

Bộ tài liệu lập trình Game Mobile Unity 2D tiếng Việt.

Unity 2D game development.

Unity 4.3 2D Tutorial: Getting Started.

Cộng đồng:

Forum Unity: https://forum.unity.com/.

Answer Unity: https://answers.unity.com.

Liệu mình có cơ hội lập nghiệp với Unity 2D không?

co-hoi-nghe-nghiep-voi-lap-trinh-unity

Cơ hội nghề nghiệp với lập trình Unity

Câu hỏi này chắc hơi có gì đó thừa nhỉ. Cứ nhìn các ứng dụng game liên tục được ra mắt, chào đón nồng nhiệt bởi giới trẻ, thị trường game luôn nhộn nhịp, các hãng game cả ứng dụng hoặc không ứng dụng Unity ganh đua, sáng tạo ra các loại game mới để thu hút người chơi là chúng ta cũng hiểu cơ hội cho các game developer sáng sủa như thế nào, kể cả lập trình viên game unity 2d.

Các công ty Việt Nam cũng cho biết nhu cầu nguồn lực cho lập trình, phát triển game như Unity là rất lớn nhưng số người đáp ứng hoặc chí ít là theo mảng lập trình game là rất thấp. Có nhiều công ty sẵn sàng mức lương 20.000.000 đ – 40.000.000 đ cho những người kinh nghiệm 1 – 2 năm và sẵn sàng train từ a – z cho những fresher có kiến thức nền tảng về lập trình game với mức lương khá cao.

Nhu cầu rất nhiều nhưng nhân lực thực tế rất thiếu đủ để thấy lập trình viên game như Unity Developer là có giá thế nào rồi nhỉ. Còn chần chờ gì nữa mà không đến với lập trình Unity, vì ở phía xa con đường khá rộng rãi đó là cơ hội nghề nghiệp và các gamer hàng ngày đón chờ game bom tấn đang vẫy gọi bạn đấy.

Leave a comment

Your email address will not be published. Required fields are marked *