Tuesday, June 24, 2014

Làm Game 2D bằng Unity - Phần 7 - Sound và Design Pattern trong Game

Chào các bạn, 

Note: thời gian qua mình khá bận và không thu xếp được để viết bài 

Vừa rồi có một bạn hỏi cách làm sao để truyền một giá trị từ một script này sang script khác. Hôm nay mình sẽ trả lời chi tiết câu hỏi này trong phần hướng dẫn sử dụng Sound và Design Pattern trong game.

Trước khi đi tiếp, nếu bạn nào chưa đọc các phần trước, ta có thể tham khảo lại ở đây


Link dự án mẫu phần 7:  


III. Tạo các đối tượng cơ bản

1. Game Object

2. Sprite 

3. Animation 

4. Prefab 

5. Script và điều khiển máy trạng thái

6. Thành phần vật lý và xử lý va chạm

7. Sử dụng text

8. Sử dụng Particle System 

9. Chuyển đổi màn chơi 

10. 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.




Ở cửa sổ Inspector, ta nhấn nút được bao tròn ô vuông màu đỏ, để chọn nhạc (Nhớ là phải import nhạc vào sẵn), chọn Start on awake để tự động chơi nhạc mỗi khi đối tượng bắt đầu khởi tạo, chọn loop nếu cho phép nhạc lặp đi lặp lại.

 

Như vậy là ta đã có được nhạc nền cho game, nhấn thử nút Play để xem kết quả.

Tiếp theo ta sẽ import thêm một bài khác nữa, thao tác tương tự, để điều khiển bắt đầu nhạc, tạm dừng ta sẽ tạo một script cho đối tượng SoundManager, đặt tên là SoundManagerBehaviour

Ta sẽ viết Script như sau:




Như vậy, khi game chạy, mỗi lần nhấn nút P là nhạc tắt, nhấn nút S là nhạc chơi lại.
Ngoài ra các bạn có thể tìm hiểu thêm, để sử dụng linh hoạt hơn trong game tại https://docs.unity3d.com/Documentation/Manual/Sound.html.

11. Design Pattern trong game.


Design Pattern hay mẫu thiết kế, là cách xây dựng một lớp dựa trên một thiết kế nhất định nào đó. Ở bài này mình sẽ giới thiệu đến các bạn một Pattern được sử dụng nhiều trong game đó là Singleton.

Vậy khi nào thì sử dụng Singleton ? - Singleton sử dụng khi trong chương trình chỉ tồn tại duy nhất một instance (thể hiện or đối tượng) của một lớp nào đó.
Ví dụ: Ta có lớp SoundManager để quản lý tất cả sound cho game, thì suốt chương trình chỉ cần duy nhất 1 thể hiện của lớp SoundManager để quản lý âm thanh trong game.

Như vậy ta sẽ cài đặt lớp SoundManager theo mẫu Singleton. 

Về cơ bản mẫu Singleton được thiết kế như sau:



Hàm dựng (constructor) để là private, để đảm bảo không tạo được đối tượng từ bên ngoài lớp, chỉ cho phép tạo đối tượng từ hàm GetInstance thôi. Câu lệnh instance = this; để đảm bảo biến instance được trỏ đến đối tượng duy nhất vừa mới tạo ra.

Chúng ta có thể xem lại cách thiết kế của lớp SoundManagerBehaviour để thấy chi tiết.

Để sử dụng ta sử dụng như sau:




Như vậy ở bất cứ đâu trong dự án, muốn điều khiển Sound, bật tắt bài nào đó ta chỉ việc gọi SoundManagerBehaviour.GetInstances().Method() là được.






*** Cách truyền một giá trị từ script này sang script khác.
Nhu cầu truyền một giá trị từ script này sang script khác rất thường xuyên. Ở Unity một script được coi là một component của một GameObject, vì vậy để làm việc này ta chỉ cần xác định được đối tượng GameObject chứa script cần truyền giá trị, sau đó từ đối tượng này ta sẽ truy xuất giá trị cần thiết thông qua component script.

Ví dụ: ở Script SoundManagerBehaviour ta muốn truy xuất đến các giá trị ở Script MainCharacterBehaviour ta làm như sau:

Đầu tiên ta sẽ đặt cho đối tượng MainCharacter tag là: Player (Xem lại phần 2 để biết cách đặt tag).

Ở script SoundManagerBehaviour ta khai báo một đối tượng là mainCharacter kiểu GameObject.

Ở hàm Start của SoundManagerBehaviour ta thực hiện như sau:

 


Chú ý lênh mainCharacter = GameObject.FindGameObjectWithTag("Player"); cần phải đặt ở hàm Start (hàm này chỉ gọi một lần khi khởi tạo xong đối tượng), nếu lệnh này đặt ở Update/FixedUpdate/Render... thì sẽ làm chậm chương trình và không tối ưu. Vì quá trình tìm kiếm một đối tượng dựa vào tag hay vào một tiêu chí nào đó sẽ mất rất nhiều thời gian.

Sau khi tìm thấy đối tượng chúng ta có thể truy xuất, thay đổi các thành phần public của script đó bằng cách:
        if (mainCharacter != null)
        {
            MainCharacterBehaviour script = mainCharacter.GetComponent<MainCharacterBehaviour>();
            script.speed = new Vector3(1, 0, 0); // access and change speed value of main character
        }


Hoặc bạn có thể cài đặt đối tượng MainCharacter theo Singleton như hướng dẫn ở trên, vì thông thường trong một game thì chỉ có 1 MainCharacter.


Xong phần này về cơ bản bạn đã nắm được hầu hết các đối tượng cơ bản và cách xử lý các đối tượng cơ bản trong unity để làm cho mình một game 2D, phần sau mình sẽ trình bày ứng dụng một số thành phần cơ bản này để hoàn thành game.

Tag: Game Developmentgame mobile devlập trình game mobile, làm gamegame việtsản xuất game, lập trình game

Thursday, June 5, 2014

Tài liệu lập trình game mobile 2d với unity

Làm Game 2D bằng Unity - Phần 0 - Đôi nét về Unity và bài viết

Chào các bạn, 

Để tạo điều kiện cho các bạn đam mê và yêu thích lập trình game có thể thoã sức sáng tạo, làm quen với môi trường Unity, các bạn đang muốn tìm hiểu về lập trình game chưa có cơ hội tiếp xúc và tự tay phát triển một game, hoặc các bạn là chuyên gia về lập trình game có cái để góp ý, thể hiện với đàn em ... nên hôm nay mình sẽ viết một bài hướng dẫn "Làm game 2D bằng Unity3D".

Nội dung bài viết bao gồm các thuật ngữ, các khái niệm cơ bản thường thấy trong lập trình game và Unity, cách tạo, xử lý các đối tượng cơ bản nhất của một game 2D được sưu tầm từ nhiều nguồn trên Internet, bạn bè, người thân và rút ra từ kinh nghiệm của bản thân. 

Để cho cụ thể, dễ hiểu và thuận tiện hơn bài viết của mình sẽ hướng đến làm game "Running Man". Đây là một game với kịch bản khá quen thuộc.


Running Man

I. 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…

Hỗ trợ đa nền tảng

- 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ă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.

Một số game được phát triển trên Unity như AngryBird, Elegy of War,…
Unity3d.com.vn

Để bắt đầu các bạn có thể vào đây để download và cài đặt Unity3D : 
http://unity3d.com/unity/download/

Phần tiếp theo mình sẽ giới thiệu một số khái niệm cơ bản trong lập trình game, và làm quen với môi trường Unity.



Tag: Game Developmentgame mobile devlập trình game mobile, làm gamegame việtsản xuất game.