Bối cảnh và vấn đề nghiên cứu

Khóa luận tốt nghiệp cử nhân ngành Công nghệ Thông tin (chuyên ngành Tin học) của nhóm tác giả Tất Tuấn Phong và Hoàng Phương, do TS. Trần Minh Triết và thầy Trần Duy Quang hướng dẫn tại Trường Đại học Khoa học Tự nhiên – Đại học Quốc gia TP.HCM, được thực hiện trong giai đoạn từ ngày 15/08/2010 đến ngày 20/02/2011.

Bối cảnh nghiên cứu xuất phát từ sự bùng nổ của hệ điều hành di động Android từ cuối năm 2008 đến đầu năm 2011. Dữ liệu thị trường từ công ty phân tích Canalys vào quý IV năm 2010 cho thấy Android đã có bước tăng trưởng vượt bậc so với hệ điều hành Symbian, đạt thị phần 32,6% trên toàn cầu (vượt Symbian 2,9%) với 33.000 thiết bị xuất xưởng. Nhiều hãng sản xuất ghi nhận mức tăng trưởng nhanh chóng như LG (4.474%), Samsung (709%), HTC (371%); trong đó HTC và Samsung chiếm gần 45% thị phần thiết bị chạy Android. Đến giữa tháng 1/2011, các phiên bản Android 2.x đã chiếm 87,4% thị phần (riêng Android 2.3 chiếm 0,4%). Cùng thời điểm, Android Market đạt 29.293 ứng dụng, trong đó ứng dụng trò chơi (game) chiếm tỷ trọng 19%.

Song song với việc nâng cấp phần cứng (màn hình cảm ứng đa điểm, cảm biến gia tốc), nhu cầu giải trí dịch chuyển từ đồ họa 2D sang đồ họa không gian 3 chiều (3D). Tuy nhiên, việc phát triển game 3D trên môi trường di động tại thời điểm này đối mặt với nhiều rào cản về phần cứng, khả năng tương thích và sự thiếu hụt các công cụ phát triển đa nền tảng tối ưu.

Mục tiêu và nhiệm vụ nghiên cứu của đề tài gồm 4 nội dung cụ thể:

  1. Nghiên cứu tổng quan về nền tảng Android và Game Engine Unity (phiên bản Unity 3.0 hỗ trợ Android ra đời tháng 9/2010).
  2. Khảo sát kiến trúc Unity và cách thức thiết lập ứng dụng trên môi trường Android.
  3. Xác định, phân tích các vấn đề kỹ thuật phát sinh khi xây dựng game 3D trên thiết bị di động (tải mô hình, hoạt họa, chiếu sáng, địa hình, giao diện, âm thanh, hiệu ứng hạt, va chạm) và đề xuất giải pháp kỹ thuật tương ứng.
  4. Thiết kế và xây dựng thử nghiệm một ứng dụng game chiến thuật 3D chơi theo lượt (turn-based strategy) chạy trên hệ điều hành Android.

Đối tượng nghiên cứu là engine Unity và các giải pháp lập trình đồ họa game 3D. Phạm vi nghiên cứu giới hạn trên hệ điều hành Android phiên bản 2.x, triển khai thử nghiệm trên thiết bị di động với cấu hình đa giác thấp và ngôn ngữ lập trình C#.

Cơ sở lý thuyết và công nghệ nền tảng

Đề tài tập trung vào việc nghiên cứu công nghệ game engine đa nền tảng và môi trường thực thi trên Android. Tác giả đã tiến hành khảo sát và so sánh bốn game engine 3D hỗ trợ Android phổ biến tại thời điểm nghiên cứu:

Game Engine Bản quyền Ngôn ngữ Script Ưu điểm chính Hạn chế ghi nhận
jPCT-AE Miễn phí Java Nhỏ gọn, chuyển đổi trực tiếp từ bản jPCT Tính năng hạn chế, ít công cụ hỗ trợ
libGDX Mã nguồn mở Java / C++ (NDK) Tốc độ xử lý cao nhờ viết bằng NDK; kiểm thử trực tiếp trên desktop Ban đầu thiết kế cho 2D; chưa hỗ trợ kiểm tra va chạm vật thể 3D
Shiva3D Thương mại Lua Công cụ mạnh, đa nền tảng Ngôn ngữ Lua ít phổ biến trong cộng đồng lập trình thời điểm đó
Unity Miễn phí / Thương mại ($1.500 bản Pro) C#, JavaScript, Boo Hỗ trợ đa nền tảng (PC, Web, Mobile, Console); cộng đồng lớn; công cụ trực quan; hỗ trợ nhập nhiều định dạng 3D Phiên bản miễn phí bị cắt giảm tính năng mạng (Network); license Android bổ sung

