Đề tài: Tìm hiểu về Game và cách xây dựng Game đa nền tảng với Unity Engine được nghiên cứu với các nội dung: Giới thiệu chung, làm quen với môi trường Unity, làm quen với môi trường Unity Engine, kết luận. Để hiểu rõ hơn về đề tài mời các bạn cùng tham khảo tài liệu.
MỤC LỤC Lời mở đầu Chương 1. Giới thiệu chung .3 1.1. Giới thiệu về Unity 1.2. Tính năng của Unity 1.3. Các khái niệm cơ bản trong Unity 46 Chương 2. Làm quen với môi trường Unity .7 2.1. Tìm hiểu và khởi tạo các đối tượng cơ bản trong Unit 729 2.2. Thành phần vật lý và xử lý va chạm 2931 2.3. Xử lý Text, hiệu ứng trong game và chuyển màn chơi 3235 2.4. Một số cơ sở dữ liệu trong game Unity 3640 Chương 3. Làm game với Unity Engine 41 3.1. Giới thiệu game đang thực hiện .4143 3.2. Mục tiêu đề tài 44 3.3. Tài liệu tham khảo 44 Kết Luận .45 ~ 1 ~ Lời mở đầu Ngày nay, Cơng nghệ thơng tin đang là nghành được đầu tư phát triển rộng rãi nhất, ta có thể thấy máy tính, laptop xuất hiện ở khắp nơi như tại doanh nghiệp, cơng ty, nhà trường. Cơng nghệ thơng tin khơng chỉ giúp ta hồn thành cơng việc 1 cách nhanh chóng, chính xác mà còn là thứ có thể đáp ứng nhu cầu giải trí cho mọi người sau một ngày làm việc mệt mỏi. Chỉ với một cái laptop hay 1 cái máy tính để bàn ta có thể sử dụng để xem phim, nghe nhạc và chơi game. Hơn nữa sự bùng nổ của CNTT cũng kéo theo những chiếc PC, laptop, điện thoại có cấu hình khủng giúp chúng ta có thể làm mọi việc trên 1 chiếc máy tính. Đặc biệt Chính vì vậy, nội dung luận văn mà em sẽ thực hiện là tìm hiểu về Game và cách xây dựng game đa nền tảng với Unity Engine. ~ 2 ~ Chương 1. Giới thiệu chung 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 tố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 1.2. Tính năng của Unity Unity3D hướng tới người sử dụng chun 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ăng 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 ~ 3 ~ 1.3. Các khái niệm cơ bản trong Unity 1.3.1. GameObject Một đối tượng cụ thể trong game gọi là một game object, có thể là nhân vật, đồ vật nào đó Ví dụ: cây cối, xe cộ, nhà cửa, người 1.3.2. 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), thành phần xử lý va chạm (collision), tính tốn vật lý (physical), mã điều khiển (script), các thành phần khác mỗi thứ như vậy gọi là một component của GameObject 1.3.3. 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 đó. 1.3.4. Animation ~ 4 ~ 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 1.3.5. 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 1.3.6. 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 1.3.7. Sounds Âm thanh trong game 1.3.8. 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ể dung ngơn ngữ lập trình C#, Java Script, BOO để lập trình Script ~ 5 ~ Unity có hỗ trợ sẵn phần mềm MonoDeveloper dùng để lập trình 1.3.9. Scenes Quản lý tất cả các đối tượng trong một màn chơi của game. Ảnh minh họa scene game 1.3.10. Assets Bao gồm tất cả những gì phục vụ cho dự án game như sprite, animation, sound, script, scenes… 1.3.11. Camera ~ 6 ~ Là một game object đặc biệt trong scene, dùng để xác định tầm nhìn, quan sát các đối tượng khác trong game 1.3.12. Transform Là 3 phép biến đổi tịnh tiến, quay theo các trục, và phóng to thu nhỏ một đối tượng Chương 2. Làm quen với mơi trường Unity 2.1. Tìm hiểu và khởi tạo các đối tượng cơ bản trong Unity Ảnh minh họa bố trí của Unity 2.1.1. Các thành phần và bố trí a. Scene ~ 7 ~ Phần màu đỏ số 1 Phần này phần hiển thị các đối tượng trong scenes một cách trực quan, có thể lựa chọn các đối tượng, kéo thả, phóng to, thu nhỏ, xoay các đối tượng Phần này có để thiết lập một số thơng số như hiển thị ánh sáng, âm anh, cách nhìn 2D hay 3D b. Game Phần màu đỏ số 1 Phần này cho phép ta xem trước hiển thị từ scene ra game, bên cạnh tab scene c. Inspector Phần số 2 màu vàng Phần này hiển thị các component của một Game Object và các thơng số của các component d. Project 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 ngun 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 q trình debug e. Hierarchy Phần đóng khung màu tím Phần này quản lý tất cả các đối tượng trong scenes, có thể chọn lựa, đổi tên, xố các đối tượng ra khỏi game f. Top bar ~ 8 ~ Phần đóng khung màu đà Phần này chứa các nút chun dụng: + Bốn nút bên trái: (1) tuỳ chọn cho phép dùng chuột kéo tồ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 Ngồi ra còn có các cửa sổ khác của Unity, như Sprite Editor, Animation, Animator, Console và các bạn 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 2.1.2. Tạo và cấu hình với dự án 2D Bật Unity lên, vào menu File/New Project ~ 9 ~ Ảnh minh họa Chọn loại project là 2D sau đó gõ tên project xong nhấn Create Project. Kết quả như sau: ~ 10 ~ Với mỗi địch bị tiêu diệt bạn sẽ nhận được 100 điểm, game có tính thời gian chơi sau khi kết thúc trò chơi thời gian chiến đấu sẽ được tính như điểm thưởng với 1s = 1 điểm Khi đạt được số điểm nhất định bạn sẽ được chuyển sang màn đánh với Boss, sau khi tiêu diệt boss điểm thưởng ( thời gian ) sẽ được nhân đơi cùng với số điểm tiêu diệt mặc định là 1000 điểm 3.1.3. Một số hình ảnh về game: *Màn khởi động + Gồm 4 nút: New game : chuyển đến màn chơi 1 LeaderBoard: click vào nút này ta có thể xem bảng xếp hạng điểm số người chơi Game Info: Thơng tin về game, hướng dẫn cách chơi ~ 48 ~ Exit: Thốt khỏi trò chơi + Code xử lý khi click button: Chuyển màn chơi: Ví dụ: Application.LoadLevel(“ingame01”) hay Application.LoadLevel(1); => Với phiên bản hiện tại của Unity (5.4) khuyến khích dùng SceneManager.LoadScene(string name) or SceneManager.LoadScene (int index), và để sử dụng ta phải khai báo thư viện : using UnityEngine.SceneManagement; Thốt game: Application.Quit(); *Màn 1: ~ 49 ~ + Code xử lý điều khiển game: Di chuyển Player với 4 phím A, D, W, S ( trái, phải, trên, dưới ) và bắn đạn với phím space ( phím cách ): *Chú thích: Như đã nói ở phần trên các phương thức áp dụng: Input.GetKey: Nhấn và giữ để thực thi Input.GetKeyDown: Chỉ cần nhấn nút Input.GetKeyUp: Nhấn rồi thả. Điều khiển AI tự động được khởi tạo, bay và bắn: Khởi tạo: ~ 50 ~ InvokeRepeating( string name, float timebegin, float timedelay): Thực thi nhiều lần 1 hàm với thời gian bắt đầu ( timebegin ) và thời gian trì hỗn để thực thi tiếp ( timedelay ), tham số name là tên hàm cần thực thi Instantiate( GameObject object, Vector3 position, Quaternion rotation): Hàm tạo bản sao 1 đối tượng với vị trí và xoay chỉ định theo tham số Object: đối tượng cần tạo clone ( bản sao) Position: vị trí cần khởi tạo Rotation: góc xoay. AI di chuyển và tạo đạn: ~ 51 ~ Transform.Translate( Vector3 transition): di chuyển 1 đối tượng theo hướng nào đó, biến speed * Time.deltaTime chính là tốc độ di chuyển trên thời gian thực tính bằng giây Destroy(this.gameObject) hoặc Destroy(gameObject): hủy đối tượng gắn script này với 1 điều kiện nào đó Hàm Instantiate ở trên để tạo bản sao của đạn tại vị trí và góc xoay của địch (AI) Chú ý: Những đối tượng cần tạo bản sao phải tạo Prefabs cho đối tượng đó, thường là những đối tượng xuất hiện nhiều lần trong game Để AI bắn đạn về phía người chơi cần xử lý tốc độ và hướng đạn: ~ 52 ~ GameObject player = GameObjec.Find(“Player”): tìm kiếm đối tượng với tên Player và gán nó cho biến player để thao tác Direction = player.transform.position – transform.position: biến direction kiểu Vector3 sẽ nhận giá trị là 1 vector hướng từ vị trí AI đến người chơi Ở trên hàm Update() sẽ thực thi việc bắn đạn theo hướng vector direction với speed*Time.deltaTime ( tốc độ nhân với thời gian thực) Time.deltaTime : trả về thời gian game bắt đầu đến khi kết thúc frame cuối cùng, trả về đơn vị là giây theo thời gian thực Định dạng hiển thị thời gian: ~ 53 ~ SceneManager.GetActiveScene().buildIndex: trả về giá trị index kiểu int của scene hiện tại *Màn Boss: Khi chuyển từ 1 scene sang một scene khác đối tượng sẽ bị hủy, vì thế để chuyển các đối tượng cần thiết sang màn boss này ta dùng hàm: ~ 54 ~ DontDestroyOnLoad(gameObject); Ở màn boss này có 1 xử lý khá khó nữa mà em cần tham khảo đó là việc boss di chuyển lên xuống tuần hồn: void Update () { Vector3 currentposition = Vector3.Lerp(upposition.position, downposition.position,Mathf.Cos(Time.time/Traveltime*Mathf.PI*2) * -.5f+.5f); GetComponent().MovePosition(currentposition); } Vector3.Lerp(): hàm cho phép ta di chuyển giữa 2 điểm. Đoạn code trên ta cần khởi tạo 2 đối tượng là Upposition và downposition làm điểm giới hạn di chuyển trên dưới của đối tượng Ta có thể tăng hoặc giảm tốc độ di chuyển qua tham số Traveltime, traveltime càng lớn đối tượng di chuyển càng chậm *Màn thua: ~ 55 ~ Sau khi chỉ số thanh HP của người chơi = 0 thì sau vài giây sẽ chuyển qua màn này Điểm chính trong scene này là việc lưu tên, tính tổng điểm của người chơi với nút Save scores. Vì PlayerPrefs có hạn chế trong việc lưu trữ và load dữ liệu giữa các màn nên ta sẽ lưu trữ dưới dạng File ~ 56 ~ Tạo 1 class tĩnh SaveLoadinfo với 2 hàm Save() và Load() , 1 List tĩnh chứa thơng tin người chơi ( tên, điểm số ) Với việc thêm từ khóa static( tĩnh) giúp cho lập trình viên có thể truy xuất các biến và hàm của class này từ 1 class khác Hàm Save(): Khởi tạo và ghi dữ liệu vào file Hàm Load(): Kiểm tra xem file có tồn tại ko, nếu có thì load dữ liệu ra và gán cho 1 biến nào đó, đoạn code trên ta lưu vào1 list lên khi load cần gán giá trị cho list đó Lớp scoreinfo là 1 đối tượng của list chứa thơng tin người chơi như: tên, điểm số *Màn khi chiến thắng: ~ 57 ~ Cách xử lý tương tự như màn thua chỉ thêm hiệu ứng như pháo hoa với việc sử dụng Particle system *Bảng xếp hạng: ~ 58 ~ Những xử lý quan trọng trong phần này là về cơ sở dữ liệu, cách load dữ liệu từ file ra bảng, xếp hạng người chơi theo điểm số Để show dữ liệu ra bảng thì trước hết cần có dữ liệu, ta gọi hàm Load() của class SaveLoadinfo: SaveLoadinfo.Load() Xếp hạng người chơi theo điểm số: Vì dữ liệu lưu vào là 1 list nên ta có hàm Sort() dễ dàng sắp xếp thứ tự các đối tượng trong list theo 1 điều kiện nào đó Hàm Sort() chỉ được thực hiện khi đối tượng là class scoreinfo thêm IComparable, hàm này sẽ so sánh giá trị đầu tiên với giá trị thứ 2 được thêm vào và giá trị nào lớn hơn sẽ được xếp lên trước. ~ 59 ~ 3.2. Mục tiêu đề tài Đã nắm bắt được một số xử lý cơ bản trong Unity và sử dụng được 2 loại lưu trữ database trong bài là: PlayerPrefs và dạng file Mục tiêu : + Biết sử dụng nhiều loại database hơn để làm game trên Unity, nâng cao xử lý các hiệu ứng trong game : âm thanh, hình ảnh… + Có thể làm nhiều thể loại game 2D, 3D trên Unity 3.3. Tài liệu tham khảo * Một số link tham khảo : http://unity3d.com/learn/tutorials http://docs.unity3d.com/ScriptReference/ ~ 60 ~ http://www.stdio.vn/articles/read/317/luutruthongtingamevoiplayerprefs http://share3dvn.blogspot.com/2011/12/unitynangcaop5database.html ~ 61 ~ Kết Luận Cùng với sự phát triển kinh tế, xã hội của thế giới đó là nhu cầu giải trí ngày càng cao của con người. Một trong những nhu cầu giải trí đó là chơi game, một hình thức giải trí dành cho mọi lứa tuổi những lúc rảnh rỗi hay căng thẳng vì cơng việc. Là 1 lập trình viên hay những người có hứng thú với game nên tìm hiểu và làm ra 1 game mà mình mong muốn, điều này sẽ giúp cho đất nước ngày càng phát triển về kinh tế và tư duy của con người ~ 62 ~ ... Chính vì vậy, nội dung luận văn mà em sẽ thực hiện là tìm hiểu về Game và cách xây dựng game đa nền tảng với Unity Engine. ~ 2 ~ Chương 1. Giới thiệu chung 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 ... 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ăng khoăn về các vấn đề xử lý, các khái niệm đồ hoạ phức tạp... 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 ~ 3 ~ 1.3. Các khái niệm cơ bản trong Unity 1.3.1. GameObject Một đối tượng cụ thể trong game gọi là một game object, có thể là nhân vật,