4/10/2014

COOKBOOK - HIỂN THỊ TÊN ĐỒ VẬT ĐƯỢC NHẶT



Hầu hết các game đều có những món đồ vật buộc người chơi phải chạy đến để nhặt. Điển hình như việc nhặt một chiếc chìa khóa để mở một cánh cổng nào đó để đi tiếp chẳng hạn. Bài viết này sẽ hướng dẫn các bạn sử dụng collider để thực hiện điều đó.



Chuẩn bị

TextureImage.rar


Cách để làm

B1. Vào File | New Project và đặt tên cho project mới là Player Inventory. Và đánh dấu vào ô Character Controller.


B2. Kéo thả các file ảnh vừa tải ở phần Chuẩn bị về vào thẻ Project trong Unity.


B3. Tại thẻ Hierarchy, nhấp chọn nút Create | Terrain và qua thẻ Inspector điều chỉnh Position như hình dưới đây:


B4. Vẫn đang chọn Terrain ở thẻ Hierarchy, qua thẻ Inspector, điều chỉnh như hình sau:



B5. Vẫn tại thẻ Hierarchy, nhấp chọn nút Create | Cube đổi tên thành Cube-key và qua thẻ Inspector điều chỉnh như sau:


B6. Kéo thả file ảnh key_yellow vào Cube-key ở thẻ Hierarchy như sau:


B7. Kéo thả 3rd Person Controller trong thư mục Standard Assets | Character Controllers ở thẻ Project vào thẻ Hierarchy.


B8. Nhấp chọn 3rd Person Controller ở thẻ Hierarchy và qua thẻ Inspector điều chỉnh như sau:


B9. Tại thẻ Project, nhấp chọn nút Create | C# Script và đặt tên là PlayerInventory, chèn đoạn code sau vào:
 
using UnityEngine;
using System.Collections;

public class PlayerInventory : MonoBehaviour
{
    private bool isCarryingKey = false;
   
    private void OnGUI()
    {
        string keyMessage = "(bag is empty)";
        if( isCarryingKey )
        {
            keyMessage = "carrying: [ key ]";   
        }
       
        GUILayout.Label ( keyMessage );
    }
   
    private void OnTriggerEnter(Collider hitCollider)
    {
        if( "key" == hitCollider.tag )
        {
            isCarryingKey = true;
            Destroy ( hitCollider.gameObject );
        }
    }
}


B10. Kéo thả file C# PlayerInventory ở thẻ Project vào 3rd Person Controller ở thẻ Hierarchy.


B11. Tại thẻ Hierarchy, nhấp chọn nút Create | Directional Light.


B12. Nhấp nút Play để kiểm tra thành quả.



Nguyên lý làm việc

Biến luận lý CarryingKey biểu diễn việc người chơi có đang mang chiếc chìa khóa trong người tại bất kỳ thời điểm nào hay không.

Trong hàm OnGUI( ), biến mang chuỗi ký tự thông báo keyMessagestring được hiển thị thông qua hàm GUILayout.Label( ). Giá trị ban đầu của chuỗi này là thông báo việc hành lý của người chơi đang rỗng. Nhưng nếu hàm điều kiện If kiểm tra giá trị của CarryingKey là đúng thì thông báo sẽ được thay đổi rằng người chơi đang mang chiếc chìa khóa trong người.

Hàm OnTriggerEnter( ) sẽ kiểm tra chuỗi tag của bất kỳ vật thể nào mà 3rd chacracter controller va chạm vào nếu đối tượng đã được đánh dấu vào hôp chọn Is Trigger.

Mỗi lần nhân vật chạm vào bất kì vật thể nào, giá trị của Is Trigger sẽ được chuyển thành True, một thông báo sự kiện OnTriggerEnter( ) đều được gửi đến cả 2 vật thể đang va chạm.

Hàm OnTriggerEnter( ) được gán cho nhân vật sẽ kiểm tra tag của đối tượng, nếu tag là key thì hàm điều kiển sẽ phát hiện va chạm với Cube-key và sẽ thực hiện 2 hành động sau:
Điều chỉnh biến luận lý CarryingKey thành True.
Hủy đối tượng vừa va chạm (Trong trường hợp này là Cube-key).


Còn nữa...

So sánh tag của đối tượng bằng hàm chuỗi đặc biệt

So sánh chuỗi tag của đối tượng với một chuỗi là cách thông dụng mà Unity đã cung cấp. Hàm này có tên là CompareTag( ), và mang biến là một chuỗi. Vì vậy chúng ta có thể viết lại hàm điều kiện trong hàm OnTriggerEnter( ) như sau:

if( hitCollider.CompareTag("key") )

No comments:

Post a Comment