LỜI NÓI ĐẦU Với sự phát triển một cách nhanh chóng như vũ bão của công nghệ và Internet của thế giới nói chung và Việt Nam nói riêng thì game gần như không còn là một khái niệm xa lạ đối
Trang 1LỜI CẢM ƠN
Em xin chân thành cảm ơn các Thầy, Cô giáo khoa Công Nghệ Thông Tin, Đại Học Công Nghệ Thông Tin và Truyền Thông đã giảng dạy em các bộ môn trong thời
gian vừa qua Đặc biệt là Cô Nguyễn Lan Oanh Thạc Sĩ Công Nghệ Thông Tin là
giáo viên hướng dẫn trực tiếp, đã tận tình chỉ bảo giúp đỡ em hoàn thành đồ án tốt nghiệp này
Trong quá trình làm đồ án cũng như trong quá trình làm báo cáo với giáo viên hướng dẫn khó tránh khỏi sai sót, rất mong các Thầy, Cô bỏ qua Đồng thời do trình
độ lý luận cũng như kinh nghiệm thực tiễn còn hạn chế nên bài báo cáo không thể tránh khỏi những thiếu sót, em rất mong nhận được ý kiến đóng góp Thầy, Cô để em
có thêm được nhiều kinh nghiệm hơn
Chúc Thầy, Cô luôn có một sức khỏe dồi dào, thành công trong công việc, sự nghiệp cũng như trong cuộc sống
Em xin chân thành cảm ơn!
Sinh viên
Lê Văn Thuyên
Trang 2LỜI CAM ĐOAN
Em xin cam đoan rằng:
Số liệu và kết quả nghiên cứu trong đồ án này là hoàn toàn trung thực và chưa từng được sử dụng hoặc công bố trong bất kỳ công trình nào khác
Mọi sự giúp đỡ cho việc thực hiện đồ án này đã được cám ơn và các thông tin
trích dẫn trong đồ án đều được ghi rõ nguồn gốc
Sinh viên
Lê Văn Thuyên
Trang 3MỤC LỤC
LỜI NÓI ĐẦU 5
CHƯƠNG 1 TỔNG QUAN VỀ UNITY 6
1.1 Giới thiệu về Unity 6
1.2 Các khái niệm cơ bản 7
1.3 Làm quen với môi trường Unity 10
1.3.1 Các thành phần và bố trí 10
1.3.2 Tạo và cấu hình với dự án 2D 11
1.3.3 Tạo các đối tượng cơ bản 13
CHƯƠNG 2 PHÂN TÍCH THIẾT KẾ 28
2.1 Phân tích yêu cầu 28
2.1.1 Khảo sát 28
2.1.2 Mục tiêu cần đạt 28
2.2 Phân tích thiết kế hệ thống 29
2.2.1 Các chức năng của chương trình 29
2.2.2 Biểu đồ Use Case (Use Case Diagram) 29
2.2.3 Biểu đồ trình tự (Sequence Diagram) 30
2.2.4 Biểu đồ lớp (Class Diagram) 33
2.2.5 Biểu đồ hoạt động (Activity Diagram) 34
CHƯƠNG 3 XÂY DỰNG CHƯƠNG TRÌNH 37
3.1 Giới thiệu chương trình 37
3.2 Kịch bản trò chơi 37
3.2.1 Nhân vật và quái vật 37
3.2.2 Đạn, vũ khí 39
3.2.3 Bẫy trong game 40
3.3 Các công đoạn làm game 41
3.3.1 Tạo các khu vực trong game 41
3.3.2 Tạo giới hạn di chuyển và vùng tương tác trong game 43
3.3.3 Tạo chuyển động trong game 43
3.3.3 Viết code cho các xử lý 45
Trang 43.3.4 Thiết lập âm thanh trong Game 46
3.4 Giao diện trò chơi 47
KẾT LUẬN 50
1 Nhận xét, đánh giá 50
2 Hướng phát triển đề tài 50
TÀI LIỆU THAM KHẢO 51
Trang 5LỜI NÓI ĐẦU
Với sự phát triển một cách nhanh chóng như vũ bão của công nghệ và Internet của thế giới nói chung và Việt Nam nói riêng thì game gần như không còn là một khái niệm xa lạ đối với mỗi cá nhân, ngược lại còn cảm thấy rất gần gũi trong cuộc sống chúng ta Chúng ta có thể bắt gặp những trò chơi trên những thiết bị công nghệ nhỏ nhất cho đến những thiết bị công nghệ cao hơn
Nói đến game thì chắc hẳn phần lớn mọi người đều đồng ý đó là một loại hình giải trí có sức thu hút rất lớn,nhất là với giới trẻ hiện nay Đặc biệt sau sự ra đời của Internet, game online xuất hiện và nhanh chóng gây được sức hấp dẫn to lớn Chúng ta
có thể chơi game online trên mạng, các game offline trên PC, các game trên các dòng máy chuyên như Play Station của hãng Sony với những phiên bản PS2, PS3, PS4… hiện nay game cũng đang được phát triển mạnh trên các thiết bị di động như điện thoại
di động, các máy Xbox…Hàng năm lợi nhuận từ game đem về doanh thu lên đến hàng
tỉ đô la cho những công ty chuyên phát triển và sản xuất game như ở các nước phát triển như Nhật Bản, Mỹ có rất nhiều các công ty chuyên về sản xuất game như Nintendo, Sony, Sega và mỗi năm các công ty này đạt doanh thu hàng tỷ USD Hay với các nước đi sau như Hàn Quốc,Trung Quốc cũng có được một ngành công nghê game rất mạnh nhờ có sự đầu tư đúng đắn và chiến lược phát triển tốt Một trò chơi được mua về với giá hàng ngàn hay thậm chí hàng triệu, hàng tỷ đô la Không phải là những game cấu hình cao, đồ họa khủng mới có thể đêm về nguồn lợi nhuận khủng khiếp như vậy mà có những game rất đơn giản cấu hình thấp, đồ họa của những năm đầu tiên của thế giới công nghệ nhưng vẫn rất hấp dẫn và thu hút người chơi chỉ với những lối chơi cực kì đơn giản, nó không phải là một vẫn đề khó hiểu trong thời đại công nghệ hiện nay
Mặc dù VINASA xếp game là một trong 3 định hướng công nghệ chiến lược của hiệp hội này trong giai đoạn 2006-2010, bên cạnh định hướng phần mềm nhúng và ERP nhưng hiện tại thị trường game ở Việt Nam còn rất yếu
Trang 6CHƯƠNG 1 TỔNG QUAN VỀ UNITY 1.1 Giới thiệu về Unity
- Unity3D là một môi trường phát triển tích hợp, mạnh mẽ, hỗ trợ thao tác kéo thả, tuỳ biến giao diện nhanh chóng, trực quan
- Cung cấp các công cụ xử lý đồ hoạ, tích hợp sẵn thư viện vật lý, tính toán va chạm
- Hỗ trợ phát triển cả game 2D và 3D
- Hỗ trợ nhiều nền tảng thông dụng như OSX, Linux, Window, Web, iOS, Window Phone 8, Android, PS3, BB…
- Cộng đồng người dùng, hỗ trợ rộng lớn
- Có phiên bản miễn phí có thể chạy được trên Window và Mac OSX
- Unity3D hướng tới người sử dụng chuyên nghiệp và cả nghiệp dư, nên khá dễ
để sử dụng Với ngôn ngữ lập trình bằng C#, JavaScript hoặc BOO
- Ngày nay rất nhiều nhà phát triển game lựa chọn Unity3D để phát triển bởi khả năng hỗ trợ đa nền tảng và sự mạnh mẽ tiện dụng của Unity3D
- Đến với Unity, các bạn sẽ không cần phải băn khoăn về các vấn đề xử lý, các khái niệm đồ hoạ phức tạp tất cả đều trở nên dễ dàng và nhanh chóng với Unity
- Một số game được phát triển trên Unity như AngryBird, Elegy of War,…
- Ta có thể vào đây để download và cài đặt Unity3D trực tiếp tại trang chủ : http://unity3d.com/unity/download/
- Unity có 2 loại phiên bản, một cho người dùng free, và một phiên bản pro thì mất phí
Trang 7- Tải Unity về cài đặt bình thường, đến khi kết thúc cài đặt nền các bạn chọn phiên bản Pro thì cần phải mua, còn nếu là người dùng free thì chọn kích hoạt qua web, chỉ cần có kết nối mạng internet, sau đó chọn cài đặt thủ công và nhập mail, chọn free là có thể sử dụng một bản Unity free
1.2 Các khái niệm cơ bản
* Sprite
- Là một hình ảnh 2D của một game object có thể là hình ảnh đầy đủ, hoặc có thể
là một bộ phận nào đó
Trang 8* Animation
- Là tập một hình ảnh động dựa trên sự thay đổi liên tục của nhiều sprite khác nhau
* Key Frame
- Key Frame hay Frame là một trạng thái của một animation Có thể được tạo nên
từ 1 sprite hay nhiều sprite khác nhau
* Prefabs
- Là một khái niệm trong Unity, dùng để sử dụng lại các đối tượng giống nhau có trong game mà chỉ cần khởi tạo lại các giá trị vị trí, tỉ lệ biến dạng và góc quay từ môt đối tượng ban đầu
Ví dụ: Các đối tượng là đồng tiền trong game Mario đều có xử lý giống nhau, nên ta chỉ việc tạo ra một đối tượng ban đầu, các đồng tiền còn lại sẽ sử dụng prefabs Hoặc khi ta lát gạch cho một cái nền nhà, các viên gạch cũng được sử dụng là prefabs
Trang 101.3 Làm quen với môi trường Unity
- Phần số 3 màu xanh lá cây
- Phần này hiển thị thư mục Assets, chứa tất cả các tài nguyên của dự án game
- Ở phần này, bên cạnh tab khác, có phần Console để hiển thị các log trong quá trình debug
Trang 11- Phần đóng khung màu đà chứa các nút chuyên dụng:
+ Bốn nút bên trái: (1) tuỳ chọn cho phép dùng chuột kéo toàn bộ scenes, phóng
to, thu nhỏ, lựa chọn các đối tượng trong scenes (2) cho phép dùng chuột di chuyển các đối tượng trong scenes, (3) cho phép dùng chuột quay các đối tượng (4) cho phép dùng chuột phóng to, thu nhỏ các đối tượng
+ Ba nút ở giữa: (1) cho phép chạy demo game, (2) cho phép dừng game tại một frame nào đó, (3) cho phép chạy từng frame
+ Hai drop list bên phải: (1) cho phép tuỳ chọn hiển thị các layer, (2) cho phép chọn và lưu các bố trí do người dùng thiết lập
+ Ngoài ra còn có các cửa sổ khác của Unity, như Sprite Editor, Animation, Animator, Console và ta có thể tự tuỳ biến cho mình một bố cục sao cho thuận tiện với mình nhất nhưng khuyến cáo thì vẫn nên dùng bố cục mặc định (Chọn ở Top bar chọn Layout > Default)
1.3.2 Tạo và cấu hình với dự án 2D
a Tạo dự án
- Bật Unity lên, đặt tên cho Project và vị trí lưu trữ Sau đó chọn 2D hoặc 3D rồi
“Create project”
Trang 12- Chọn loại project là 2D sau đó gõ tên project xong nhấn Create Project Kết quả như sau:
- Tiếp theo, ở cửa sổ Project, ta sẽ tạo sẵn các thư mục để chứa tất cả các tài nguyên có sử dụng trong game sau này lần lượt là: Animations, Prefabs, Scripts, Sprites, Sounds, Scenes
- Click chuột phải vào thư mục Assets ở cửa sổ Project, ta chọn Create, chọn Folder
Trang 13- Kết quả như hình sau:
1.3.3 Tạo các đối tượng cơ bản
1.3.3.1 Game Object
a Empty Object
- Ở menu ta chọn GameObject, chọn Create Empty
- Ta có thể đổi tên, sao chép hay xoá các đối tượng thông qua cửa sổ này
- Empty game object là một đối tượng đơn giản nhất, khi mới tạo ra, chỉ chứa các thông số biến đổi (transform) ngoài ra nó sẽ không chứa bất kỳ một component nào cả
Trang 14Chúng ta có thể thêm các component hoặc để nhóm các đối tượng khác lại với nhau thành một nhóm, hoặc sử dụng các empty object cho các mục đích khác
b Parent object và Child object
- Parent object: là một đối tượng chứa các đối tượng con khác, gắn liền với nhau
- Child object: là một đối tượng nằm trong một đối tượng khác, gắn liền với nhau
- Để tạo các đối tượng parent và child, ta chỉ việc kéo thả một đối tượng có sẵn vào trong đối tượng đã có trong cửa sổ Hierarchy Khi thay đổi các đối tượng con thì chỉ có tác động trên đối tượng con đó
- Khi thay đổi đối tượng cha thì các đối tượng con sẽ thay đổi theo
Trang 15- Danh sách các Tag đã tạo
1.3.3.2 Sprite
- Có 2 loại sprite là Single sprite và Multiple sprite
+ Single sprite:
Ở cửa sổ Project, chọn thư mục Assets, R-Click vào thư mục Sprites,
chọn Import New Assets, sau đó tìm đến một hình ảnh nào đó (Sử dụng hai ảnh
ground.png và coin_gold.png, để tiếp tục làm game ở các phần sau)
Ở cửa sổ Inspector, chọn Texture Type là Sprite, Sprite Model là single, sau đó nhấn Apply
Trang 16+ Multiple sprite:
Tiến hành tương tự, Import New Assets, chọn đến một tập tin ảnh chứa nhiều Sprite như ở ví dụ trên, sau đó ở cửa sổ Inspector chọn Texture Type là Sprite, Sprite Model là Multiple Xong nhấn Apply
Tiếp theo ta cần xác định các vùng bao, để xác định các sprite con thuộc Multiple sprite vừa import vào đó bằng cách ở bảng Inspector chọn Sprite Editor
Ở cửa sổ Sprite Editor, ta chọn Slice, sau đó để mặc định các thông số, chọn nút Slice, Unity sẽ tự động xác định vùng bao nhỏ nhất cho các sprite cho chúng ta Hoặc chúng ta có thể tự dùng chuột để xác định các vùng bao này
Trang 17Sau đó nhấn nút Apply ở cửa sổ Sprite Editor để áp dụng
Vậy là ta đã tạo xong hai loại sprite bằng Unity
c Thêm Sprite render cho Empty GameObject
- Tạo một Empty GameObject, đặt tên là Ground Sau đó chọn đối tượng này, ở
cửa sổ Inspector ta chọn Add Component sau đó chọn Rendering, chọn Sprite Render
- Tiếp theo, ở mục Sprite Render ở cửa sổ Inspector, ta chọn Sprite để vẽ (Nút khoan tròn đỏ) hoặc ta có thể kéo thả trực tiếp vào đó
Trang 181.3.3.3 Animation
- Một animation là một hình ảnh động mô tả một đối tượng nào đó trong game
Ví dụ: có thể là một chiếc xe đang chạy, hay một nhân vật đang đi
- Một animation trong Unity có thể bao gồm nhiều hành động, một hành động như vậy gọi là một clip
Ví dụ: một nhân vật có thể có các hành động đi, đứng, nhảy
- Có hai kỹ thuật để tạo animation (cả 2D và 3D): đó là kỹ thuật key frame và kỹ thuật skeletal hay spine
a Kỹ thuật tạo animation
- Kỹ thuật key frame
- Đối với kỹ thuật key frame, người ta sử dụng một sprite cho một key frame của hành động
Trang 19- Mỗi sprite là một Key Frame
- Để tạo ra chuyển động, ta sẽ vẽ một key frame tại thời điểm đầu và thay đổi tuần tự các key frame sau, chúng ta sẽ có được một animation
- Đây là phương pháp đơn giản nhất để tạo chuyển động, nhưng lại tốn kém về
bộ nhớ, vì ta phải tốn nhiều sprite cho nhiều chuyển động khác nhau
- Kỹ thuật skeletal hay spine hay bộ xương
- Đối với kỹ thuật này, người ta chia đối tượng ra thành nhiều sprite, mỗi sprite là một bộ phận của đối tượng (giống như 1 khúc xương của bộ xương) Để tạo ra một key frame mới, ta sẽ thay đổi các sprite về vị trí, độ lớn, xoay của các sprite thành phần có liên quan đến chuyển động Sau đó kết hợp các key frame lại với nhau như kỹ thuật key frame để tạo thành các animation
- Chúng ta có thể xem các sprite cấu tạo nên một key frame ở ảnh dưới
- Cách này có vẻ tốn thời gian hơn, nhưng lại rất là hiệu quả, đặc biệt là tiết kiệm được nhiều bộ nhớ
b Tạo animation bằng Unity
- Cách tạo animation theo kỹ thuật Key Frame Cách tạo animation theo skeletal cũng tương tự
- Từ phần trước chúng ta đã tạo được những Sprite cơ bản như sau:
Trang 20+ Bước 1: Tạo một Empty GameObject đặt tên là MainCharacter (Parent Object)
+ Bước 2: Tạo một đối tượng Empty GameObject nữa, đặt tên là Animations, là
đối tượng con của MainCharacter (Đối tượng con nên đặt ở vị trí 0,0,0)
+ Bước 3: Thêm Sprite Render cho đối tượng con Animations vừa tạo Rồi chọn
sprite hiển thị mặc định cho Animation này Kết quả như sau:
+ Bước 4: Chọn đối tượng MainCharacter ở cửa sổ Hierarchy, rồi chọn Menu ->
Window -> Animation
- Một cửa sổ Animation editor hiện ra như sau:
+ Hình chữ nhật đỏ nhỏ: nút play để xem trước animation
+ Hình chữ nhật đỏ lớn: danh sách các clip hiện thời của aniamtion
+ Hình chữ nhật vàng: thanh key frame
- Đầu tiên ta sẽ click vào danh sách clip rồi chọn Create New Clip, ta đặt tên clip
là Running, rồi save lại ở thư mục Animations của Assets
- Bước 5: Ở cửa sổ Animation Editor, chọn Add Curve, chọn Animations (Đối
tượng con của đối tượng MainCharacter) chọn Sprite Render, chọn Sprite (Đối với
một clip bất kỳ, bước này bắt buộc phải có)
4 Prefab
Trang 21- Prefab cho ta tạo ra các bản sao nhanh của một đối tượng mà không cần thiết lập lại các giá trị khởi tạo của một đối tượngnào đó ngoài trừ các giá trị transform (vị trí, tỉ lệ, quay)
- Để tạo một Prefab cho một đối tượng nàođó, ta chỉ cần kéo thả đối tượng đó ở cửa sổ Hierarchy xuống thư mục Prefab (nếu chưa có thì tạo mới) trong cửa sổ Project của chúng ta Sau này muốn sử dụng ta chỉ việc kéo các Prefab này trở lại cửa sổ Scene
- Bây giờ ta sẽ kéo thả Prefabs này tạo thành một đường thẳng, và đặt lại vị trí đối tượng MainCharacter ở vị trí nằm trên đường thẳng này như hình vẽ
- Chú ý: là đặt vị trí của đối tượng MainCharacter, chứ không phải đối tượng con Animation của MainCharacter Vị trí của đối tượng Animation bây giờ vẫn là (0, 0) so với đối tượng Maincharacter (vì là đối tượng con) nghĩa là đối tượng Animation này nằm tại tâm của đối tượng MainCharacter
1.3.3.4 Script và điều khiển máy trạng thái
a Script
Trang 22- Script là một tập tin (cũng là Game Component) chứa các mã điều khiển cho một đối tượng nào đó trong game, được viết bằng C# hay Javascript hoặc BOO (Trong bài hướng dẫn này, chúng ta sẽ sử dụng C#)
- Để tạo script ta click chuột phải ở thư mục Scripts/Create/C# Script
- Ta tiến hành đổi tên file Script và tên class thành MainCharacterBehavior (Behaviour script của đối tượng MainCharacter)
Chú ý: tên lớp và tên file script phải giống nhau
- Với mỗi script tạo ra, ta cần chỉ định script này thuộc về đối tượng nào Ta thực hiện bằng cách:
Trang 23- Chọn đối tượng MainCharacter ở cửa sổ Hierarchy, ở cửa sổ Inspector chọn Add Component/Scripts/Main Character Behaviour.cs ở danh sách Sau khi add:
Trang 24- Ta sẽ thấy ở cửa sổ Inspector khi chọn đối tượng MainCharacter sẽ thêm một Component nữa là Rigidbody 2D như sau:
- Một số giá trị cần lưu ý sau:
+ Mass: là khối lượng của đối tượng
+ Linear Drag: Hệ số ma sát của vật đối với chuyển động kéo
+ Angular Drag: Hệ số ma sát của vật đối với chuyển động quay
Trang 25+ Gravity scale: giống như hệ số G trong vật lý (~ 9.81), chỉ sự ảnh hưởng của lực hút trái đất Ta có thể đặt = 0, tức là không ảnh hưởng bởi lực hút trái đất
+ Is Kinematic: loại bỏ tác dụng vật lý ra khỏi đối tượng, thường sử dụng với các đối tượng như tường, nền
+ Fixed Angle: Đối tượng luôn nằm một góc cố định Không thay đổi khi tương tác vật lý
+ rigidbody2D.AddForce(Vector2 f): phương thức tác dụng một lực vào đối tượng
Đối tượng sẽ có thêm thuộc tính Collider:
Trang 261.3.3.6 Sound
- Đầu tiên, ta sẽ import một tập tin mp3 vào dự án để làm nhạc nền, bằng cách click chuột phải vào thư mục Sounds, chọn Import New Assets, sau đó tìm đến tập tin MP3 của mình
- Để sử dụng và quản lý sound, ta sẽ quản lý thông qua một đối tượng trong game
- Tiến hành tạo mới một Empty game object, đặt tên là SoundManager, sau đó thêm Audio Source component cho đối tượng này