+1

Một số folder đặc biệt trong Unity

Phuong Le 2019 - phuongne


Hôm nay mình sẽ tới một phần khá thú vị, đa phần mọi người đều bỏ qua (hoặc là mỗi mình), phần này có thể là background cho các phần tối ưu (optimize) thời gian compile, sử dụng resources của mình hiệu quả hơn mà mình (có thể) sẽ đề cập trong các bài viết sau.

Assets

Tất nhiên rồi, Assets cũng là một folder đặc biệt trong Unity3D bởi nó chứa tất cả các assets của game, một số API của Unity3D cũng ngầm định sử dụng đường dẫn bắt đầu từ folder này.

Editor

Folder này chỉ NÊN chứa các script làm màu mè cho inspector hoặc hỗ trợ việc sử dụng Unity Editor dễ dàng hơn, ngầu hơn nữa. Folder này sẽ KHÔNG được nén và build. Có thể có nhiều folder Editor trong folder Assets

image.png

Custom inspector bằng Editor Script

image.png

Rainbow Folders

Nếu anh em có hứng thú với cái hình trên, làm folder nhìn nó cool ngầu các thứ thì có thể tham khảo plugin tại Rainbow Folders

Lưu ý: các script nằm trong folder Editor sẽ KHÔNG được build vì vậy các scripts kế thừa từ MonoBehaviour trực tiếp hay gián tiếp đều không được gắn vào GameObject làm component.

image.png

Lỗi kéo thả script kế thừa MonoBehaviour trong Editor folder vào GameObject

Editor Default Resources

Folder này đơn giản chỉ chứa resources cho editor-script, nếu trong editor-script sử dụng hàm EditorGUIUtility.Load thì hàm này có nhiệm vụ tìm assets trong folder này.

EditorGUIUtility.Load will look in Assets/Editor Default Resources/ + path for the resource. If not there, it will try the built-in editor resources by name.

Khác với folder Editor, Editor Default Resources chỉ có MỘT folder duy nhất và nó phải nằm trực tiếp dưới folder Assets (recommended): Assets/Editor Default Resources

Gizmos

Gizmos chắc nhiều bạn đã từng xài qua, tuy nhiên theo đúng quy trình của một blog “chuyên nghiệp” thì mình cũng nên giải thích một chút:

Hiểu một cách đơn giản, Gizmos hỗ trợ vẽ lên Scene View một số hình, icon…, ví dụ trường hợp con quái (enemy) sẽ rượt theo đánh bạn nếu bạn đi vào bán kính tầm 5m của nó. Vậy thì để thấy bán kính range = 5m của nó ta vẽ một hình tròn bao quanh tâm là enemy trên scene view bằng cách như sau:

private void OnDrawGizmos()
{
    Gizmos.color = Color.red;
    Gizmos.DrawWireSphere(transform.position, range);
}

Đấy, như vậy ta có thể test được tính đúng đắn của logic con quái một cách trực quan hơn.

image.png

Gizmos trên UnityEditor

“Vậy thì cần Gizmos folder để làm cái gì?”

Trong trường hợp mình vẽ các icon lên bằng Gizmos.DrawIcon thì các icons sẽ được đặt trong Assets/Gizmos

Plugins

Với một số tính năng mà Unity không hỗ trợ, thì Unity lại hỗ trợ add plugins thông qua folder Plugins. Folder này chỉ có một và nên được đặt trực tiếp dưới folder Assets (Recommended): Assets/Plugins

Đối với những scripts (của người ta) hỗ trợ cho project mà chúng ta không động chạm hay không chỉnh sửa nhiều, chỉ add vào với mục đích sử dụng thì cũng có thể cất vào folder Plugins này để giảm thời gian recompile.

Resources

Trong “đống” folders đặc biệt của Unity thì folder này mình khá hay sử dụng trong development, đây là nơi mà anh em có thể đặt các assets như prefab, scriptable object, texture, sprite… sau đó dùng script để tìm và load lúc game chạy (runtime).

Có thể có nhiều folder Resources trong folder Assets.

Tất cả các assets nằm trong folder Resources luôn được build kể cả khi các asset này không được ai “trỏ” hoặc link tới.

StreamingAssets

Sẽ chỉ có một folder StreamingAssets duy nhất và nên đặt trực tiếp dưới folder Assets như sau: Assets/StreamingAssets

image.png

StreamingAssets folder

Các files ở trong folder này cũng có thể tìm và load lúc game chạy (runtime) bằng script đồng thời luôn đi “kèm” với build.

“Sao folder StreamingAssets này giống folder Resources phía trên vậy?”

À thì có một số điểm khác biệt nhỏ giữa 2 folder này. Đầu tiên các files trong StreamingAssets không được “encoded” tức là nó sẽ không được build mà là “đi kèm” với build. Thêm nữa, vì nó không được “encoded” nên có thể bị truy xuất, thay đổi bằng các phần mềm bên ngoài.

“Ủa “encoded” là như nào? Đi kèm là như nào nữa?”


Ví dụ: file .png đặt trong Resources và đặt trong StreamingAssets lúc build thì kết quả khác nhau. file .png trong Resources sẽ được “encoded” hay compress thành ETC compressed texture. Còn file .png trong StreamingAssets thì vẫn giữ là .png, folder này như kiểu đi kèm với build vậy, không thay đổi gì.

Standard Assets

Trên menu bar của Unity bạn có thể tìm thấy một số Standard Assets khá hay ho như hình dưới.

image.png

Menu import standard packages

Nếu các bạn không tìm thấy các standard assets như hình trên thì có thể tải tại Asset Store nhá

Hidden Assets

Okay, folder cuối cùng.

Hidden assets là các files, folders bị Unity “phớt lờ” hoàn toàn, kể cả lúc build cũng không có luôn. Mục đích của nó là “prevent importing special and temporary files created by the operating system or other applications”. Cuối bài mình đuối quá anh em tự dịch cho đỡ buồn ngủ nhé :>
Các bạn có thể thử bằng cách xài file explorer -> vào folder assets của project -> tạo folder hoặc file bằng những cách dưới đây, rồi vào lại Unity3D xem kết quả

  • Tạo file ẩn.
  • Tạo file và folder bắt đầu bằng ký tự chấm ‘.‘.
  • Tạo file và folder bắt đầu bằng ký tự ngã ‘~‘.
  • Tạo file hoặc folder tên là cvs.
  • Tạo File có đuôi .tmp.

Disclaimer

Bài viết từ 2019 nên chỉ có giá trị tham khảo bạn nhé 😉

Nguồn tham khảo

All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.