Skip to content
GameObjPool

基类 / GameObjPool

GameObjPool Class

用于缓存GameObject的对象池,适用资源库资源、场景对象、预制体的复用缓存

使用示例:创建一个名为GameObjPoolExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,会在原点生成一个方块,并在5秒后消失
ts
@Component
export default class GameObjPoolExample extends mw.Script {

    protected onStart(): void {
        this.createCube();
    }

    //通过对象池动态创建一个方块
    public createCube(): void {
        const cubeAssetId = "197386";
        GameObjPool.asyncSpawn(cubeAssetId, GameObjPoolSourceType.Asset).then(obj => {
            obj.worldTransform.position = new Vector(0, 0, 0);
            setTimeout(() => {
                //5秒后回收该方块
                GameObjPool.despawn(obj);
            }, 5000);
        });
    }
}
@Component
export default class GameObjPoolExample extends mw.Script {

    protected onStart(): void {
        this.createCube();
    }

    //通过对象池动态创建一个方块
    public createCube(): void {
        const cubeAssetId = "197386";
        GameObjPool.asyncSpawn(cubeAssetId, GameObjPoolSourceType.Asset).then(obj => {
            obj.worldTransform.position = new Vector(0, 0, 0);
            setTimeout(() => {
                //5秒后回收该方块
                GameObjPool.despawn(obj);
            }, 5000);
        });
    }
}

Table of contents

Methods

destroy(): void
销毁对象池全局实例
asyncSpawn<T: extends GameObject<T>>(guid: string, type?: GameObjPoolSourceType): Promise<T: extends GameObject<T>>
异步生成一个对象
clear(guid: string, type?: GameObjPoolSourceType): void
清除对象池中该GUID对应的所有对象
clearAll(): void
清除对象池里的所有对象
despawn(obj: GameObject): void
归还一个对象
spawn<T: extends GameObject<T>>(guid: string, type?: GameObjPoolSourceType): T: extends GameObject<T>
生成一个对象

Methods

destroy

destroy(): void

销毁对象池全局实例


asyncSpawn

Static asyncSpawn<T>(guid, type?): Promise<T>

异步生成一个对象

Parameters

guid string资源 GUID range: 依据资源 ID 长度而定
type? GameObjPoolSourceType资源类型 default: 资源库中的资源

Returns

Promise<T>生成的对象

Precautions

注意需要把原始资源预加载

使用示例:创建一个名为GameObjPoolExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,会在原点生成一个方块,并在5秒后消失
ts
@Component
export default class GameObjPoolExample extends Script {

    protected onStart(): void {
        this.createCube();
    }

    //通过对象池动态创建一个方块
    public createCube(): void {
        const cubeAssetId = "197386";
        GameObjPool.asyncSpawn(cubeAssetId, GameObjPoolSourceType.Asset).then(obj => {
            obj.worldTransform.position = new Vector(0, 0, 0);
            setTimeout(() => {
                //5秒后回收该方块
                GameObjPool.despawn(obj);
            }, 5000);
        });
    }
}
@Component
export default class GameObjPoolExample extends Script {

    protected onStart(): void {
        this.createCube();
    }

    //通过对象池动态创建一个方块
    public createCube(): void {
        const cubeAssetId = "197386";
        GameObjPool.asyncSpawn(cubeAssetId, GameObjPoolSourceType.Asset).then(obj => {
            obj.worldTransform.position = new Vector(0, 0, 0);
            setTimeout(() => {
                //5秒后回收该方块
                GameObjPool.despawn(obj);
            }, 5000);
        });
    }
}

Type parameters

Textends GameObject<T>

clear

Static clear(guid, type?): void

清除对象池中该GUID对应的所有对象

Parameters

guid string资源 GUID range: 依据资源 ID 长度而定
type? GameObjPoolSourceType资源类型 default: 资源库中的资源
使用示例:创建一个名为GameObjPoolExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,会生成10个方块,每个方块的位置不同,5秒后全部被销毁
ts
@Component
export default class GameObjPoolExample extends Script {