Unity ban đầu do Joachim Ante phát triển phần lõi từ năm 2001, chính thức thành lập công ty năm 2005. Phiên bản Unity 3.0 (phát hành tháng 9/2010) chính thức hỗ trợ xuất ứng dụng sang nền tảng Android. Năm 2009, Unity được Gamasutra xếp hạng 4 trong top 5 game engine tốt nhất thế giới (sau Unreal Engine 3, Gamebryo Engine, CryEngine 2).

Về kiến trúc nền tảng, hệ thống UnityAPI cung cấp tập hợp các lớp dẫn xuất từ cấu trúc phân cấp đối tượng. Lớp cơ sở quan trọng nhất là MonoBehaviour – mọi script muốn gắn vào một đối tượng game (GameObject) bắt buộc phải kế thừa từ lớp này. Khung kiến trúc kỹ thuật dựa trên các thành phần cốt lõi:

  • GameObject: Lớp thực thể đại diện cho các đối tượng xuất hiện trong màn chơi (Scene).
  • Component: Lớp cơ sở cho các thành phần hành vi, hiển thị, vật lý gắn trên GameObject.
  • Transform: Quản lý tọa độ tịnh tiến (Position), góc xoay (Rotation) và tỷ lệ kích thước (Scale).
  • Renderer, Material, Shader: Quản lý phương thức dựng hình bề mặt và kết cấu (Texture).
  • Các lớp chức năng chuyên biệt: Camera, Light, Collider, Rigidbody, CharacterController, Animation, AudioSource, ParticleEmitter, Projector, và GUI.

Chu kỳ sống của một thành phần script kế thừa từ MonoBehaviour được quy định theo thứ tự thực thi tuần tự của các phương thức callback: Awake() (gọi khi script được nạp vào bộ nhớ) -> Start() (gọi trước khung hình đầu tiên nếu script ở trạng thái kích hoạt) -> Update() (gọi lặp lại trong mỗi khung hình để cập nhật logic) -> LateUpdate() (thực thi sau Update() trong từng khung hình) -> OnGUI() (thực thi liên tục để vẽ giao diện người dùng) -> OnDestroy() (gọi khi đối tượng bị giải phóng khỏi bộ nhớ).

Thiết kế và triển khai kỹ thuật

Do bản chất của đề tài là xây dựng hệ thống phần mềm trò chơi 3D hoàn chỉnh, nhóm tác giả đã thiết kế và giải quyết các bài toán kỹ thuật chuyên biệt trong quá trình phát triển:

1. Kỹ thuật nạp và quản lý mô hình 3D

Unity hỗ trợ nhiều định dạng (3DS, OBJ, MAX, FBX, BLEND, MA) và tự động chuyển đổi sang FBX khi nhập vào dự án. Để nạp mô hình linh hoạt trong thời gian chạy (runtime), tác giả sử dụng cơ chế đóng gói Prefab đặt trong thư mục Resources/. Khi khởi tạo, mô hình được nạp bằng hàm Resources.Load() kết hợp Instantiate(). Do mô hình nhân vật thường bao gồm cấu trúc phân cấp nhiều đối tượng con, việc áp dụng vật liệu được xử lý tự động bằng cách duyệt mảng Renderer[] thông qua phương thức GetComponentsInChildren<Renderer>() nhằm gán kết cấu Texture2D đồng bộ cho toàn bộ mô hình.

2. Xử lý chuyển động nhân vật và cơ chế phát sinh sự kiện

Khóa luận chia mô hình hoạt họa thành hai nhóm: mô hình tích hợp sẵn nhiều đoạn chuyển động trong một file và mô hình tách rời mỗi file một chuyển động. Nhóm tác giả chọn giải pháp thứ hai để dễ quản lý. Quy ước đặt tên ngoài hệ điều hành Windows được áp dụng theo định dạng tenchinh@tenanimation.fbx (ví dụ: knight@run.fbx, knight@idle.fbx), giúp Unity tự động gộp các đoạn cắt hoạt họa (AnimationClip) vào đối tượng gốc. Quá trình chuyển tiếp chuyển động giữa các trạng thái được điều khiển thông qua phương thức animation.CrossFade() và animation.CrossFadeQueued(), thiết lập lặp lại bằng wrapMode = WrapMode.Loop.

