feat: 提交资源
This commit is contained in:
73
assets/scripts/DontDestroy.ts
Normal file
73
assets/scripts/DontDestroy.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
/* eslint-disable no-console */
|
||||
import { _decorator, Component, director } from "cc";
|
||||
|
||||
const { ccclass, property } = _decorator;
|
||||
|
||||
/**
|
||||
* DontDestroy 组件
|
||||
* 挂载此脚本的节点在场景切换时不会被自动销毁
|
||||
*
|
||||
* 使用场景:
|
||||
* - 全局 UI 组件(如 Toast、Loading 等)
|
||||
* - 音效管理器
|
||||
* - 网络管理器
|
||||
* - 其他需要跨场景保持的组件
|
||||
*/
|
||||
@ccclass("DontDestroy")
|
||||
export class DontDestroy extends Component {
|
||||
/**
|
||||
* 标识是否已经设置为常驻节点
|
||||
* 防止重复设置
|
||||
*/
|
||||
private _isPersistent: boolean = false;
|
||||
|
||||
protected onLoad(): void {
|
||||
this.makePersistent();
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置节点为常驻节点
|
||||
*/
|
||||
private makePersistent(): void {
|
||||
if (this._isPersistent) {
|
||||
console.warn(
|
||||
`DontDestroy: 节点 ${this.node.name} 已经是常驻节点,无需重复设置`,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// 设置节点为常驻节点,场景切换时不会被销毁
|
||||
director.addPersistRootNode(this.node);
|
||||
this._isPersistent = true;
|
||||
|
||||
console.log(`DontDestroy: 节点 ${this.node.name} 已设置为常驻节点`);
|
||||
}
|
||||
|
||||
/**
|
||||
* 手动移除常驻状态
|
||||
* 调用此方法后,节点会在下次场景切换时被销毁
|
||||
*/
|
||||
public removePersistent(): void {
|
||||
if (!this._isPersistent) {
|
||||
console.warn(
|
||||
`DontDestroy: 节点 ${this.node.name} 不是常驻节点,无需移除`,
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// 从常驻节点列表中移除
|
||||
director.removePersistRootNode(this.node);
|
||||
this._isPersistent = false;
|
||||
|
||||
console.log(
|
||||
`DontDestroy: 节点 ${this.node.name} 已从常驻节点列表中移除`,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查节点是否为常驻节点
|
||||
*/
|
||||
public isPersistent(): boolean {
|
||||
return this._isPersistent;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user