    protected onStart(): void {
        if (SystemUtil.isClient()) {
            this.createCube();
        }
    }

    //通过对象池动态创建多个方块
    public createCube(): void {
        const cubeAssetId = "197386";
        //创建10个方块 且位置不重叠
        for (let i = 0;
i < 10;
i++) {
            GameObjPool.asyncSpawn(cubeAssetId, GameObjPoolSourceType.Asset).then(obj => {
                obj.worldLocation = new Vector(i * 300, 0, 0);
                //回收该对象但不隐藏
                GameObjPool.despawn(obj);
                obj.worldLocation = new Vector(i * 300, 0, 0);
                obj.setVisibility(PropertyStatus.On);
            });
        }
        setTimeout(() => {
            //将对象池中通过cubeAssetId创建的并且已回收的对象销毁
            GameObjPool.clear(cubeAssetId);
        }, 5000);
    }
}
@Component
export default class GameObjPoolExample extends Script {

    protected onStart(): void {
        if (SystemUtil.isClient()) {
            this.createCube();
        }
    }

    //通过对象池动态创建多个方块
    public createCube(): void {
        const cubeAssetId = "197386";
        //创建10个方块 且位置不重叠
        for (let i = 0;
i < 10;
i++) {
            GameObjPool.asyncSpawn(cubeAssetId, GameObjPoolSourceType.Asset).then(obj => {
                obj.worldLocation = new Vector(i * 300, 0, 0);
                //回收该对象但不隐藏
                GameObjPool.despawn(obj);
                obj.worldLocation = new Vector(i * 300, 0, 0);
                obj.setVisibility(PropertyStatus.On);
            });
        }
        setTimeout(() => {
            //将对象池中通过cubeAssetId创建的并且已回收的对象销毁
            GameObjPool.clear(cubeAssetId);
        }, 5000);
    }
}

clearAll

Static clearAll(): void

清除对象池里的所有对象

使用示例:创建一个名为GameObjPoolExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,会生成10个方块以及10个球体,每个方块和球体的位置不同,5秒后有一半被销毁
ts
@Component
export default class GameObjPoolExample extends Script {

    protected onStart(): void {
        if (SystemUtil.isClient()) {
            this.createCube();
        }
    }

    //通过对象池动态创建多个不同物体并销毁
    public createCube(): void {
        const cubeAssetId = "197386";
        const cubeAssetId2 = "7675";
        //创建10个方块 且位置不重叠
        for (let i = 0;
i < 10;
i++) {
            GameObjPool.asyncSpawn(cubeAssetId, GameObjPoolSourceType.Asset).then(obj => {
                obj.worldLocation = new Vector(i * 300, 0, 0);
                //只回收前5个方块
                if (i <= 5) return;
                //回收该对象但不隐藏
                GameObjPool.despawn(obj);
                obj.worldLocation = new Vector(i * 300, 0, 0);
                obj.setVisibility(PropertyStatus.On);
            });
        }
        //创建10个球体 且位置不重叠
        for (let i = 0;
i < 10;
i++) {
            GameObjPool.asyncSpawn(cubeAssetId2, GameObjPoolSourceType.Asset).then(obj => {
                obj.worldLocation = new Vector(i * 300, 300, 0);
                //只回收前5个球体
                if (i <= 5) return;
                //回收该对象但不隐藏
                GameObjPool.despawn(obj);
                obj.worldLocation = new Vector(i * 300, 300, 0);
                obj.setVisibility(PropertyStatus.On);
            });
        }
        setTimeout(() => {
            //将对象池中所有已回收的对象销毁
            GameObjPool.clearAll();
        }, 5000);
    }
}
@Component
export default class GameObjPoolExample extends Script {

    protected onStart(): void {
        if (SystemUtil.isClient()) {
            this.createCube();
        }
    }