Để xử lý logic khi một hành động kết thúc (chẳng hạn hủy nhân vật khi chuyển động chết kết thúc), hệ thống sử dụng lớp AnimationEvent gán trực tiếp vào frame cuối cùng của AnimationClip. Khi sự kiện kích hoạt, phương thức callback Die() trong lớp phụ trợ UnitDieCallback được gọi để thực thi lệnh giải phóng bộ nhớ Destroy(gameObject).

3. Xây dựng địa hình không bằng phẳng và điều khiển di chuyển

Tại thời điểm phiên bản Unity 3.0 trên Android, engine chưa hỗ trợ công cụ tạo địa hình Terrain trực tiếp trong runtime trên thiết bị di động. Nhóm tác giả đã đề xuất quy trình kỹ thuật kết hợp:

  • Thiết kế địa hình ban đầu bằng công cụ Terrain của Unity trên máy tính cá nhân.
  • Sử dụng script xuất mô hình địa hình sang định dạng OBJ với số lượng lưới giới hạn dưới 5.000 đa giác (polygons) nhằm bảo đảm hiệu năng dựng hình trên chip đồ họa di động.
  • Dùng phần mềm đồ họa Cinema4D (công cụ BodyPaint 3D) để vẽ kết cấu bề mặt, sau đó nạp lại mô hình OBJ và texture vào thư mục tài nguyên của Unity, kích hoạt thuộc tính Generate Colliders trong cửa sổ Inspector.

Trên bề mặt địa hình gồ ghề, hệ thống xây dựng một mạng lưới ô cờ logic (Grid). Vị trí bề mặt và độ cao của các điểm lưới được xác định bằng kỹ thuật chiếu tia Physics.Raycast từ trên cao xuống để lấy giao điểm va chạm với địa hình. Thuật toán tìm đường A* (A-star) được cài đặt để tính toán lộ trình ngắn nhất giữa hai ô trên bản đồ. Trong quá trình quân lính di chuyển dọc theo lộ trình, hệ thống liên tục thực hiện Raycast để cập nhật tọa độ trục Y, bảo đảm nhân vật luôn bám sát mặt đất.

4. Kiến trúc hệ thống trò chơi

Hệ thống trò chơi được tổ chức thành 5 khối kiến trúc chính:

  • Kiến trúc tổng thể: Quản lý vòng đời trò chơi, điều phối giữa các màn hình chức năng và luồng tương tác của người chơi.
  • Kiến trúc xử lý và phát sinh đối tượng: Quản lý việc nạp tài nguyên từ Prefab, thiết lập thông số ban đầu và quản lý danh sách quân lính của hai phe.
  • Kiến trúc nạp màn chơi: Phân tách dữ liệu màn chơi ra khỏi mã nguồn bằng cách lưu trữ thông tin bản đồ, vị trí công trình và loại quân trong các tập tin XML. Trò chơi đọc tập tin XML này tại thời điểm bắt đầu màn chơi để dựng khung cảnh tương ứng.
  • Kiến trúc quản lý sự kiện kết thúc: Lắng nghe và đánh giá các điều kiện thắng/thua (tiêu diệt toàn bộ quân địch hoặc chiếm giữ công trình chính) để chuyển đổi trạng thái màn chơi.
  • Kiến trúc quản lý trí tuệ nhân tạo (AI): Cung cấp logic tự động cho máy, xác định vùng di chuyển, đánh giá mức độ đe dọa, ra quyết định tấn công hoặc phòng thủ theo lượt.

Nội dung chính theo từng chương

Chương 1: Mở đầu

Chương này phân tích tổng quan sự hình thành và phát triển của hệ điều hành Android từ tháng 10/2008 đến đầu năm 2011. Tác giả dẫn chứng báo cáo quý IV/2010 của Canalys về sự tăng trưởng thị phần thiết bị di động của các hãng Samsung, LG, HTC, Acer và thống kê tỷ lệ phiên bản Android trên Android Developer (hệ điều hành 2.x chiếm 87,4%). Nội dung tiếp theo phân tích sự chuyển dịch từ game 2D sang game 3D dựa trên khả năng phần cứng mới, điểm qua các tựa game 3D tiêu biểu trên Android như Hero of Sparta, Asphalt 5, Real Football 2011, Brothers in Arms 2. Tác giả tiến hành khảo sát và đánh giá 4 game engine 3D (jPCT-AE, libGDX, Shiva3D, Unity), từ đó xác lập mục tiêu, phương pháp và kế hoạch thực hiện đề tài gồm 8 mốc thời gian từ tháng 08/2010 đến tháng 02/2011.

