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.

Sunday, May 18, 2014

Unity Tutorials Training Video Series, Hướng dẫn làm game mario unity 2d

Xin chào,
Đây là loạt bài hướng dẫn làm game 2d Mario kinh điển với Unity 2d

game-mario-unity-2d
Game mario 2d Unity

Nội dung Tutorials :

2D Game Development - SideScroller - in HD

Prerequisite: Unity 2D Project Tools Dev completed

Part 0: Unity 2D   Introduction and Design Doc
Part 1: Unity 2D   Setting up
Part 2: Unity 2D   Getting Started
Part 3: Unity 2D   Character Animation
Part 4: Unity 2D   Controller Setup
Part 5: Unity 2D   Controller Types
Part 6: Unity 2D   Controller Move Jump
Part 7: Unity 2D   Controller Code Prep
Part 8: Unity 2D   Controller Idle, Walk, Run
Part 9: Unity 2D   Controller Crouch
Part 10: Unity 2D Controller Jump and Fall
Part 11: Unity 2D Controller Limit Jump Height
Part 12: Unity 2D Controller Jump Sound and Particle Effects
Part 13: Unity 2D Controller Code Conclusion
Part 14: Unity 2D Player Properties Explained
Part 15: Unity 2D Player Properties Setup
Part 16: Unity 2D Player Properties Player States
Part 17: Unity 2D Player Properties Conclusion
Part 18: Unity 2D Start Point, Save Point, and Kill Box
Part 19: Unity 2D Camera 1 - Orthographic and Perspective
Part 20: Unity 2D Camera 1 - Smooth Follow
Part 21: Unity 2D Camera 2 - Smooth Follow with Zooming
Part 22: Unity 2D Camera 3 - Border Follow - Original Mario
Part 23: Unity 2D Hud Setup
Part 24: Unity 2D Hud Timer Countdown
Part 25: Unity 2D Hud Coins and Lives
Part 26: Unity 2D Item Pickup Design
Part 27: Unity 2D Item Pickup Component
Part 28: Unity 2D Pickup Coin Rotate
Part 29: Unity 2D Pickup Mushroom Setup and Grow
Part 30: Unity 2D Pickup Mushroom Extra Life
Part 31: Unity 2D Fireball 
Part 32: Unity 2D Block Setup
Part 33: Unity 2D Block State Variables
Part 34: Unity 2D Block States 1
Part 35: Unity 2D Block States 2
Part 36: Unity 2D Block State After
Part 37: Unity 2D Block State Conclusion
Part 38: Unity 2D Block Bump
Part 39: Unity 2D Block Breakable
Part 40: Unity 2D Block Solid
Part 41: Unity 2D Block Coins
Part 42: Unity 2D Block Coins Prefab Hud Connection (check)
Part 43: Unity 2D Block Question
Part 44: Unity 2D Tube Portal
Part 45: Unity 2D Gumba Introduction
Part 46: Unity 2D Gumba Properties
Part 47: Unity 2D Gumba Function Setup
Part 48: Unity 2D Gumba Function Start
Part 49: Unity 2D Gumba Function Update Switch
Part 50: Unity 2D Gumba Function Move, Idle
Part 51: Unity 2D Gumba Function Jump, Die
Part 52: Unity 2D Gumba Function Chase
Part 53: Unity 2D Gumba Function Chase Gizmos
Part 54: Unity 2D Gumba Function Home
Part 55: Unity 2D Gumba Pathnode
Part 56: Unity 2D Gumba Pathnode Advanced
Part 57: Unity 2D Gumba Pathnode Screen Icons
Part 58: Unity 2D Gumba Continued
Part 59: Unity 2D Gumba Sound from Mario Stomp
Part 60: Unity 2D Pathnode Setup
Part 61: Unity 2D Killbox and Lives Update and Hud
Part 62: Unity 2D Attack Outlined and Gumba Collision Setup
Part 63: Unity 2D Collider Attack Box Component Setup
Part 64: Unity 2D Gumba Attack Collider 1
Part 65: Unity 2D Change Player State
Part 66: Unity 2D Player Property Finishing Touches
Part 67: Unity 2D World 1 - 1 Construction and WrapUp

Download Project: Download
Nguồn: http://walkerboystudio.com/

Friday, May 16, 2014

Wednesday, March 26, 2014

TÌM HIỂU VỀ GIAO DIỆN UNITY





Games trong Unity được tạo ra bởi tập hợp rất nhiều GameObject, trong đó bao gồm meshes, scripts, âm thanh, hay những đối tượng graphic như nguồn sáng v..v... Inspector sẽ hiển thị mọi thông tin về đối tượng đang làm việc một cách chi tiết, kể cả những Components được đính kèm và những thuộc tính của nó. Tại đây bạn có thể điều chỉnh, thiết lập mọi thông số chức năng của những mối liên kết GameObject-Component.




