    //通过对象池动态创建多个不同物体并销毁
    public createCube(): void {
        const cubeAssetId = "197386";
        const cubeAssetId2 = "7675";
        //创建10个方块 且位置不重叠
        for (let i = 0;
i < 10;
i++) {
            GameObjPool.asyncSpawn(cubeAssetId, GameObjPoolSourceType.Asset).then(obj => {
                obj.worldLocation = new Vector(i * 300, 0, 0);
                //只回收前5个方块
                if (i <= 5) return;
                //回收该对象但不隐藏
                GameObjPool.despawn(obj);
                obj.worldLocation = new Vector(i * 300, 0, 0);
                obj.setVisibility(PropertyStatus.On);
            });
        }
        //创建10个球体 且位置不重叠
        for (let i = 0;
i < 10;
i++) {
            GameObjPool.asyncSpawn(cubeAssetId2, GameObjPoolSourceType.Asset).then(obj => {
                obj.worldLocation = new Vector(i * 300, 300, 0);
                //只回收前5个球体
                if (i <= 5) return;
                //回收该对象但不隐藏
                GameObjPool.despawn(obj);
                obj.worldLocation = new Vector(i * 300, 300, 0);
                obj.setVisibility(PropertyStatus.On);
            });
        }
        setTimeout(() => {
            //将对象池中所有已回收的对象销毁
            GameObjPool.clearAll();
        }, 5000);
    }
}

despawn

Static despawn(obj): void

归还一个对象

Parameters

obj GameObject要归还的对象
使用示例:创建一个名为GameObjPoolExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,会在原点生成一个方块,并在5秒后消失
ts
@Component
export default class GameObjPoolExample extends Script {

    protected onStart(): void {
        this.createCube();
    }

    //通过对象池动态创建一个方块
    public createCube(): void {
        const cubeAssetId = "197386";
        GameObjPool.asyncSpawn(cubeAssetId, GameObjPoolSourceType.Asset).then(obj => {
            obj.worldTransform.position = new Vector(0, 0, 0);
            setTimeout(() => {
                //5秒后回收该方块
                GameObjPool.despawn(obj);
            }, 5000);
        });
    }
}
@Component
export default class GameObjPoolExample extends Script {

    protected onStart(): void {
        this.createCube();
    }

    //通过对象池动态创建一个方块
    public createCube(): void {
        const cubeAssetId = "197386";
        GameObjPool.asyncSpawn(cubeAssetId, GameObjPoolSourceType.Asset).then(obj => {
            obj.worldTransform.position = new Vector(0, 0, 0);
            setTimeout(() => {
                //5秒后回收该方块
                GameObjPool.despawn(obj);
            }, 5000);
        });
    }
}

spawn

Static spawn<T>(guid, type?): T

生成一个对象

Parameters

guid string资源 GUID range: 依据资源 ID 长度而定
type? GameObjPoolSourceType资源类型 default: 资源库中的资源

Returns

T生成的对象
使用示例:创建一个名为GameObjPoolExample的脚本,放置在对象栏中,打开脚本,将原本内容修改为如下内容,保存并运行游戏,会在原点生成一个方块
ts
@Component
export default class GameObjPoolExample extends Script {

    protected onStart(): void {
        this.createCube();
    }

    //通过对象池动态创建一个方块
    public createCube(): void {
        const cubeAssetId = "197386";
        AssetUtil.asyncDownloadAsset(cubeAssetId).then(() => {
            let obj = GameObjPool.spawn(cubeAssetId);
            obj.worldTransform.position = new Vector(0, 0, 0);
        });
    }
}
@Component
export default class GameObjPoolExample extends Script {

    protected onStart(): void {
        this.createCube();
    }

    //通过对象池动态创建一个方块
    public createCube(): void {
        const cubeAssetId = "197386";
        AssetUtil.asyncDownloadAsset(cubeAssetId).then(() => {
            let obj = GameObjPool.spawn(cubeAssetId);
            obj.worldTransform.position = new Vector(0, 0, 0);
        });
    }
}

Type parameters

Textends GameObject<T>