Bài 4: Tìm hiều về Collision, Trigger, Input trong Unity3D

1. Collision:

Collision nghĩa là sự va chạm – khái niệm này gắn liền với Component Collider trong Unity. Unity cung cấp cho chúng ta một Class Collider trong đó có 3 Messages Sent (một kiểu event – sự kiện) để kiểm soát trạng thái của Collision như sau:

void OnCollisionEnter(Collision info)
{
Debug.Log(“Phat hien va cham voi: ” + info.gameObject.name);
}

void OnCollisionStay(Collision info)
{
Debug.Log(“O lai voi: ” + info.gameObject.name);
}

void OnCollisionExit(Collision info)
{
Debug.Log(“Da thoat ra khoi: ” + info.gameObject.name);
}

 *Lưu ý: Thật sự Class này cung cấp 6 Messages Sent về Collision, tuy nhiên chúng ta khảo sát trước về 3 Messages Sent trên, 3 Messages Sent còn lại sẽ được nêu ngay sau đây (ở phần nói về Trigger).

Ví dụ: Cách đơn giản nhất để làm quen với code là khảo sát ví dụ, chúng ta sẽ khảo sát thử OnCollisionEnter – một Messages Sent thường dùng nhất:

-Ta vẫn lấy bài ví dụ từ bài 3 trước.

Click phải ở cửa sổ Project và chọn Create -> Script->Ngôn ngữ phát triển là C#

Đặt tên tùy ý rồi double click để mở file, viết đoạn Code như bên trên.

Snap7

-Quay lại Unity, kéo thả tập tin code vừa tạo vào Cube để attach, nhấn play và theo dõi (Lưu ý: chúng ta cần mở Console lên để xem nhé, nhấn Ctrl+Shift+C thì nó sẽ hiện)

Snap8

 

 

Hình trên là kết quả sau khi Cube rơi và va chạm với Plane. Điều này chứng tỏ OnCollisionEnter đã phát hiện sự va chạm giữa Collider của nó (Cube) và Plane và thực thi lệnh in ra Debug. Info với type là Collision là biến nắm giữ thông tin của sự va chạm, bên trên viết info.gameObject.name nghĩa là tên của GameObject có collider va chạm với collider của Cube.

Tương tự với OnCollisionEnter, OnCollisionStay và OnCollisionExit sẽ bắt sự kiện Stay(ở lại) hoặc Exit(ra khỏi, thoát ra) khi có một collider nào thực hiện những tương tác này với collider của GameObject được attach code.(Nếu bạn kích hoạt cái Materialbouncy thì bạn sẽ thu được kết quả như hình dưới )

Snap10

-Cube sẽ vừa va chạm với Plane và khi nảy ra thì hàm Exit sẽ được gọi và trả về là đã thoát ra khỏi Plane

*Lưu ý: Các Message Sent trên sẽ không có tác dụng khi attach vào đối tượng không có collider, Unity sẽ không báo lỗi vấn đề này.

2. Trigger:

Vừa trên chúng ta đã khảo sát về code xoay quanh Collision, như vậy chúng ta đã phần nào suy ra được những khả năng ứng dụng của chúng. Bây giờ chúng ta sẽ khảo sát về một ứng dụng khác và rất phổ biến của Collider và Collision đó là Trigger.

Trigger theo Google Translate nghĩa là “Kích hoạt” hay “Cò súng”. Trong Unity, Trigger là một loại Collider có thể xuyên qua, nếu Collider thông thường dùng để phát hiện va chạm và ngăn chặn mọi tác động xuyên qua Object của một Collider khác thì Trigger chỉ đóng vai trò phát hiện ra sự va chạm nhưng vẫn cho Collider tạo nên sự va chạm đó đi xuyên qua Object.

Thao tác tạo Trigger cũng giống như tạo Collider, tuy nhiên sau khi tạo ra Collider, chúng ta check chọn giá trị “Is Trigger”  trong Component Collider đó.

