[Asset] [Unity Asset] ObjectPool

Dang_KhoaDang_Khoa Posts: 3,861Administrators
[chapter]Giới thiệu[/chapter]
Object Pooling là kĩ thuật tái sử dụng lại thành phần đã tạo trước đó thay vì huỷ nó rồi tạo cái mới vì việc huỷ và tạo mới rất tốn thời gian hệ thống, cái này gần như được áp dụng trong hầu hết các game để tối ưu hoá hiệu suất.

Và đây là asset object pool do mình tự viết, kết hợp nhiều kĩ thuật để cách sử dụng đơn giản hơn bao giờ hết. Ví dụ:

Với các pool hiện giờ có trên asset store, bạn phải kéo PoolManager của nó vào Scene, rồi setup này nọ, còn với cái này, bạn không cần kéo gì vào hết.

Cách sử dụng của các pool khác thường kiểu như:
var clone = PoolManager.Pools["TênPool"].Spawn(prefab);

Còn của mình:
var clone = prefab.SpawnClone();

Khi huỷ, các Pool khác:
PoolManager.Pools["TênPool"].Despawn(clone);

Còn của mình:
clone.Despawn();

Việc sử dụng đã được tự nhiên hoá hết mức, gần như không biết đến sự tồn tại của Pool, mọi thứ đã được thực hiện ngầm bên dưới cả.

[chapter]Download[/chapter]
Sau đây là link download, cần phải gửi bài trả lời để down nha (chủ yếu là cho forum có bài mới để bớt hẩm hiu, dạo này ít bài quá).

:3 :3 :3 
[hide]http://www.mediafire.com/file/hdawkea8bbnodv2/ObjectPool.unitypackage[/hide]

[chapter]Hướng dẫn[/chapter]
[thank]
Khi sử dùng ở class nào thì nhớ gọi
using ObjectPooling;
Để xem các lệnh có thể làm được, bạn mở file ObjectPoolExtension xem các hàm bên trong nó, có gì không hiểu cứ gửi ở đây mình sẽ trả lời.
[/thank]

Comments

  • kumuzukumuzu Posts: 669Registered
    trả có gì hay làm cái khác đi
  • 0no012340no01234 Posts: 326Registered
    thanks anh Khoa, cơ mà có hỗ trợ despawn khi không ở trong vùng nhìn thấy của người chơi không anh, hay lại đang đứng trc mặt thì nó biến mất :|
  • Dang_KhoaDang_Khoa Posts: 3,861Administrators
    kumuzu wrote:
    trả có gì hay làm cái khác đi
    Hay hay không thì cũng không thể thiếu trong mọi dự án game, khi anh làm thêm cái nào hay và cần thiết thì share tiếp thôi
    :3 :3 :3 
    0no01234 wrote:
    thanks anh Khoa, cơ mà có hỗ trợ despawn khi không ở trong vùng nhìn thấy của người chơi không anh, hay lại đang đứng trc mặt thì nó biến mất :|
     Despawn là em gọi khi em không cần dùng đến nó nữa để huỷ object đó (thật ra là nó không hoàn toàn huỷ, chỉ là ẩn đi, sau đó đưa về pool để dùng lại).

    Việc kiểm tra xem có nên despawn hay không thì mình làm thủ công thôi, vì có trường hợp đạn bay vòng, bay ra khỏi tầm nhìn xong vòng lại, nếu mình cho nó tự động thì nó sẽ bị mất một cách vô lý.

    Còn nếu em muốn một đối tượng nào đó tự despawn khi ra khỏi camera thì chèn hàm này vào:
    public void OnBecameInvisible() {
            gameObject.Despawn();
        }
    
  • HydraHydra Posts: 1,004Moderators
    Em comment một phát để lấy link nà.
  • Black FaceBlack Face Posts: 424Registered
    kumuzu wrote:
    trả có gì hay làm cái khác đi

    Có hiểu gì ko mà bảo ko hay :v, vấn đề này liên quan tới tối ưu bộ nhớ và xử lý của phần cứng. Nếu game lớn thì sẽ thấy tác dụng rõ.
  • Dang_KhoaDang_Khoa Posts: 3,861Administrators
    Black Face wrote:
    kumuzu wrote:
    trả có gì hay làm cái khác đi

    Có hiểu gì ko mà bảo ko hay :v, vấn đề này liên quan tới tối ưu bộ nhớ và xử lý của phần cứng. Nếu game lớn thì sẽ thấy tác dụng rõ.

    Chắc kumuzu muốn asset gì đó làm nguyên 1 hệ thống lớn để vọc, cái đấy khi nào anh có làm thì sẽ share thôi, giờ share mấy cái cần thiết dùng cho mọi project thay vì chuyên biệt quá
    :-/ :-/ :-/
Sign In or Register to comment.