Files
18xchat/assets/Scripts/Main/Manager/ResManager.ts
T
2025-09-11 13:29:08 +08:00

494 lines
16 KiB
TypeScript

import { _decorator, AssetManager, assetManager, Component, Node, director, Prefab, resources, Sprite, SpriteFrame, Texture2D, v2, SpriteAtlas, ImageAsset, instantiate, AudioClip, Asset, JsonAsset, Material, VideoPlayer, VideoClip } from 'cc';
const { ccclass, property } = _decorator;
@ccclass('ResManager')
export default class ResManager {
private static _I: ResManager = null;
public static get I(): ResManager {
if (!ResManager._I) {
ResManager._I = new ResManager();
}
return ResManager._I;
}
/**切换场景 */
enterScene(i_sceneName: string) {
director.loadScene(i_sceneName, () => { });
}
/** 场景-跳转到主界面场景*/
goMainScene() {
this.enterScene('MainScene');
}
/** 场景-跳转到游戏场景*/
goGameScene() {
this.enterScene('GameScene');
}
/** 场景-跳转到自定义场景*/
goCustomScene(sceneName:string) {
this.enterScene(sceneName);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// /**加载bundle */
// loadBundle(bundleName, cb?) {
// let bundle = assetManager.getBundle(bundleName)
// if (bundle) { cb && cb(bundle); return; }
// assetManager.loadBundle(bundleName, (err: Error, _bundle: AssetManager.Bundle) => {
// if (!err) {
// cb && cb(_bundle);
// }
// });
// }
/**移除bundle */
removeBundle(bundleName) {
let bundle = assetManager.getBundle(bundleName);
if (bundle) {
bundle.releaseAll();
assetManager.removeBundle(bundle);
}
}
/**预加载bundle中的PB*/
preLoadSubpackagePrefab(url: string, cb) {
let bundle = assetManager.getBundle("PB");
if (bundle){
bundle.preload(url, Prefab, (err, res) => {
if (err) {
console.log(err);
return
}
cb && cb();
});
} else {
assetManager.loadBundle("PB", (err: Error, _bundle: AssetManager.Bundle) => {
if (err) {
console.log(err);
return
}
this.preLoadSubpackagePrefab(url, cb);
});
}
}
/**预加载bundle中的文件*/
preLoadSubpackageFile(url: string, pkgName: string, ftype, succCB, failCB) {
let bundle = assetManager.getBundle(pkgName);
if (bundle){
bundle.preload(url, ftype, (err, res) => {
if (err) {
console.log(err);
failCB && failCB(err);
return
}
succCB && succCB();
});
} else {
assetManager.loadBundle(pkgName, (err: Error, _bundle: AssetManager.Bundle) => {
if (err) {
console.log(err);
failCB && failCB(err);
return
}
this.preLoadSubpackageFile(url, pkgName, ftype, succCB, failCB);
});
}
}
/** 加载bundle中的PB*/
loadSubpackagePrefab(url: string, cb) {
let bundle = assetManager.getBundle("Chat18x");
if (bundle){
bundle.load(url, Prefab, (err, res: Prefab) => {
if (err) {
console.log(err);
return
}
let cc_N = instantiate(res);
cb && cb(cc_N);
});
}else{
assetManager.loadBundle("PB", (err: Error, _bundle: AssetManager.Bundle) => {
if (err) {
console.log(err);
return
}
this.loadSubpackagePrefab(url, cb);
});
}
}
/**获取pb节点 */
getPrefab(path: string, cb: Function, target: Node) {
this.loadSubpackagePrefab(path, (pb: Prefab) => {
if (target && !target.isValid) {
pb.destroy()
return;
}
pb['path'] = path;
cb && cb(pb);
});
}
/** 加载bundle中的PB*/
loadSubpackage3DModel(url: string, cb) {
let bundle = assetManager.getBundle("Model3D");
if (bundle){
bundle.load(url, Prefab, (err, res: Prefab) => {
if (err) {
console.log(err);
return
}
let cc_N = instantiate(res);
cb && cb(cc_N);
});
}else{
assetManager.loadBundle("Model3D", (err: Error, _bundle: AssetManager.Bundle) => {
if (err) {
console.log(err);
return
}
this.loadSubpackage3DModel(url, cb);
});
}
}
/** 改变图片--bundle资源 sprite-frame类型的图片*/
changeBundleVideo(spt: VideoPlayer, url: string, packageName: string, cb: Function = null) {
if (!spt || !url) return;
let spttemp:any = spt
spttemp.frameUrl = url
let bundle = assetManager.getBundle(packageName);
if (bundle){
bundle.load(url, VideoClip, (err, res: VideoClip) => {
if (err) {
console.log(err);
return
}
if (!spt.isValid) {
return;
}
if (spttemp.frameUrl != url) {
return;
}
spt.clip = res;
//spt.spriteFrame = res;
cb && cb(res);
});
}else{
assetManager.loadBundle(packageName, (err: Error, _bundle: AssetManager.Bundle) => {
if (err) {
console.log(err);
return
}
this.changeBundleVideo(spt, url, packageName, cb);
});
}
}
/** 改变图片--bundle资源 sprite-frame类型的图片*/
changeBundleSpriteFrame(spt: Sprite, url: string, packageName: string, cb: Function = null) {
if (!spt || !url) return;
let spttemp:any = spt
spttemp.frameUrl = url
let bundle = assetManager.getBundle(packageName);
if (bundle){
bundle.load(url + "/spriteFrame", SpriteFrame, (err, res: SpriteFrame) => {
if (err) {
console.log(err);
return
}
if (!spt.isValid) {
return;
}
if (spttemp.frameUrl != url) {
return;
}
spt.spriteFrame = res;
cb && cb(res);
});
}else{
assetManager.loadBundle(packageName, (err: Error, _bundle: AssetManager.Bundle) => {
if (err) {
console.log(err);
return
}
this.changeBundleSpriteFrame(spt, url, packageName, cb);
});
}
}
/** 改变图片--bundle资源 texture类型的图片*/
changeBundleTexture(spt: Sprite, url: string, packageName: string, cb: Function = null) {
if (!spt || !url) return;
let bundle = assetManager.getBundle(packageName);
if (bundle){
bundle.load(url + "/texture", Texture2D, (err, res: Texture2D) => {
if (err) {
console.log(err);
return
}
if (!spt.isValid) {
return;
}
let spriteFrame = new SpriteFrame()
spriteFrame.texture = res
spt.spriteFrame = spriteFrame;
cb && cb(res);
});
}else{
assetManager.loadBundle(packageName, (err: Error, _bundle: AssetManager.Bundle) => {
if (err) {
console.log(err);
return
}
this.changeBundleTexture(spt, url, packageName, cb);
});
}
}
/** 加载bundle中的音频文件*/
getBundleAudio(url: string, cb) {
let bundle = assetManager.getBundle("Audio");
if (bundle){
bundle.load(url, AudioClip, (err, res: AudioClip) => {
if (err) {
console.log(err);
return
}
cb && cb(res);
});
}else{
assetManager.loadBundle("Audio", (err: Error, _bundle: AssetManager.Bundle) => {
if (err) {
console.log(err);
return
}
this.getBundleAudio(url, cb);
});
}
}
/** 加载bundle中的配置表*/
loadSubpackageDataTable(url: string, cb) {
let bundle = assetManager.getBundle("DataTable");
if (bundle){
bundle.load(url, JsonAsset, (err, res: JsonAsset) => {
if (err) {
console.log(err);
return
}
cb && cb(res);
});
}else{
assetManager.loadBundle("DataTable", (err: Error, _bundle: AssetManager.Bundle) => {
if (err) {
console.log(err);
return
}
this.loadSubpackagePrefab(url, cb);
});
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//region 加载远程音频
/** 加载远程资源*/
loadRemoteAudio(url: string, cb: Function = null) {
assetManager.loadRemote<AudioClip>(url, (err, res: AudioClip) => {
if (err) {
console.error(err);
return
}
cb && cb(res);
})
}
/** 加载远程资源*/
// private loadRemoteRes1(url1: string, suffix: string = 'png', cb) {
// let tempStrArr: Array<string> = url1.split(".");
// let aimStr = url1;
// if (tempStrArr.length > 1) {
// aimStr = tempStrArr[0];
// }
// let url: string = `http://tk3h5.hgwl710.com/Fish/DEV/TS/Res/`;
// url += aimStr + '.' + suffix;
// if (url1.includes("://")) { url = url1 }
// assetManager.loadRemote<ImageAsset>(url, { cacheEnabled: true }, (err, res: ImageAsset) => {
// if (!err) {
// const spriteFrame = new SpriteFrame();
// const texture = new Texture2D();
// texture.image = res;
// spriteFrame.texture = texture;
// cb && cb(spriteFrame);
// }
// })
// }
//region 加载远程图片
/**
* 获取远程图片资源并设置
* @param spt 要设置的节点
* @param url url地址
* @param suffix 图片后缀名
* @param cb 回调函数
*/
changeRemoteSpriteFrame(spt: Sprite, url: string, suffix: string = 'png', cb: Function = null) {
if (!spt || !url) return;
assetManager.loadRemote<ImageAsset>(url, {ext: '.'+suffix}, (err, res: ImageAsset) => {
if (err) {
console.log(err);
return
}
if (!spt.isValid) {
return;
}
const spriteFrame = new SpriteFrame();
const texture = new Texture2D();
texture.image = res;
spriteFrame.texture = texture;
spt.spriteFrame = spriteFrame;
cb && cb(res);
})
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/** 加载resources里的PB path:不带后缀*/
private loadResourcePrefab(path: string, cb) {
resources.load(path, Prefab, (err, res: Prefab) => {
if (!err) {
cb && cb(res);
} else {
// loader.rlease(path);
}
})
}
/** 加载resources里的图片*/
private loadResourceRes(path: string, cb) {
resources.load(path, ImageAsset, (err, res: ImageAsset) => {
if (err) {
console.log(err);
return
}
cb && cb(res);
})
}
/** 加载resources里图集里的图片*/
// 加载 SpriteAtlas(图集),并且获取其中的一个 SpriteFrame
// 注意 atlas 资源文件(plist)通常会和一个同名的图片文件(png)放在一个目录下, 所以需要在第二个参数指定资源类型
private loadResourceAtlas(sptName: string, path: string, cb) {
resources.load(path, SpriteAtlas, (err, res: SpriteAtlas) => {
const frame = res.getSpriteFrame(sptName);
if (!err) {
cb && cb(frame);
} else {
// loader.release(path);
}
});
}
/** 改变图片--resources里sprite-frame类型的图片*/
changeResourceSpriteFrame(spt: Sprite, path: string, cb: Function = null) {
if (!spt || !path) return;
resources.load(path + "/spriteFrame", SpriteFrame, (err, res: SpriteFrame) => {
if (err) {
console.log(err);
return
}
if (!spt.isValid) {
return;
}
spt.spriteFrame = res;
cb && cb(res);
})
}
/** 改变图片--resources里texture类型的图片*/
changeResourceTexture(spt: Sprite, path: string, cb: Function = null) {
if (!spt || !path) return;
resources.load(path + "/texture", Texture2D, (err, res: Texture2D) => {
if (err) {
console.log(err);
return
}
if (!spt.isValid) {
return;
}
let spriteFrame = new SpriteFrame()
spriteFrame.texture = res
spt.spriteFrame = spriteFrame;
cb && cb(res);
})
}
//设置图片置灰
SetGray(spt: Sprite, isGray: boolean) {
//cc.assetManager.builtins.getBuiltin("material", "builtin-" + name)
if (isGray) {
let bundle = assetManager.getBundle("Materials");
if (bundle){
bundle.load("ui_sprite_gray", Material, (err, res: Material) => {
if (err) {
console.log(err);
return
}
// spt.setSharedMaterial(res, 0)
spt.customMaterial = res
});
}else{
assetManager.loadBundle("Materials", (err: Error, _bundle: AssetManager.Bundle) => {
if (err) {
console.log(err);
return
}
this.SetGray(spt, isGray);
});
}
} else {
// spt.setSharedMaterial(null, 0)
spt.customMaterial = null
}
}
/**设置图片模糊*/
SetBlur(spt: Sprite, isBule: boolean) {
if (isBule) {
let bundle = assetManager.getBundle("Materials");
if (bundle){
bundle.load("mohu", Material, (err, res: Material) => {
if (err) {
console.log(err);
return
}
// spt.setSharedMaterial(res, 0)
spt.customMaterial = res
});
}else{
assetManager.loadBundle("Materials", (err: Error, _bundle: AssetManager.Bundle) => {
if (err) {
console.log(err);
return
}
this.SetBlur(spt, isBule);
});
}
} else {
// spt.setSharedMaterial(null, 0)
spt.customMaterial = null
}
}
}