Đặc biệt cảm ơn anh Phạm Văn Tuấn, đã hướng dẫn, giúp đỡ cho em tận tình cả những khó khăn trong công việc, đến những khó khăn việc làm quen với môi trường mới; cảm ơn anh Đỗ Trí Khải, đ
Trang 11
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
BÁO CÁO THỰC TẬP Intern Unity Developer
Công ty thực tập : Vitalify Asia Người phụ trách : Phạm Văn Tuấn
TP Hồ Chí Minh, tháng 12 năm 2023
Trang 22
LỜI MỞ ĐẦU
Ngày nay, ngành công nghiệp game là một bộ phận không thể thiếu của ngành công nghiệp phần mềm Với tốc độ phát triển vô cùng mạnh mẽ, ngành game đã và đang là nhân tố kích thích sự phát triển của công nghệ thông tin thế giới, cả về phần cứng và phần mềm
Cùng với xu thế phát triển của thế giới, Việt Nam cũng không phải ngoại lệ Ngành công nghiệp game non trẻ Việt Nam đã và đang phát triển mạnh mẽ, để hòa nhập với những công ty hàng đầu về game trên thế giới Bên cạnh những công ty game trẻ tuổi trong nước, những công
ty game (như Vitalify Asia) cũng gia nhập vào thị trường Việt Nam, góp phần rất lớn vào sự phát triển tích cực của ngành game Việt
Ngành game được sinh ra là do nhu cầu giải trí của giới trẻ bằng những thiết bị công nghệ mới nhất Và cũng chính giới trẻ sẽ là nguồn nhân lực quan trọng cho việc phát triển của ngành game sau này Vì lý do này, em quyết định chọn lập trình game làm định hướng cho việc học tập của mình
Sau ba năm học tập trên trường, do mong muốn có thêm kinh nghiệm thực tế, cũng như muốn được tham gia làm game trong một môi trường chuyên nghiệp, em có dự định là sẽ thực tập trong hè
Trang 3Đặc biệt cảm ơn anh Phạm Văn Tuấn, đã hướng dẫn, giúp đỡ cho em tận tình cả những
khó khăn trong công việc, đến những khó khăn việc làm quen với môi trường mới; cảm ơn anh
Đỗ Trí Khải, đã hỗ trợ em rất nhiều về các cách áp dụng toán học vô game Một lần nữa em xin
cảm ơn hai anh rất nhiều đã giúp em để có thể làm ra một sản phẩm trong thời gian qua
Cũng xin cảm ơn thầy cô trong khoa Công nghệ phần mềm đã nhiệt tình hỗ trợ, tạo điều kiện em làm bài báo cáo này
Nguyễn Văn Thiên
Tp HCM, ngày 20 tháng 12 năm 2023
Trang 44
NHẬN XÉT CỦA KHOA
Trang 5
5
MỤC LỤC
LỜI MỞ ĐẦU 2
LỜI CẢM ƠN 3
NHẬN XÉT CỦA KHOA 4
Chương 1: Giới thiêu công ty thực tập 7
1 Giới thiệu công ty Vitalify Asia 7
2 Sản phẩm của công ty 7
Chương 2: Nội dung thực tập 9
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty 9
2 Thiết lập, cài đặt công cụ làm việc và lên ý tưởng cho game 9
3 Thực hiện project 11
4 Lịch làm việc 11
Chương 3: Chi tiết về project 13
1 Giới thiệu về game 13
2 Thực hiện 14
2.1 Thiết lập môi trường 14
2.2 Tạo các đối tượng cơ bản trong game và áp dụng NavMeshNavigation 14
2.3 Tạo nhân vật Range Soldier và xử lý cơ bản 14
2.4 Xử lý trạng thái cơ bản cho nhân vật 14
2.5 Tạo nhân vật Canon và áp dụng toán vào game 14
2.6 Tạo đối tượng quản lý nhiều nhân vật 14
2.7 Xử lý nhân vật thông minh hơn 14
2.8 Xử lý thắng thua trong game 15
2.9 Xử lý và áp dụng vài logic mới 15
Trang 66
2.10 Tìm assets để sử dụng giúp game đẹp hơn 15
2.11 Tạo thêm hiệu ứng và chỉnh sửa UI 15
2.12 Tạo Turret 16
2.13 Tạo hệ thống save load cho game 16
2.14 Tạo hệ thống âm thanh cho game sống động 16
2.15 Tạo giao diện cho một số nhân vật, đối tượng 16
2.16 Chỉnh sửa và thêm UI 16
2.17 Xử lý hàng chờ và xử lý logic cho bot 16
2.18 Áp dụng Obstacle cho nhân vật 17
2.19 Tạo map 17
2.20 Tạo độ khó cho game 17
2.21 Cân bằng bot và sử dụng skybox 17
2.22 Di chuyển camera 17
2.23 Tạo hiệu ứng Fog Of War cho game 17
3 Kế hoạch 17
TỔNG KẾT 19
TÀI LIỆU THAM KHẢO 20
Trang 77
Chương 1: Giới thiêu công ty thực tập
1 Giới thiệu công ty Vitalify Asia
Công ty TNHH Vitalify Asia là công ty phát triển ứng dụng web và di động có trụ sở tại Thành phố Hồ Chí Minh, Việt Nam, được thành lập vào năm 2008 Chúng tôi cung cấp khả năng phát triển và cải tiến sản phẩm nhanh chóng trên cơ sở DevOps với đội ngũ cam kết mang lại giá trị cho người dùng
2 Sản phẩm của công ty
Theo đó, cùng kinh nghiệm nhiều năm phát triển ứng dụng web/smartphone và AI, Vitalify Asia đang từng bước đẩy mạnh nghiên cứu Game 3D, VR/AR với bộ phận phát triển riêng biệt mang tên “Unity Development Lab” Sản phẩm Game 3D đầu tiên của công ty - “Dungeon Dash” được ra mắt với 2 phiên bản iOS và Android trên
cả 3 ngôn ngữ tiếng Việt, tiếng Anh và tiếng Nhật
Được biết, Unity là nền tảng phát triển Game được sử dụng nhiều nhất trên thế giới Không chỉ vậy, để đáp ứng nhu cầu phát triển ngày càng tăng cao, Unity còn được ứng dụng nhiều ở lĩnh VR/AR Trong những năm gần đây, rất nhiều game được phát triển trên nền tảng này, như Crossy Road, Fallout Shelter, Angry Birds 2
Nắm bắt xu hướng đó, cùng nguồn lực kĩ sư Unity và 3D designer ưu tú, Vitalify Asia đã thành lập và phát triển “Unity Development Lab” Trong đó, Unity
Trang 88 Development Lab (UDL) là một nhóm gồm những thành viên có nhiều năm kinh nghiệm trong lĩnh vực phát triển, thiết kế và quản lý các dự án game lớn nhỏ
Trang 99
Chương 2: Nội dung thực tập
Đợt thực tập nhằm mục đích giúp sinh viên thực tập được đào tạo toàn diện về lập trình game 3D sử dụng công nghệ Unity Engine, đồng thời rèn luyện những kỹ năng mềm như làm việc nhóm, thuyết trình, giao tiếp Tại công ty, sinh viên có cơ hội được học tập, khám phá và làm việc trong một môi trường phát triển game chuyên nghiệp
1 Tìm hiểu công ty và các kỹ năng cơ bản trong công ty
Thời gian : 1/2 ngày
Nội dung : Giới thiệu về công ty, cách tổ chức của công ty
Được nghe người phụ trách giới thiệu về công ty, quá trình thành lập và phát triên (như đã nhắc đến ở trên), quy trình làm việc từ cao xuống thấp, cách thức tổ chức của công ty
Ngoài ra, thực tập sinh còn được giới thiệu về cách thức làm việc trong công ty như thời gian đi làm, các quy định cần phải tuân thủ, cách sử dụng email trong công việc…
Kết quả : Hiểu thêm về công ty Vitalify Asia, quá trình thành lập và phát triển Có thêm
các kỹ năng về việc sử dụng email trong công việc, làm việc có kế hoạch, có kỷ luật, có trách nhiệm hơn
2 Thiết lập, cài đặt công cụ làm việc và lên ý tưởng cho game
2.1 Các công cụ làm việc
Thời gian : 1/2 ngày
Nội dung : Tìm hiểu về các công cụ sẽ được sử dụng trong quá trình làm việc
Trong thời gian này, các anh mentor đã hướng dẫn thực tập sinh tìm hiểu về các công cụ sẽ giúp ích cho trong công việc sau này Sử dụng Chatwork để giao tiếp với các anh mentor cũng như các bạn trong công ty
Thực hiện : Cài đặt phiên bản Unity, tạo và config repository trên Github
Kết quả : Sử dụng công cụ miễn phí và tiện lợi cho quá trình thực tập
2.2 Tìm hiểu coding rule của công ty
Thời gian : 1/2 ngày
Nội dung : Được training về các quy chuẩn, kiến thức quan trọng để làm việc nhóm
mượt mà hơn
- Các quy chuẩn chung:
Các kiến thức cơ bản về đặt tên biến, phương thức, tên file Ngoài ra, thực tập sinh còn được hướng dẫn về cách viết code sao cho giảm độ phức tạp, giúp quá trình review code thuận lợi và dễ dàng hơn
Trang 1010
- Unit test :
Cách viết và thực hiện unit test trên Unity Engine
- Git flow rule:
Thực tập sinh sẽ được hướng dẫn về cách đặt tên nhánh, cách làm việc cùng mọi người khi sử dụng Github và Sourcetree
- UDL Core :
Cách sử dụng package của công ty đã dựng sẵn nhằm phục vụ việc phát triển game nhanh chóng hơn
Thực hiện :
- Tham gia đầy đủ các buổi training của công ty
- Làm project theo estimate đã đặt ra
Kết quả :
- Nâng cao kỹ năng lập trình với ngôn ngữ C# và Unity Engine
- Có được những kiến thức quan trọng cho việc lập trình game đặc biệt trên nền tảng mobile sau này
- Ngoài ra còn được biết thêm một số quy tắc trong việc viết code sao cho đúng chuẩn, dễ đọc, dễ hiểu
- Biết cách làm việc chung với nhiều người thông qua Github và Sourcetree
2.3 Lên ý tưởng cho dự án thực tập
Thời gian: 1 ngày
Nội dung: Tìm hiểu và tham khảo các tựa game trên mạng theo ý thích
- Các thể loại game chiến thuật thủ thành
Xác định được thể loại game sẽ làm, thực hiện trong thời gian sắp tới
Thực hiện :
- Tìm hiểu các thể loại game và chọn thể loại bản thân mong muốn làm
- Tìm kiếm tài liệu trên mạng để tìm hiểu thêm về thể loại đó, cách thực hiện
Kết quả :
- Hiểu được những thể loại game cơ bản
2.4 Lập trình trên Unity Engine
Trang 1111
Thời gian: 1 ngày
Nội dung : Các kỹ năng sử dụng Unity Engine, third-party, plugin và các assets nhằm
phục vụ việc phát triển một tựa game hoàn chỉnh
- Định nghĩa về Unity Engine:
Unity Engine là một engine đa nền tảng được phát triển bởi Unity Technologies,
nó được phát hành lần đầu vào năm 2005 tại hội nghị “Apple Worldwide Developers Conference” Nó hỗ trợ việc phát triển game đa nền tảng bao gồm desktop, mobile, console và cả virtual reality
- Lập trình game trên Unity sử dụng C#:
Các kỹ thuật để lập trình game đa nền tảng trên Unity Engine, quá trình sử dụng ngôn ngữ lập trình C# để tạo ra các trò chơi điện tử trên nền tảng Unity Unity là một công cụ game phổ biến được sử dụng để tạo ra các trò chơi 2D và 3D trên nhiều nền tảng khác nhau
Thực hiện :
- Tham gia đầy đủ các buổi training
- Tạo ra những ứng dụng cơ bản, lập trình game Unity trên Windows
Chi tiết đồ án sẽ được nói ở phần sau
4 Lịch làm việc
Tuần Công việc Người hướng dẫn
Mức
độ hoàn thành
Nhận xét của người hướng dẫn
Trang 1212
1
- Tìm hiểu về công
ty, cách tổ chức của công ty
- Làm quen với các công cụ làm việc trong công
ty
- Bắt tay thực project
- Tạo các nhân vật
cơ bản
- Thực hiện logic cho nhân vật
- Thực hiện các animation cơ bản cho nhân vật
Anh Phạm Văn Tuấn
2
- Tìm kiếm model cho các nhân vật
- Sử dụng model
đó vào game
- Tạo và thực hiện logic cho Tower
Anh Phạm Văn Tuấn
Anh Đỗ Trí Khải
3
- Tạo và thực hiện logic cho Turret
- Thực hiện logic thắng thua cho game
- Tạo hệ thống save load cho game
Anh Phạm Văn Tuấn
- Thực hiện các giao diện cơ bản cho game
Anh Phạm Văn Tuấn
Anh Đỗ Trí Khải
Trang 1313
Chương 3: Chi tiết về project
1 Giới thiệu về game
Game lấy ý tưởng từ luật chơi của game chiến thuật rất nổi tiếng đó là World of
Trang 1414
2 Thực hiện
Một mình em làm dưới sự hướng dẫn của các anh mentor, bao gồm:
2.1 Thiết lập môi trường
- Cài đặt Unity Editor version 2021.11.3, tạo repository trên Github
- Tìm hiểu và quyết định sẽ làm game chiến thuật tương tự World of Warcraft
2.2 Tạo các đối tượng cơ bản trong game và áp dụng NavMeshNavigation
- Tạo một vài đối tượng hình vuông tròn trong game, sử dụng NavMeshNavigation để điều khiển, di chuyển trên Terrain
2.3 Tạo nhân vật Range Soldier và xử lý cơ bản
- Tạo nhân vật Range Soldier đơn giản: nhân vật có thể tấn công từ xa
- Xử lý chọn 1 hoặc nhiều đối tượng và di chuyển chúng
- Xử lý nhiều đối tượng được chọn cùng target đến một đối tượng
2.4 Xử lý trạng thái cơ bản cho nhân vật
- Xử lý trạng thái “đứng yên”, “tấn công”, “di chuyển” và “chết” cho nhân vật Range Soldier
và Melee Soldier
- Xử lý tự động ngắm cho ArrowBullet(vũ khí ném bởi Range Soldier)
2.5 Tạo nhân vật Canon và áp dụng toán vào game
- Tạo nhân vật Canon cơ bản
- Áp dụng công thức toán phương trình bậc hai để làm cho quỹ đạo của ArrowBullet đẹp và mượt mà hơn
2.6 Tạo đối tượng quản lý nhiều nhân vật
- Tạo GameManager để quản lý toàn bộ game
- Tạo SoldierManager để quản lý việc tạo nhân vật trong game
- Xử lý việc dò tìm của nhân vật trong game: khi kẻ địch trong tầm nhìn, nhân vật sẽ tấn công
kẻ địch
2.7 Xử lý nhân vật thông minh hơn
- Khi nhân vật bị tấn công, nó sẽ tấn công lại kẻ địch
Trang 1515
- Tạo nhân vật DefenderMelee và Shield cho nhân vật đó: Shield có thể chặn được
ArrowBullet và có thể cầm để đập kẻ địch
- Tạo Sword cho nhân vật
- Sửa vài lỗi liên quan tới NavMeshAgent
2.8 Xử lý thắng thua trong game
- Tạo đối tượng Tower: đối tượng mà người chơi phải bảo vệ Đối với Tower của kẻ địch, người chơi phải phá hủy hết nếu muốn dành chiến thắng
- Nhân vật bị đẩy lùi và bất động nếu bị ảnh hưởng bởi vụ nổ của CanonBullet(được bắn ra bởi Canon) trong vài giây
- Xử lý thắng thua logic cho game: thua khi bị kẻ địch phá hủy Tower, thắng khi người chơi phá hủy tất cả Tower của kẻ địch
2.9 Xử lý và áp dụng vài logic mới
- Bây giờ kẻ địch và đồng minh đều bị ảnh hưởng bởi CanonBullet, nhưng chỉ kẻ địch mới bị mất máu
- Tạo một vài animation cơ bản cho Attacker và Defender
- Xử lý logic cho việc tạo nhân vật trong game: sử dụng tiền của Tower
- Xử lý việc chọn nơi mà nhân vật sẽ đi tới sau khi được tạo ra bởi Tower
2.10 Tìm assets để sử dụng giúp game đẹp hơn
- Tạo hiệu ứng nổ cho CanonBullet và tạo hệ thống quản lý tất cả các hiệu ứng
- Sử dụng asset miễn phí cho nhân vật Attacker, Defender và RangeSoldier: thay thế tất cả hộp vuông tròn thành nhân vật đẹp và hoàn chỉnh
- Thêm vòng tròn đỏ dưới chân nhân vật nếu được chọn bởi người chơi: người chơi chọn nhân vật bằng cách nhấn vào nhân vật, hoặc là kéo thả 1 vùng để chọn nhiều nhân vật
2.11 Tạo thêm hiệu ứng và chỉnh sửa UI
- Tạo hiệu ứng nổ đầu nòng Canon khi nó bắn, hiệu ứng khi Attacker chém kẻ địch và hiệu ứng của Shield khi chặn được ArrowBullet
- Tạo UI đơn giản màn hình chiến thắng và thua
- Tạo UI đơn giản cho việc nhấn để tạo nhân vật trong game
Trang 1616
2.12 Tạo Turret
- Tạo Turret để thủ, bảo vệ Tower
2.13 Tạo hệ thống save load cho game
- Tạo các đối tượng lưu trữ thuộc tính của nhân vật, thuộc tính gồm: Type(enum),
Position(Vector3), Stats(Dictionary)
- Cải tiến vài dòng code
- Tạo menu đơn giản để thử nghiệm hệ thống save load có hoạt động đúng như mong muốn hay không
2.14 Tạo hệ thống âm thanh cho game sống động
- Tạo SoundManager để quản lý âm thanh cho game: nhạc nền, hiệu ứng, …
- Tạo UI cơ bản để điều chỉnh âm thanh
- Tạo hệ thống gacha đơn giản
2.15 Tạo giao diện cho một số nhân vật, đối tượng
- Tạo thanh máu cho Tower và Turret
- Tạo UI để hiển thị reward của người chơi: người chơi sẽ nhận được kim cương khi tiêu diệt
kẻ địch
- Lưu trữ reward cho người chơi
- Sửa lỗi di chuyển của các nhân vật
2.16 Chỉnh sửa và thêm UI
- Tạo UI cho hàng chờ tạo nhân vật
- Xử lý logic cơ bản cho gacha: random, reward, …
- Tạo UI cơ bản cho gacha
2.17 Xử lý hàng chờ và xử lý logic cho bot
- Hiển thị hàng chờ tạo nhân vật
- Xử lý và sửa lỗi logic cho hàng chờ tạo nhân vật
- Tạo một vài quyết định cơ bản, giúp con bot nó thông minh hơn
Trang 1717
2.18 Áp dụng Obstacle cho nhân vật
- Thêm Obstacle cho nhân vật: mỗi khi nhân vật đứng yên, nó sẽ trở thành obstacle, giúp cho những nhân vật khác sẽ tự động né tránh, không chen nhau
- Xử lý logic bật tắt của Obstacle
- Xử dụng Aminator Override Controller cho nhân vật
2.19 Tạo map
- Tạo một map đơn giản sử dụng tính năng Terrain của Unity
- Ngẫu nhiên vị trí khi bắt đầu game của nhân vật và bot
- Sữa lỗi cho code
2.20 Tạo độ khó cho game
- Tạo các mức độ: dễ, trung bình, khó cho game Càng khó càng phải đấu với nhiều con bot
2.21 Cân bằng bot và sử dụng skybox
- Sử dụng simple skybox
- Điều chỉnh con bot cho cân bằng
2.22 Di chuyển camera
- Di chuyển camera giờ có thể sử dụng bằng chuột như game World of Warcraft
- Cài đặt URP cho dự án
2.23 Tạo hiệu ứng Fog Of War cho game
- Tạo Fog of War cơ bản cho game
- Sử dụng Newtonsoft để cải tiến hệ thống save load
- Sử dụng Scriptable Object thay vì constant
3 Kế hoạch
Tiến trình:
- Hoàn thành các logic nhân vật cơ bản cho game
- Chỉ hổ trợ chế độ chơi với máy, nhưng có nhiều mức độ khó khác nhau
- Áp dụng các model đã tìm được
- Tạo vài hiệu ứng cơ bản cho game