Gaming Fundamentals: Nền Tảng Cho Mọi Game Developer

Gaming Fundamentals: Nền Tảng Cho Mọi Game Developer

First step to the World

Hầu như mọi người đều biết đến lập trình game và có nhiều bạn muốn trở thành game developer và hầu hết mọi người đều gặp vấn đề NÊN BẮT ĐẦU TỪ ĐÂU và HỌC THẾ NÀO CHO HIỆU QUẢ? Khi bắt đầu vì không có nhiều trường đại học tại Việt Nam dạy làm game, nếu có thì cũng chỉ là 1 môn học điều này thật sự khó khăn vì tự học cho thành tài thật sự không dễ dàng. Và chuỗi bài viết này sẽ cố gắng để giúp các bạn giải quyết các vấn đề liên quan đến lập trình game.

Các công việc liên quan

Để có cái nhìn tổng quan, chúng ta nên bắt đầu bằng việc tìm hiểu nghề nghiệp và chức năng của chúng để biết ta sẽ phải làm những gì. Ở đây chúng ta chủ yếu tập trung vào những nghề nghiệp có liên quan đến lập trình

Programming

  • Game Developer: đây là tên gọi phổ biến nó giống như Software Engineer dùng để chỉ 1 người làm công việc phát triển game
  • Gameplay Programmer: lập trình ra cách game sẽ vận hành (tạo ra gameplay), phần lớn mọi người đều muốn trở thành Gameplay Programmer khi họ bắt đầu nghĩ về lập trình game.
  • Level UI Programmer: thiết kế giao diện và các tính năng liên quan cho game
  • Engine Programmer: tạo ra các game engine hỗ trợ cho việc làm game
  • Network Programmer: lập trình các tính năng (thực hiện ở phía máy chủ hoặc cần có internet) cho game online
  • ...

Other

  • Game Artist: thiết kế hình ảnh trong game
  • Game Music Artist: thiết kế âm thanh trong game
  • Game Designer: thiết kế nội dung và câu chuyện cho game
  • ...

Có rất nhiều công việc trong lĩnh vực game

Hành trang cần có

  • Để trở thành programmer thì chắc chắn bạn cần phải biết programming rồi, vậy programming cần học những gì?
    • Kĩ thuật lập trình (bắt buộc): ít nhất là bạn không cần phải tốn cả giờ để loay hoay với một lỗi do chính bản thân gây ra hoặc do bản thân không đủ kiến thức.
    • Thuật toán (bắt buộc): áp dụng thuật có thể cải thiện hiệu năng cho rất nhiều vấn đề, vậy chẳng phải game sẽ chạy mượt hơn? Yêu cầu để chạy game cũng sẽ được giảm xuống? Nhiều tính năng có thể được thực hiện? Vậy chẳng phải người chơi sẽ cảm thấy thích thú hơn và sinh viên nghèo vẫn có thể chơi được game? Bấy nhiêu đó lợi ích là đã đủ để bắt tay vào học thuật toán rồi. 
    • Programming Paradigm: là functional programming, object-oriented mà các bạn được học ở trường hay data-oriented mà Unity vừa giới thiệu trong thời gian qua. Programming Paradigm dùng để giảm thời gian và công sức cần để giải quyết 1 vấn đề nào đó vì mỗi vấn đề đều có tính chất khác nhau và có 1 cách tiếp cận riêng, lấy ví dụ như làm thơ haiku bằng tiếng việt vẫn được nhưng... nó cứ thế nào ấy. Các bạn có thể xem qua bài viết về Programming Paradigm để hiễu rõ hơn, mình cũng sẽ dành ra 1 bài viết để phân tích và hướng dẫn cách dùng các Programming Paradigm khác nhau để làm các tính năng cho game.
    • Hệ điều hảnh & Kiến trúc máy tính: những gì bạn làm sẽ được chạy trên 1 hệ điều hành, khi bạn nắm được kiến trúc máy tính, ưu điểm lớn nhất là bạn có thể biết cách để tối ưu code của mình vì code sẽ được biên dịch và không gì chắc chắn bằng việc kiểm tra những gì máy tính sẽ đọc được. Ngoài ra bạn cũng sẽ có 1 cái nhìn khác về lập trình đa nhiệm khi hiểu về hệ điều hành.
    • Mạng máy tính: cần thiết để các bạn làm game online, mặc dù hiện nay đã có các Framework hay Library hỗ trợ cho việc làm game online, mình vẫn khuyến khích các bạn học, hiểu và có thể áp dụng được, sẽ vô cùng có ích khi các bạn gặp phải vấn đề liên quan đến mạng.

=> Nền tảng lập trình vững chắc là điều cần thiết đối với mọi lập trình viên!

  • Bản chất của làm game là sáng tạo và mô phỏng thế giới, bạn có thể thấy có rất nhiều tựa game làm điều đó. Và những thứ có thể giúp ích là:
    • Toán, vật lý: bản chất của làm game là sáng tạo và mô phỏng thế giới và toán, vật lý là những thứ được dùng để giải thích các sự vật hiện  tượng. Bạn không nhất thiết phải biết toán để có thể lập trình, nhưng bạn sẽ có nhiều lựa chọn và giải pháp hơn nếu bạn biết toán.

Rồi làm sao biết đối phương tấn công từ hướng nào? (Nguồn: Dota 2)

    • Bất cứ thứ gì bạn học được: những thứ bạn học được đều có ích cho việc sáng tạo theo 1 cách nào đó, sáng tạo (có ích) đến từ việc bạn hiểu rõ 1 lĩnh vực và bạn có thể tận dụng những tính chất đã có để tạo ra sự đột phá.

=> Biết thôi chưa đủ, còn phải biết dùng nữa nên đừng học mỗi định nghĩa.

  • Công cụ sản xuất luôn luôn cần với bất kì lĩnh vực nào để gia tăng hiệu suất kể cả là công nghiệp lẫn nghiên cứu:
    • Game Engine: quen thuộc với 1 game engine có thể cải thiện đáng kể thời gian cần để làm game cũng như thử nghiệm các ý tưởng.
    • Công cụ xử lí ảnh, âm thanh: làm game không chỉ là coding, nó còn là việc thiết kế hình ảnh.
    • Text Editor, IDE: bạn cần giành phần lớn thời gian để suy nghĩ chứ không phải để viết, vậy nên cần phải làm quen với cái Text Editor như VSCode.
    • Git: bất kì lập trình viên nào cũng nên biết dùng Git, kể cả là dùng tool hay bash script và bạn cũng nên biết cách tận dụng git để giảm công việc quản lý source code và giảm rủi ro có thể gặp phải.

=> Công cụ phát huy khả năng dựa trên nền tảng của người dùng chúng.

Tổng kết

Khi bước chân vào 1 lĩnh vực nào đó, mọi người đều nên có nền tảng vững chắc trước khi bước lên cao hơn, việc rèn luyện nền tảng cho bản thân có thể khó khăn và nhàm chán nhưng sẽ có ích cho con đường phía trước.

Ở những phần sau, mình sẽ hướng dẫn cụ thể các bạn sử dụng các kĩ năng nền tảng mình đã đề cập ở trên để áp dụng vào việc tạo ra các tính năng của game, qua đó hi vọng các bạn có thể hiểu được ý nghĩa và có thể tự phát triển cũng như giải quyết các vấn đề của bản thân.

Tham khảo