Như vậy Trigger cũng không khác mấy, thế Unity cho chúng ta khái niệm Trigger để làm gì?

Thử nhớ lại khi chơi game chúng ta thường thấy điều này: “đến một nơi nào đó và có một sự kiện nào đó diễn ra!” – vậy tại sao hệ thống biết được người chơi đã đến đó để cho sự kiện đó xảy ra đúnh lúc họ đến? Phải có một thứ gị thông báo cho hệ thống biết chứ? Vâng! Đó chính là Triger. Để dễ hiểu nhất, tôi có chuẩn bị một video minh họa sau:

Dưới đây là đoạn code được attach vào Object được dùng làm Triger:

Snap11

Như vậy chúng ta thấy, Triger gần như hoàn toàn giống Collider nhưng có tính ứng dụng khác ở chỗ Triger có thể xuyên qua. Dưới đây là 2 Message Sent khác cùa Trigger, 3 Message Sent này hợp cùng 3 Message Sent chúng ta đã khảo sát ở phần 1 tạo nên 6 Message Sent gắn liền với Class Collider, chuyên đảm nhận các vấn đề xoay quanh Collision Của Collider.

-OnTriggerExit

-OnTriggerStay

*Lưu ý: Để xây dựng Trigger bắt sự kiện ở một vị trí nào đó như trên, chúng ta có thể tạo đơn giản bằng một cube, check “Is Trigger” sau đó bỏ check Mesh Renderer của Cube.
-Nhắc lại tính ứng dụng của Collider, ngoài ứng dụng xoay quanh va chạm, ta có thể lợi dụng khả năng ngăn cản các đối tượng có collider xuyên qua bằng cách tạo ra các Collider vô hình cho “trấn thủ” ở những nơi mà chúng ta không muốn cho người chơi đi qua!(Các bạn có thể làm theo hướng dẫn như hình dưới)

Snap13

Sau khi bỏ check Mesh Renderer thì kết quả như dưới, đối tượng Cube đã bị ẩn

Snap14

3. Input:
Không liên quan đến 2 vấn đề trên, hôm nay chúng ta đẩy tiến độ học Unity của mình nhanh hơn chút để nhanh có thể làm được game, khảo sát thêm một ít về Input nhé!
Ở đây tôi chỉ nêu về Input trên PC
Input trên PC thì có Mouse và Keyboard, tất cả được Unity cung cấp trong class Input và công cụ Input Manager.
Đầu tiên để define các phím nào có chức năng gì, chúng ta vào menu: Edit -> Project Setting -> Input.

 

Chúng ta lưu ý nhất ở Input qua NamePositive Button, Name đơn giản là một label cho biết chức năng của input đó, Positive Button cho biết đó là  “nút nhấn nào”?
Để bắt sự kiện Input, thông thường chúng ta sẽ code trong Function Update. Nói sơ về Update, đây là một Function cơ bản nhất thường dùng để kiểm soát đa số các sự kiện trong game, nó luôn luôn được gọi ở mỗi khung hình (frame). Nếu nói rõ về Update thì chúng ta sẽ phải đề cập đến nhiều hàm, khái niệm liên quan mật thiết khác, nên tôi sẽ không xoáy sâu vào nó, chúng ta sẽ có một bày riêng hẳn cho vấn đề này! ^^

-GetAxis
-GetAxisRaw  
-GetButton 
-GetButtonDown
-GetButtonUp
-GetKey
-GetKeyDown 
-GetKeyUp  
-GetJoystickNames  
-GetMouseButton  
-GetMouseButtonDown  
-GetMouseButtonUp 
-ResetInputAxes  
-GetAccelerationEvent  
-GetTouch 
*Tham khảo chi tiết về Input tại: http://docs.unity3d.com/Documentation/ScriptReference/Input.html

Nguồn: http://vietgamedev.net/

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s