多语言配置化

This commit is contained in:
2025-08-12 20:22:54 +08:00
parent 707946304e
commit dfa3179094
19 changed files with 3490 additions and 205 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+21 -11
View File
@@ -22,7 +22,9 @@
],
"_active": true,
"_components": [],
"_prefab": null,
"_prefab": {
"__id__": 57
},
"_lpos": {
"__type__": "cc.Vec3",
"x": 0,
@@ -52,7 +54,7 @@
},
"autoReleaseAssets": false,
"_globals": {
"__id__": 57
"__id__": 58
},
"_id": "16b0d021-6436-4bbc-ba5e-05ebe3e84ba4"
},
@@ -2135,32 +2137,40 @@
"_lockFlags": 0,
"_id": "c5V1EV8IpMtrIvY1OE9t2u"
},
{
"__type__": "cc.PrefabInfo",
"root": null,
"asset": null,
"fileId": "16b0d021-6436-4bbc-ba5e-05ebe3e84ba4",
"instance": null,
"targetOverrides": null
},
{
"__type__": "cc.SceneGlobals",
"ambient": {
"__id__": 58
},
"shadows": {
"__id__": 59
},
"_skybox": {
"shadows": {
"__id__": 60
},
"fog": {
"_skybox": {
"__id__": 61
},
"octree": {
"fog": {
"__id__": 62
},
"skin": {
"octree": {
"__id__": 63
},
"lightProbeInfo": {
"skin": {
"__id__": 64
},
"postSettings": {
"lightProbeInfo": {
"__id__": 65
},
"postSettings": {
"__id__": 66
},
"bakedWithStationaryMainLight": false,
"bakedWithHighpLightmap": false
},
-9
View File
@@ -1,9 +0,0 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "ad76166f-8498-40ba-95df-e36d36090bb9",
"files": [],
"subMetas": {},
"userData": {}
}
@@ -0,0 +1,165 @@
import { _decorator, Component, Node, Button, Label, instantiate, Prefab, ScrollView, Layout, Color, Sprite } from 'cc';
import li_BaseView from '../../Main/Common/li_BaseView';
import LanguageUtils, { LanguageType } from '../../Main/Common/LanguageUtils';
import Utils from '../../Main/Common/Utils';
import AudioManager from '../../Main/Manager/AudioManager';
const { ccclass, property } = _decorator;
@ccclass('LanguageSelectPanel')
export class LanguageSelectPanel extends li_BaseView {
@property(Node)
private contentNode: Node = null;
@property(Node)
private itemTemplate: Node = null;
@property(Button)
private closeBtn: Button = null;
@property(Label)
private titleLabel: Label = null;
private languageItems: Map<LanguageType, Node> = new Map();
private currentSelectedLang: LanguageType = null;
onLoadCT() {
super.onLoadCT();
this.initUI();
this.bindEvents();
}
onEnable() {
this.currentSelectedLang = LanguageUtils.CurrentLanguage;
this.createLanguageItems();
this.updateSelection();
}
private initUI() {
if (this.titleLabel) {
this.titleLabel.string = "Select Language / 选择语言";
}
if (this.itemTemplate) {
this.itemTemplate.active = false;
}
}
private bindEvents() {
if (this.closeBtn) {
this.closeBtn.node.on(Button.EventType.CLICK, this.onCloseBtnClick, this);
}
}
private createLanguageItems() {
if (!this.contentNode || !this.itemTemplate) {
console.error("LanguageSelectPanel: contentNode or itemTemplate is null");
return;
}
// 清除旧的语言项
this.languageItems.clear();
this.contentNode.removeAllChildren();
const availableLanguages = LanguageUtils.getAvailableLanguages();
availableLanguages.forEach((lang, index) => {
const item = instantiate(this.itemTemplate);
item.active = true;
// 设置语言名称
const nameLabel = item.getChildByName("NameLabel");
if (nameLabel) {
const label = nameLabel.getComponent(Label);
if (label) {
label.string = LanguageUtils.getLanguageDisplayName(lang);
}
}
// 设置语言代码
const codeLabel = item.getChildByName("CodeLabel");
if (codeLabel) {
const label = codeLabel.getComponent(Label);
if (label) {
label.string = `(${lang.toUpperCase()})`;
label.color = new Color(150, 150, 150);
}
}
// 设置选中标记
const checkMark = item.getChildByName("CheckMark");
if (checkMark) {
checkMark.active = false;
}
// 绑定点击事件
const button = item.getComponent(Button);
if (!button) {
item.addComponent(Button);
}
item.on(Button.EventType.CLICK, () => {
this.onLanguageItemClick(lang);
}, this);
this.contentNode.addChild(item);
this.languageItems.set(lang, item);
});
}
private onLanguageItemClick(language: LanguageType) {
if (this.currentSelectedLang === language) {
return;
}
AudioManager.I.playSfx("click");
this.currentSelectedLang = language;
LanguageUtils.setLanguage(language);
this.updateSelection();
// 延迟关闭面板,让用户看到选择效果
this.scheduleOnce(() => {
this.close();
}, 0.3);
}
private updateSelection() {
this.languageItems.forEach((item, lang) => {
const checkMark = item.getChildByName("CheckMark");
if (checkMark) {
checkMark.active = lang === this.currentSelectedLang;
}
// 更新背景色或边框来表示选中状态
const bg = item.getChildByName("Bg");
if (bg) {
const sprite = bg.getComponent(Sprite);
if (sprite) {
if (lang === this.currentSelectedLang) {
sprite.color = new Color(100, 200, 100, 255);
} else {
sprite.color = new Color(255, 255, 255, 255);
}
}
}
});
}
private onCloseBtnClick() {
AudioManager.I.playSfx("click");
this.close();
}
onDestroy() {
if (this.closeBtn) {
this.closeBtn.node.off(Button.EventType.CLICK, this.onCloseBtnClick, this);
}
this.languageItems.forEach((item) => {
item.targetOff(this);
});
super.onDestroy();
}
}
@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "a9f8c2d1-7e6b-4a3c-9d5f-2b1e8c7f9a4d",
"files": [],
"subMetas": {},
"userData": {}
}
@@ -0,0 +1,122 @@
import { _decorator, Component, Node, Button, Label, Sprite } from 'cc';
import LanguageUtils, { LanguageType } from '../../Main/Common/LanguageUtils';
import { ViewManager } from '../../Main/Manager/ViewManager';
import AudioManager from '../../Main/Manager/AudioManager';
const { ccclass, property } = _decorator;
@ccclass('LanguageToggleButton')
export class LanguageToggleButton extends Component {
@property(Label)
private languageLabel: Label = null;
@property(Sprite)
private flagIcon: Sprite = null;
@property({
displayName: "Panel Prefab Path",
tooltip: "语言选择面板的预制体路径"
})
private panelPath: string = "prefabs/UI/SimpleLanguagePanel";
private button: Button = null;
onLoad() {
this.button = this.node.getComponent(Button);
if (!this.button) {
this.button = this.node.addComponent(Button);
}
this.bindEvents();
this.updateDisplay();
}
onEnable() {
this.updateDisplay();
LanguageUtils.onLanguageChanged(this.onLanguageChanged, this);
}
onDisable() {
LanguageUtils.offLanguageChanged(this.onLanguageChanged, this);
}
private bindEvents() {
if (this.button) {
this.button.node.on(Button.EventType.CLICK, this.onClick, this);
}
}
private onClick() {
AudioManager.I.playSfx("click");
// 快速切换模式(循环切换语言)
if (this.isQuickToggleMode()) {
this.quickToggleLanguage();
} else {
// 打开语言选择面板
this.openLanguagePanel();
}
}
private isQuickToggleMode(): boolean {
// 可以通过按住Shift键或其他条件来判断是否快速切换
return false;
}
private quickToggleLanguage() {
const languages = LanguageUtils.getAvailableLanguages();
const currentLang = LanguageUtils.CurrentLanguage;
const currentIndex = languages.indexOf(currentLang);
const nextIndex = (currentIndex + 1) % languages.length;
LanguageUtils.setLanguage(languages[nextIndex]);
}
private openLanguagePanel() {
// 使用ViewManager打开语言选择面板
if (this.panelPath && this.panelPath.length > 0) {
ViewManager.I.openView(this.panelPath);
} else {
console.warn("Language panel path not set!");
// 如果没有设置面板路径,使用快速切换
this.quickToggleLanguage();
}
}
private onLanguageChanged(language: LanguageType) {
this.updateDisplay();
}
private updateDisplay() {
const currentLang = LanguageUtils.CurrentLanguage;
if (this.languageLabel) {
// 显示当前语言的缩写或名称
this.languageLabel.string = this.getLanguageDisplay(currentLang);
}
// 如果有旗帜图标,可以在这里更新
if (this.flagIcon) {
// 需要根据语言加载对应的旗帜图标
// this.loadFlagIcon(currentLang);
}
}
private getLanguageDisplay(language: LanguageType): string {
// 可以选择显示缩写或完整名称
const useAbbreviation = true;
if (useAbbreviation) {
return language.toUpperCase();
} else {
return LanguageUtils.getLanguageDisplayName(language);
}
}
onDestroy() {
if (this.button) {
this.button.node.off(Button.EventType.CLICK, this.onClick, this);
}
LanguageUtils.offLanguageChanged(this.onLanguageChanged, this);
}
}
@@ -0,0 +1,9 @@
{
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "c4e7b9d2-8a3f-4c5e-b7d1-6e9f8a2c5b4d",
"files": [],
"subMetas": {},
"userData": {}
}
+1 -1
View File
@@ -55,7 +55,7 @@ export class PreloadUI extends Component {
this.jinduFilled.fillRange = 0;
//this.btnLogin.node.active = false;
this.preloadFiles();
LanguageUtils.setLanguage(LanguageType.CN);
@@ -0,0 +1,263 @@
import {
_decorator,
Component,
Node,
Button,
Label,
Color,
Sprite,
tween,
Vec3,
} from "cc";
import li_BaseView from "../../Main/Common/li_BaseView";
import LanguageUtils, { LanguageType } from "../../Main/Common/LanguageUtils";
import AudioManager from "../../Main/Manager/AudioManager";
const { ccclass, property } = _decorator;
interface LanguageButton {
button: Button;
label: Label;
checkMark: Node;
bg: Sprite;
language: LanguageType;
}
@ccclass("SimpleLanguagePanel")
export class SimpleLanguagePanel extends li_BaseView {
@property(Button)
private closeBtn: Button = null;
@property(Label)
private titleLabel: Label = null;
@property(Button)
private btnEnglish: Button = null;
@property(Button)
private btnChinese: Button = null;
@property(Button)
private btnHindi: Button = null;
@property(Button)
private btnFrench: Button = null;
@property(Button)
private btnGerman: Button = null;
@property(Node)
private panelBg: Node = null;
private languageButtons: LanguageButton[] = [];
private currentSelectedLang: LanguageType = null;
onLoadCT() {
super.onLoadCT();
this.initUI();
this.bindEvents();
this.playEnterAnimation();
}
onEnable() {
this.currentSelectedLang = LanguageUtils.CurrentLanguage;
this.updateSelection();
}
private initUI() {
if (this.titleLabel) {
this.titleLabel.string = this.getMultiLangTitle();
}
// 初始化语言按钮数组
this.initLanguageButton(this.btnEnglish, LanguageType.EN, "English");
this.initLanguageButton(this.btnChinese, LanguageType.CN, "中文");
this.initLanguageButton(this.btnHindi, LanguageType.HI, "हिंदी");
this.initLanguageButton(this.btnFrench, LanguageType.FR, "Français");
this.initLanguageButton(this.btnGerman, LanguageType.DE, "Deutsch");
}
private getMultiLangTitle(): string {
const titles = [
"Select Language",
"选择语言",
"भाषा चुनें",
"Choisir la langue",
"Sprache wählen",
];
return titles.join(" / ");
}
private initLanguageButton(
button: Button,
language: LanguageType,
displayName: string
) {
if (!button) return;
const node = button.node;
// 查找或创建标签
let labelNode = node.getChildByName("Label");
if (!labelNode) {
labelNode = node.getChildByName("label");
}
let label: Label = null;
if (labelNode) {
label = labelNode.getComponent(Label);
if (label) {
label.string = displayName;
}
}
// 查找或创建选中标记
let checkMark = node.getChildByName("CheckMark");
if (!checkMark) {
checkMark = node.getChildByName("checkmark");
}
if (checkMark) {
checkMark.active = false;
}
// 获取背景
let bg = node.getComponent(Sprite);
if (!bg) {
const bgNode = node.getChildByName("Bg");
if (bgNode) {
bg = bgNode.getComponent(Sprite);
}
}
this.languageButtons.push({
button,
label,
checkMark,
bg,
language,
});
}
private bindEvents() {
if (this.closeBtn) {
this.closeBtn.node.on(Button.EventType.CLICK, this.onCloseBtnClick, this);
}
// 绑定语言按钮事件
this.languageButtons.forEach((langBtn) => {
if (langBtn.button) {
langBtn.button.node.on(
Button.EventType.CLICK,
() => {
this.onLanguageSelect(langBtn.language);
},
this
);
}
});
}
private onLanguageSelect(language: LanguageType) {
if (this.currentSelectedLang === language) {
return;
}
//AudioManager.I.playSfx("click");
this.currentSelectedLang = language;
LanguageUtils.setLanguage(language);
this.updateSelection();
// 播放选中动画
const selectedBtn = this.languageButtons.find(
(btn) => btn.language === language
);
if (selectedBtn && selectedBtn.button) {
this.playSelectAnimation(selectedBtn.button.node);
}
// 延迟关闭面板
this.scheduleOnce(() => {
this.playExitAnimation(() => {
this.close();
});
}, 0.5);
}
private updateSelection() {
this.languageButtons.forEach((langBtn) => {
const isSelected = langBtn.language === this.currentSelectedLang;
// 更新选中标记
if (langBtn.checkMark) {
langBtn.checkMark.active = isSelected;
}
// 更新背景色
if (langBtn.bg) {
if (isSelected) {
langBtn.bg.color = new Color(150, 255, 150, 255);
} else {
langBtn.bg.color = new Color(255, 255, 255, 255);
}
}
// 更新按钮交互性
if (langBtn.button) {
langBtn.button.interactable = !isSelected;
}
});
}
private playSelectAnimation(node: Node) {
tween(node)
.to(0.1, { scale: new Vec3(1.1, 1.1, 1) })
.to(0.1, { scale: new Vec3(1, 1, 1) })
.start();
}
private playEnterAnimation() {
if (this.panelBg) {
this.panelBg.scale = new Vec3(0.8, 0.8, 1);
tween(this.panelBg)
.to(0.3, { scale: new Vec3(1, 1, 1) }, { easing: "backOut" })
.start();
}
}
private playExitAnimation(callback: () => void) {
if (this.panelBg) {
tween(this.panelBg)
.to(0.2, { scale: new Vec3(0.8, 0.8, 1) }, { easing: "backIn" })
.call(callback)
.start();
} else {
callback();
}
}
private onCloseBtnClick() {
//AudioManager.I.playSfx("click");
this.playExitAnimation(() => {
this.close();
});
}
onDestroy() {
// if (this.closeBtn) {
// this.closeBtn.node.off(
// Button.EventType.CLICK,
// this.onCloseBtnClick,
// this
// );
// }
// this.languageButtons.forEach((langBtn) => {
// if (langBtn.button) {
// langBtn.button.node.targetOff(this);
// }
// });
super.onDestroy();
}
}
@@ -2,7 +2,7 @@
"ver": "4.0.24",
"importer": "typescript",
"imported": true,
"uuid": "b7645da0-3b81-454b-8956-068491ce4706",
"uuid": "775ab74f-0a20-4218-9c6e-9e30bfc91635",
"files": [],
"subMetas": {},
"userData": {}
@@ -1,9 +0,0 @@
{
"ver": "1.2.0",
"importer": "directory",
"imported": true,
"uuid": "35555c27-2be1-4310-9685-8944c2895a50",
"files": [],
"subMetas": {},
"userData": {}
}
@@ -1,58 +0,0 @@
import { _decorator, Component, Node,Sprite ,UITransform} from 'cc';
import li_BaseView from "db://assets/Scripts/Main/Common/li_BaseView";
import ResManager from "db://assets/Scripts/Main/Manager/ResManager";
import Utils from "db://assets/Scripts/Main/Common/Utils";
import {ViewManager} from "db://assets/Scripts/Main/Manager/ViewManager";
import {GButton} from "db://assets/Scripts/Main/Common/GButton";
const { ccclass, property } = _decorator;
interface ShowPanelData
{
url: string;
closeFunc:Function;
}
@ccclass('ShowPanel')
export class ShowPanel extends li_BaseView {
@property(Sprite)
image:Sprite;
@property(Sprite)
splash:Sprite;
url:string;
func:Function;
openUIDataCT(data:ShowPanelData) {
super.openUIDataCT(data);
this.url = data.url;
this.func = data.closeFunc;
}
onLoadCT() {
this.show(this.url);
}
start()
{
//this.splash.node.on(Node.EventType.TOUCH_START,this.onclickback);
GButton.BandClick(this.splash.node,this.onClose,this);
}
protected onClose() {
if(this.func)
{
this.func();
}
super.onClose();
}
show(path:string)
{
ResManager.I.changeBundleSpriteFrame(this.image,path,"Chat18x",()=>{
Utils.adjustBgPixelRatio(this.image.node,3);
});
}
}
+17 -3
View File
@@ -16,6 +16,8 @@ import { NavigationManager } from "../../manager/NavigationManager";
import { GirlListItem } from "./GirlListItem";
import ConfigManager from "../../manager/ConfigManager";
import LanguageUtils from "../../../Main/Common/LanguageUtils";
import { ViewManager } from "../../../Main/Manager/ViewManager";
import { InnerMsgCode } from "../../../Main/Config/InnerMsgCode";
const { ccclass, property } = _decorator;
@@ -48,6 +50,7 @@ export class ThemePanel extends li_BaseView {
this.Show();
}
rectNameKey: string;
Show() {
//some temp data
this.coinNum.string = (50.0).toString();
@@ -68,10 +71,11 @@ export class ThemePanel extends li_BaseView {
this.cache.push(item);
this.content.addChild(newNode);
}
const rectInfo = cfgs[0];
this.recId = rectInfo.id;
this.recName.string = rectInfo.name;
this.rectNameKey = rectInfo.key;
//this.recName.string = LanguageUtils.getText(this.rectNameKey);
ResManager.I.changeBundleSpriteFrame(
this.recSprite,
rectInfo.path,
@@ -92,6 +96,10 @@ export class ThemePanel extends li_BaseView {
GButton.BandClick(this._nodeTab.msgBoxBtn, this.openMsgBox, this);
GButton.BandClick(this._nodeTab.ChatWithRecBtn, this.chatWithRec, this);
Utils.addInnerEL(InnerMsgCode.LanguageChange, this, () => {
this.recName.string = LanguageUtils.getText(this.rectNameKey);
});
}
chatWithRec() {
@@ -99,10 +107,16 @@ export class ThemePanel extends li_BaseView {
}
openSetting() {
console.log("Setting");
ViewManager.I.openBundlesView("LanguagePanel");
}
openMsgBox() {
console.log("打开信箱");
}
onDestroy(): void {
Utils.removeInnerEL(InnerMsgCode.LanguageChange, this, () => {
this.recName.string = LanguageUtils.getText(this.rectNameKey);
});
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,13 @@
{
"ver": "1.1.50",
"importer": "prefab",
"imported": true,
"uuid": "e1582f17-936e-4c4d-af55-0edf062e5181",
"files": [
".json"
],
"subMetas": {},
"userData": {
"syncNodeName": "LanguagePanel"
}
}
+135 -113
View File
@@ -24,18 +24,18 @@
],
"_active": true,
"_components": [
{
"__id__": 178
},
{
"__id__": 180
},
{
"__id__": 182
},
{
"__id__": 184
}
],
"_prefab": {
"__id__": 184
"__id__": 186
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -84,18 +84,18 @@
],
"_active": true,
"_components": [
{
"__id__": 171
},
{
"__id__": 173
},
{
"__id__": 175
},
{
"__id__": 177
}
],
"_prefab": {
"__id__": 177
"__id__": 179
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -1459,26 +1459,26 @@
"__id__": 60
},
{
"__id__": 120
"__id__": 122
},
{
"__id__": 156
"__id__": 158
}
],
"_active": true,
"_components": [
{
"__id__": 164
},
{
"__id__": 166
},
{
"__id__": 168
},
{
"__id__": 170
}
],
"_prefab": {
"__id__": 170
"__id__": 172
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -1528,14 +1528,14 @@
"_active": true,
"_components": [
{
"__id__": 115
"__id__": 117
},
{
"__id__": 117
"__id__": 119
}
],
"_prefab": {
"__id__": 119
"__id__": 121
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -1760,20 +1760,20 @@
"__id__": 94
},
{
"__id__": 100
"__id__": 102
}
],
"_active": true,
"_components": [
{
"__id__": 110
"__id__": 112
},
{
"__id__": 112
"__id__": 114
}
],
"_prefab": {
"__id__": 114
"__id__": 116
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -2343,10 +2343,13 @@
},
{
"__id__": 97
},
{
"__id__": 99
}
],
"_prefab": {
"__id__": 99
"__id__": 101
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -2473,6 +2476,27 @@
"__type__": "cc.CompPrefabInfo",
"fileId": "71CAeLbSpIa4GQ0DRKYjPi"
},
{
"__type__": "d7e4fOii5xNLqH2PF6de4pP",
"_name": "",
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 94
},
"_enabled": true,
"__prefab": {
"__id__": 100
},
"languageKey": "girl_10001_name",
"defaultText": "",
"autoUpdate": true,
"_id": ""
},
{
"__type__": "cc.CompPrefabInfo",
"fileId": "5a0hAixxZHNLkE+NiX1bo3"
},
{
"__type__": "cc.PrefabInfo",
"root": {
@@ -2482,8 +2506,6 @@
"__id__": 0
},
"fileId": "90SBFg1kBGTr3xgzStj/ad",
"instance": null,
"targetOverrides": null,
"nestedPrefabInstanceRoots": null
},
{
@@ -2497,9 +2519,6 @@
"_children": [],
"_active": true,
"_components": [
{
"__id__": 101
},
{
"__id__": 103
},
@@ -2508,10 +2527,13 @@
},
{
"__id__": 107
},
{
"__id__": 109
}
],
"_prefab": {
"__id__": 109
"__id__": 111
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -2548,11 +2570,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 100
"__id__": 102
},
"_enabled": true,
"__prefab": {
"__id__": 102
"__id__": 104
},
"_contentSize": {
"__type__": "cc.Size",
@@ -2576,11 +2598,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 100
"__id__": 102
},
"_enabled": true,
"__prefab": {
"__id__": 104
"__id__": 106
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -2621,11 +2643,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 100
"__id__": 102
},
"_enabled": true,
"__prefab": {
"__id__": 106
"__id__": 108
},
"_alignFlags": 34,
"_target": null,
@@ -2657,11 +2679,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 100
"__id__": 102
},
"_enabled": true,
"__prefab": {
"__id__": 108
"__id__": 110
},
"clickEvents": [],
"_interactable": true,
@@ -2730,7 +2752,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 111
"__id__": 113
},
"_contentSize": {
"__type__": "cc.Size",
@@ -2758,7 +2780,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 113
"__id__": 115
},
"_alignFlags": 45,
"_target": null,
@@ -2807,7 +2829,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 116
"__id__": 118
},
"_contentSize": {
"__type__": "cc.Size",
@@ -2835,7 +2857,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 118
"__id__": 120
},
"_alignFlags": 41,
"_target": null,
@@ -2884,29 +2906,29 @@
},
"_children": [
{
"__id__": 121
"__id__": 123
},
{
"__id__": 137
"__id__": 139
},
{
"__id__": 143
"__id__": 145
}
],
"_active": true,
"_components": [
{
"__id__": 149
},
{
"__id__": 151
},
{
"__id__": 153
},
{
"__id__": 155
}
],
"_prefab": {
"__id__": 155
"__id__": 157
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -2943,18 +2965,15 @@
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 120
"__id__": 122
},
"_children": [
{
"__id__": 122
"__id__": 124
}
],
"_active": true,
"_components": [
{
"__id__": 128
},
{
"__id__": 130
},
@@ -2963,10 +2982,13 @@
},
{
"__id__": 134
},
{
"__id__": 136
}
],
"_prefab": {
"__id__": 136
"__id__": 138
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -3003,20 +3025,20 @@
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 121
"__id__": 123
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 123
"__id__": 125
},
{
"__id__": 125
"__id__": 127
}
],
"_prefab": {
"__id__": 127
"__id__": 129
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -3053,11 +3075,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 122
"__id__": 124
},
"_enabled": true,
"__prefab": {
"__id__": 124
"__id__": 126
},
"_contentSize": {
"__type__": "cc.Size",
@@ -3081,11 +3103,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 122
"__id__": 124
},
"_enabled": true,
"__prefab": {
"__id__": 126
"__id__": 128
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -3139,11 +3161,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 121
"__id__": 123
},
"_enabled": true,
"__prefab": {
"__id__": 129
"__id__": 131
},
"_contentSize": {
"__type__": "cc.Size",
@@ -3167,11 +3189,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 121
"__id__": 123
},
"_enabled": true,
"__prefab": {
"__id__": 131
"__id__": 133
},
"_alignFlags": 45,
"_target": null,
@@ -3203,11 +3225,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 121
"__id__": 123
},
"_enabled": true,
"__prefab": {
"__id__": 133
"__id__": 135
},
"_type": 3,
"_inverted": false,
@@ -3225,11 +3247,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 121
"__id__": 123
},
"_enabled": true,
"__prefab": {
"__id__": 135
"__id__": 137
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -3283,20 +3305,20 @@
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 120
"__id__": 122
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 138
"__id__": 140
},
{
"__id__": 140
"__id__": 142
}
],
"_prefab": {
"__id__": 142
"__id__": 144
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -3333,11 +3355,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 137
"__id__": 139
},
"_enabled": true,
"__prefab": {
"__id__": 139
"__id__": 141
},
"_contentSize": {
"__type__": "cc.Size",
@@ -3361,11 +3383,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 137
"__id__": 139
},
"_enabled": true,
"__prefab": {
"__id__": 141
"__id__": 143
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -3419,20 +3441,20 @@
"_objFlags": 0,
"__editorExtras__": {},
"_parent": {
"__id__": 120
"__id__": 122
},
"_children": [],
"_active": true,
"_components": [
{
"__id__": 144
"__id__": 146
},
{
"__id__": 146
"__id__": 148
}
],
"_prefab": {
"__id__": 148
"__id__": 150
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -3469,11 +3491,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 143
"__id__": 145
},
"_enabled": true,
"__prefab": {
"__id__": 145
"__id__": 147
},
"_contentSize": {
"__type__": "cc.Size",
@@ -3497,11 +3519,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 143
"__id__": 145
},
"_enabled": true,
"__prefab": {
"__id__": 147
"__id__": 149
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -3578,11 +3600,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 120
"__id__": 122
},
"_enabled": true,
"__prefab": {
"__id__": 150
"__id__": 152
},
"_contentSize": {
"__type__": "cc.Size",
@@ -3606,11 +3628,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 120
"__id__": 122
},
"_enabled": true,
"__prefab": {
"__id__": 152
"__id__": 154
},
"clickEvents": [],
"_interactable": true,
@@ -3662,20 +3684,20 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 120
"__id__": 122
},
"_enabled": true,
"__prefab": {
"__id__": 154
"__id__": 156
},
"lockImg": {
"__id__": 140
"__id__": 142
},
"titleName": {
"__id__": 146
"__id__": 148
},
"img": {
"__id__": 125
"__id__": 127
},
"_id": ""
},
@@ -3707,18 +3729,18 @@
"_children": [],
"_active": true,
"_components": [
{
"__id__": 157
},
{
"__id__": 159
},
{
"__id__": 161
},
{
"__id__": 163
}
],
"_prefab": {
"__id__": 163
"__id__": 165
},
"_lpos": {
"__type__": "cc.Vec3",
@@ -3755,11 +3777,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 156
"__id__": 158
},
"_enabled": true,
"__prefab": {
"__id__": 158
"__id__": 160
},
"_contentSize": {
"__type__": "cc.Size",
@@ -3783,11 +3805,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 156
"__id__": 158
},
"_enabled": true,
"__prefab": {
"__id__": 160
"__id__": 162
},
"_alignFlags": 45,
"_target": null,
@@ -3819,11 +3841,11 @@
"_objFlags": 0,
"__editorExtras__": {},
"node": {
"__id__": 156
"__id__": 158
},
"_enabled": true,
"__prefab": {
"__id__": 162
"__id__": 164
},
"_resizeMode": 1,
"_layoutType": 3,
@@ -3874,7 +3896,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 165
"__id__": 167
},
"_contentSize": {
"__type__": "cc.Size",
@@ -3902,7 +3924,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 167
"__id__": 169
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -3947,7 +3969,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 169
"__id__": 171
},
"_alignFlags": 45,
"_target": null,
@@ -3996,7 +4018,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 172
"__id__": 174
},
"_contentSize": {
"__type__": "cc.Size",
@@ -4024,7 +4046,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 174
"__id__": 176
},
"_customMaterial": null,
"_srcBlendFactor": 2,
@@ -4069,7 +4091,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 176
"__id__": 178
},
"_alignFlags": 45,
"_target": null,
@@ -4118,7 +4140,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 179
"__id__": 181
},
"_contentSize": {
"__type__": "cc.Size",
@@ -4146,7 +4168,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 181
"__id__": 183
},
"_alignFlags": 45,
"_target": null,
@@ -4182,7 +4204,7 @@
},
"_enabled": true,
"__prefab": {
"__id__": 183
"__id__": 185
},
"m_rootNode": null,
"_id": ""