Mọi thuộc tính thể hiện trong Inspector đều có thể được tùy biến một cách trực tiếp. Ngay cả với những biến trong script cũng có thể được hiệu chỉnh mà không cần xem mã. Trong script, nếu bạn định nghĩa một giá trị là public cho một kiểu đối tượng (như GameObject hay Transform), bạn có thể drag-drop một GameObject hay một Prefab vào trong Inspector để gán giá trị cho nó.



 

Chúng ta có thể click lên icon hình bánh răng nhỏ bên phải hay click chuột phải lên tên cảu Component để xuất hện context menu dành cho những thiết lập của Component.

 



Inspector cũng sẽ thể hiện mọi thông số Import Setting của assets đang làm việc.


Sử dụng thanh sổ Layer để sắp xếp các lớp sẽ được hiển thị..Thanh sổ của mục Tag giúp bạn đặt tag cho đối tượng được chọn.

Labels (Nhãn)

Unity cho phép các tài nguyên được gắn Label để dễ dàng truy cập và phân loại. Mục nằm dưới cuối cùng của  thẻ Inspector là bảng lựa chọn nhãn cho tài nguyên.
Nút (...) ở góc dưới bên phải cho phép bạn truy cập đến danh sách các nhãn của tài nguyên đang có.

 
Bạn có thể chọn một hoặc nhiều nhãn từ danh sách để gắn nhãn cho tài nguyên. Nếu bạn đã lựa chọn nhãn rồi mà tiếp tục chọn lại nhãn đó, chương trình sẽ hủy bỏ việc gắn nhãn đó cho tài nguyên.

 
Danh sách có phần cho bạn tìm kiếm cách nhãn trong danh sách. Bạn có thể tạo thêm các nhãn mới bằng việc gõ vào khung textbox, nhãn mới sẽ được thêm vào danh sách và được gắn vào tài nguyên đang được chọn. Nếu bạn hủy bỏ việc gắn nhãn tự tạo của tất cả tài nguyên thì nhãn tự tạo đó sẽ biến mất trong danh sách.

Monday, March 24, 2014

Lập trình game là gì???

Chào các bạn!

      Nhìn chung khi chưa biết lập trình game, chúng ta thường đặt câu hỏi: Lập trình game như nào có giống lập trình ứng dụng không? Có khó không? Có đòi hỏi những kỹ thuật gì đặc biệt không?

lap-trinh-game-mobile
Con gái cũng có thể lập trình game

Câu trả lời của tôi là: game cũng chỉ là một ứng dụng và nó cũng như bao ứng dụng khác. Khi viết một ứng dụng, bạn có thể bắt đầu từ hàm main, hoặc dùng IDE sinh cốt tự động để hỗ trợ. Game cũng vậy bạn có thể bắt đầu viết game từ hàm main, hoặc dùng Unity Engine hỗ trợ.

lap-trinh-game-mobile
Làm game có khó
Đứng từ phía cạnh lập trình, hay từ chủ quan của tôi, game đơn giản là "MỘT VÒNG LẶP VÔ TẬN".
Trong vòng lặp đó, bạn vẽ, bạn xử lý các biểu diễn của GAME. Tuy nhiên để làm game cho mục đích thương mại như Flappy Bird bạn cần phải học tập nhiều hơn nữa.

Một cách nhìn khác, game là một cuốn phim có tương tác. Nếu như bộ phim cần nhiều thứ như kịch bản tốt, dàn dựng hậu kỳ, kiểm duyệt quảng bá ... thì game cũng vậy.

Game cũng cần một nội dung hay, coding phải tối ưu, kiểm soát chất lượng và quảng bá tốt. Nếu một bộ phim thành công được đánh giá qua doanh thu, thì game cũng vậy.

TUY NHIÊN khi mới bắt đầu thì doanh thu - lợi nhuận cần được gạt ra khỏi tư tưởng của mình, để có đủ tỉnh táo tập trung vào chuyên môn.

Trên đây là quan điểm của DEV - Nguyễn Khánh Duy thành viên của diễn đàn vietgamedev.com về việc lập trình game như nào.

Tuesday, March 18, 2014

Những tính năng mới trong Unity 5

Unity vừa chính thức giới thiệu phiên bản mang mã số unity 5 tại trang chủ http://unity3d.com vào ngày 18/3/2014




Sau đây tôi xin điểm qua một số tính năng đáng chú ý trên phiên bản mới nhất của Unity 5 trên trang chủ http://unity3d.com/5

1. WebGL một sự cải tiến hoàn hảo, với unity 5 bạn có thể một trò chơi lên bất kỳ Browser hỗ trợ WebGL mà không đòi hỏi 1 plugin
2. New audio system: cải thiện hiệu quả và mạnh hơn, Unity 5 giúp cho các nhà phá triển
có thể chỉnh sửa audio theo ý mình
3. Real-Time Global Illumination
4. Unity Cloud