Chương 2: Tổng quan về engine Unity

Chương 2 trình bày chi tiết về lịch sử hình thành engine Unity từ năm 2001 bởi Joachim Ante, các mốc phát hành phiên bản và các giải thưởng học thuật/công nghệ (Best Use of Mac OS X Graphics tại Apple WWDC 2006, Top 5 Game Companies năm 2009 của Gamasutra, Technology Innovation Award của Wall Street Journal năm 2010). Tác giả làm rõ các tính năng hỗ trợ đa nền tảng, hệ thống Unity Asset Server hoạt động trên nền hệ quản trị cơ sở dữ liệu PostgreSQL (chi phí 499 USD).

Chương này giải thích chi tiết 6 khái niệm cốt lõi: Asset, Scene, GameObject, Component, Script (tập trung vào ngôn ngữ C#), Prefab, cùng mối quan hệ giữa Material và Shader. Phần giao diện làm việc được phân tích qua 5 cửa sổ chức năng: Scene, Hierarchy, Inspector, Game và Project, cùng 4 công cụ thao tác qua phím tắt Q (Hand tool), W (Translate), E (Rotate), R (Scale). Phần cuối chương khái quát kiến trúc UnityAPI và chu kỳ sống của các hàm điều khiển script (Awake, Start, Update, LateUpdate, OnGUI, OnDestroy).

Chương 3: Một số vấn đề và giải pháp khi xây dựng game với engine Unity trên Android

Chương 3 là phần trọng tâm về kỹ thuật lập trình, đưa ra bài toán thực tế và giải pháp giải quyết cho 12 vấn đề:

  1. Nạp mô hình 3D: Kỹ thuật nạp tự động qua Resources.Load() và gán kết cấu đa cấp bằng GetComponentsInChildren<Renderer>().
  2. Chuyển động mô hình nhân vật 3D: Cơ chế quản lý AnimationClip, quy tắc đặt tên @ để gộp chuyển động từ Windows, điều khiển chuyển động bằng CrossFade(), CrossFadeQueued().
  3. Thêm sự kiện vào chuyển động: Ứng dụng AnimationEvent vào frame cuối để kích hoạt phương thức hủy đối tượng Destroy().
  4. Tạo địa hình trong game: Quy trình giải quyết hạn chế không hỗ trợ Terrain runtime trên Android bằng cách xuất file OBJ dưới 5.000 đa giác từ Unity PC, tô texture trên Cinema4D và nạp lại với Generate Colliders.
  5. Chiếu sáng cảnh vật: Bố trí hệ thống chiếu sáng qua thành phần Light.
  6. Tạo bầu trời mây: Xây dựng không gian vòm trời bằng kỹ thuật Skybox.
  7. Tạo hiệu ứng mặt nước: Áp dụng Water Shader và thiết lập phản chiếu.
  8. Đặt mô hình 3D lên địa hình: Sử dụng tia chiếu Raycast để xác định tọa độ tiếp xúc mặt đất.
  9. Vẽ lưới trên địa hình không bằng phẳng: Thuật toán tạo lưới bám theo cao độ địa hình phục vụ di chuyển chiến thuật.
  10. Xử lý di chuyển trong bản đồ: Kết hợp thuật toán tìm đường ngắn nhất A* và kỹ thuật Raycast bắt cao độ khi nhân vật di chuyển giữa các ô.
  11. Tạo hiệu ứng hạt: Sử dụng Ellipsoid Particle Emitter và hiệu chỉnh các thông số trong Particle System để tạo hiệu ứng kỹ năng.
  12. Xây dựng giao diện và âm thanh: Thiết lập giao diện tương tác bằng lớp GUI, GUIStyle trong sự kiện OnGUI() và quản lý âm thanh qua thành phần AudioSource.

Chương 4: Ứng dụng game phát triển trên Unity

Chương 4 giới thiệu sản phẩm phần mềm thử nghiệm được nhóm xây dựng dựa trên phong cách lối chơi của tựa game Fantasy War. Đây là thể loại chiến thuật chơi theo lượt trên nền 3D. Các quy luật chơi bao gồm:

  • Bản đồ chiến thuật dạng lưới phân chia các khu vực di chuyển của quân lính.
  • Hệ thống đơn vị lính với các thuộc tính tấn công, phòng thủ, phạm vi di chuyển và cây nâng cấp kỹ năng.
  • Hệ thống công trình cho phép người chơi chiếm giữ để sản sinh tài nguyên và mua lính mới.
  • Hệ thống bài phép thuật (Card/Spell) có thể kéo thả trực tiếp lên đơn vị lính để hỗ trợ tác chiến.
  • Chi tiết hóa 5 phân hệ kiến trúc: kiến trúc tổng thể, cơ chế phát sinh đối tượng runtime, nạp cấu hình màn chơi từ tập tin XML, quản lý sự kiện phân định kết thúc màn chơi, và bộ điều khiển trí tuệ nhân tạo (AI) cho đối thủ máy.

Chương 5: Kết luận và hướng phát triển

Chương cuối tóm tắt toàn bộ khối lượng công việc đã hoàn thành: nắm vững kiến trúc Unity trên Android, xây dựng quy trình giải quyết các giới hạn kỹ thuật đồ họa trên thiết bị di động thời kỳ đầu, và hoàn thiện một game 3D turn-based chạy thử nghiệm ổn định trên thiết bị Android. Hướng phát triển được nhóm xác định gồm: nâng cấp đồ họa, mở rộng tính năng chơi mạng (multiplayer) và phát triển thuật toán AI phức tạp hơn.

Kết quả và đóng góp

Khóa luận đạt được các kết quả cụ thể về mặt nghiên cứu công nghệ và xây dựng sản phẩm:

  • Hệ thống hóa quy trình công nghệ: Khảo sát, phân tích và hệ thống hóa toàn bộ chu trình phát triển game 3D từ công đoạn chuẩn bị tài nguyên 3D (3DS Max, Cinema4D) đến công đoạn tích hợp, xử lý kịch bản trên Unity và đóng gói cài đặt cho hệ điều hành Android.
  • Giải pháp xử lý các giới hạn kỹ thuật phần cứng di động:
    • Đề xuất quy trình chuyển đổi địa hình: Thiết kế trên Unity -> Xuất OBJ -> Tối ưu đa giác dưới 5.000 polygons -> Xử lý BodyPaint trên Cinema4D -> Nhúng lại Unity với Generate Colliders.
    • Quy chuẩn hóa quy tắc nhập hoạt họa rời bằng cú pháp model@animation.fbx.
    • Ứng dụng thành công kỹ thuật Physics.Raycast kết hợp thuật toán tìm đường A* trên bản đồ lưới không bằng phẳng.
  • Sản phẩm ứng dụng thử nghiệm: Xây dựng hoàn chỉnh trò chơi chiến thuật 3D chơi theo lượt mang phong cách Fantasy War trên Android, tích hợp đầy đủ hệ thống bản đồ địa hình, hoạt họa nhân vật (chạy, tấn công, chịu sát thương, chết), hệ thống công trình, bài phép thuật, cấu hình màn chơi qua XML và AI máy.

Hạn chế và hướng nghiên cứu tiếp

Dựa trên nội dung văn bản khóa luận, một số hạn chế kỹ thuật và hướng mở được ghi nhận:

  • Hạn chế:
    • Tính năng tạo địa hình trực tiếp trong lúc thực thi (runtime) chưa thể thực hiện độc lập trên Android do hạn chế của phiên bản Unity 3.0 lúc bấy giờ, bắt buộc phải dùng công cụ trung gian bên ngoài.
    • Số lượng đa giác của địa hình phải khống chế ở mức thấp (dưới 5.000 đa giác) để tránh sụt giảm khung hình trên các thiết bị di động đơn nhân năm 2010–2011.
    • Phiên bản Unity Free bị giới hạn các tính năng mạng cao cấp; hệ thống mạng nhiều người chơi (multiplayer) chưa được tích hợp trong sản phẩm thử nghiệm.
  • Hướng nghiên cứu tiếp:
    • Nâng cấp thuật toán trí tuệ nhân tạo (AI) cho đối thủ máy để tạo ra các chiến thuật phong phú hơn.
    • Nghiên cứu cơ chế kết nối mạng để hỗ trợ chế độ thi đấu nhiều người chơi.
    • Tối ưu hóa hiệu năng dựng hình và nâng cao chi tiết đồ họa nhằm thích ứng với các thế hệ vi xử lý di động mới hơn.

Giá trị tham khảo

Báo cáo khóa luận là tài liệu tham khảo kỹ thuật hữu ích đối với:

  • Sinh viên chuyên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm và Khoa học Máy tính đang thực hiện các đồ án nghiên cứu về phát triển ứng dụng di động hoặc lập trình trò chơi điện tử.
  • Các nhà phát triển game muốn tìm hiểu về kiến trúc nền tảng của Unity, chu kỳ sống của script, phương pháp tối ưu hóa tài nguyên 3D (mesh, animation, texture) trên môi trường di động có giới hạn phần cứng.
  • Phần có giá trị tham khảo ứng dụng cao nhất là Chương 3 và Chương 4, cung cấp các giải pháp xử lý va chạm, kỹ thuật chiếu tia Raycast xác định cao độ, thuật toán tìm đường A* trên lưới địa hình và mô hình kiến trúc phân tách dữ liệu màn chơi bằng tập tin cấu hình XML.

Câu hỏi thường gặp

1. Vì sao nhóm tác giả không sử dụng công cụ tạo địa hình (Terrain) runtime tích hợp sẵn của Unity trên hệ điều hành Android? Tại thời điểm năm 2010–2011, phiên bản Unity 3.0 chưa hỗ trợ việc khởi tạo và kết xuất đối tượng Terrain trực tiếp trong thời gian chạy trên nền tảng Android. Do đó, nhóm phải tạo địa hình trước trên PC, xuất sang file OBJ với số lượng đa giác dưới 5.000, xử lý bề mặt trên Cinema4D rồi mới nạp lại vào dự án.

2. Làm thế nào để gộp nhiều tệp hoạt họa (animation) riêng lẻ vào cùng một mô hình nhân vật trong Unity? Tác giả áp dụng quy tắc đặt tên file từ bên ngoài hệ điều hành Windows: chọn một file mô hình làm mô hình chính, các file hoạt họa còn lại được đặt tên theo cú pháp [TênMôHìnhChính]@[TênHoạtHọa].fbx. Khi import vào dự án, Unity tự động trích xuất các chuyển động thành các AnimationClip độc lập gắn vào mô hình chính.

3. Làm cách nào để gắn kết cấu (texture) đồng bộ lên mô hình nhân vật gồm nhiều đối tượng con bên trong? Trong mã nguồn C#, tác giả sử dụng phương thức GetComponentsInChildren<Renderer>() trên đối tượng cha để lấy toàn bộ danh sách các thành phần Renderer của các đối tượng con, sau đó duyệt vòng lặp để gán tệp Texture2D (được nạp từ thư mục Resources/) vào thuộc tính material.mainTexture của từng thành phần.

4. Cơ chế nào được sử dụng để phát hiện việc hoàn thành chuyển động của nhân vật nhằm giải phóng đối tượng? Unity không tự phát sinh sự kiện khi chuyển động kết thúc. Tác giả đã dùng lớp AnimationEvent chèn một sự kiện vào khung hình (frame) cuối cùng của AnimationClip (ví dụ hành động chết). Sự kiện này liên kết với phương thức Die() trong một script phụ trợ (UnitDieCallback) để kích hoạt hàm Destroy(gameObject).

5. Lộ trình di chuyển của quân lính trên bản đồ được tính toán và bám sát địa hình bằng cách nào? Hệ thống sử dụng thuật toán A* để xác định danh sách các ô di chuyển ngắn nhất trên bản đồ lưới chiến thuật. Trong suốt quá trình tịnh tiến giữa các điểm mốc, hệ thống liên tục chiếu tia Physics.Raycast vuông góc xuống mặt đất để lấy tọa độ va chạm của bề mặt địa hình, từ đó cập nhật độ cao trục Y giúp nhân vật di chuyển bám sát mặt đất không bằng phẳng.

Kết luận

Khóa luận tốt nghiệp của sinh viên Tất Tuấn Phong và Hoàng Phương đã nghiên cứu hệ thống hóa kiến trúc engine Unity và quy trình xây dựng game 3D trên hệ điều hành di động Android giai đoạn 2010–2011. Đề tài đã giải quyết thành công các bài toán kỹ thuật thực tế về tối ưu hóa mô hình đa giác thấp, nạp tài nguyên runtime, điều khiển hoạt họa, xử lý va chạm và tìm đường trên địa hình gồ ghề. Sản phẩm thử nghiệm là một game chiến thuật 3D chơi theo lượt hoàn chỉnh, minh chứng tính khả thi của việc ứng dụng công nghệ đồ họa 3D hiện đại lên nền tảng thiết bị di động.