联机功能开发
This commit is contained in:
parent
abb7d89f5b
commit
9ae4a84b8f
@ -1,5 +1,5 @@
|
||||
{
|
||||
"nextId": 267,
|
||||
"nextId": 270,
|
||||
"bugs": [
|
||||
{
|
||||
"id": 2,
|
||||
@ -2640,6 +2640,38 @@
|
||||
"module": "",
|
||||
"createdAt": 1779776751092,
|
||||
"updatedAt": 1779776751092
|
||||
},
|
||||
{
|
||||
"id": 267,
|
||||
"title": "莫名其妙的伤害预览()等待Ai的时候伤害预览",
|
||||
"description": "",
|
||||
"status": "open",
|
||||
"priority": "medium",
|
||||
"module": "",
|
||||
"createdAt": 1779798489273,
|
||||
"updatedAt": 1779798489273
|
||||
},
|
||||
{
|
||||
"id": 268,
|
||||
"title": "0回合的时候点击重玩本回合结果是上一个档",
|
||||
"description": "",
|
||||
"status": "open",
|
||||
"priority": "medium",
|
||||
"module": "",
|
||||
"longTerm": false,
|
||||
"createdAt": 1779806750642,
|
||||
"updatedAt": 1779806750642
|
||||
},
|
||||
{
|
||||
"id": 269,
|
||||
"title": "切换语言后 ranking没有刷新",
|
||||
"description": "",
|
||||
"status": "open",
|
||||
"priority": "medium",
|
||||
"module": "",
|
||||
"longTerm": false,
|
||||
"createdAt": 1779810291469,
|
||||
"updatedAt": 1779810291469
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,4 +1,14 @@
|
||||
{
|
||||
"nextId": 1,
|
||||
"suggestions": []
|
||||
}
|
||||
"nextId": 2,
|
||||
"suggestions": [
|
||||
{
|
||||
"id": 1,
|
||||
"title": "这种挡住人口的情况能不能优化下(",
|
||||
"description": "",
|
||||
"status": "open",
|
||||
"module": "",
|
||||
"createdAt": 1779802647070,
|
||||
"updatedAt": 1779802647070
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -438,6 +438,7 @@
|
||||
</div>
|
||||
<!-- Toolbar -->
|
||||
<div class="toolbar">
|
||||
<button class="bug-btn" id="bugs-longterm-toggle" type="button">查看长期 BUG</button>
|
||||
<input type="text" id="bugs-search" class="search-input" placeholder="搜索编号、标题或描述...">
|
||||
<select id="bugs-status-filter" class="filter-select">
|
||||
<option value="">全部状态</option>
|
||||
|
||||
@ -11,6 +11,7 @@
|
||||
let bugsList = [];
|
||||
let bugsLoaded = false;
|
||||
let bugsNextId = 1;
|
||||
let bugsLongTermMode = false;
|
||||
|
||||
// ========== Status / Priority Definitions ==========
|
||||
|
||||
@ -79,6 +80,7 @@ function bugsRenderList() {
|
||||
if (statusF) filtered = filtered.filter(b => b.status === statusF);
|
||||
if (priorityF) filtered = filtered.filter(b => b.priority === priorityF);
|
||||
if (moduleF) filtered = filtered.filter(b => b.module === moduleF);
|
||||
filtered = filtered.filter(b => !!b.longTerm === bugsLongTermMode);
|
||||
|
||||
// Sort: priority (asc) then id (desc)
|
||||
filtered.sort((a, b) => {
|
||||
@ -92,11 +94,20 @@ function bugsRenderList() {
|
||||
if (countEl) {
|
||||
const total = bugsList.length;
|
||||
const openCount = bugsList.filter(b => b.status === 'open' || b.status === 'fixing').length;
|
||||
countEl.textContent = `共 ${total} 个 BUG,${openCount} 个待处理`;
|
||||
const longTermCount = bugsList.filter(b => !!b.longTerm).length;
|
||||
countEl.textContent = `共 ${total} 个 BUG,${openCount} 个待处理,${longTermCount} 个长期 BUG`;
|
||||
}
|
||||
|
||||
const modeBtn = document.getElementById('bugs-longterm-toggle');
|
||||
if (modeBtn) {
|
||||
modeBtn.textContent = bugsLongTermMode ? '查看非长期 BUG' : '查看长期 BUG';
|
||||
modeBtn.title = bugsLongTermMode ? '切换到非长期 BUG 列表' : '切换到长期 BUG 列表';
|
||||
modeBtn.classList.toggle('bug-btn-primary', bugsLongTermMode);
|
||||
}
|
||||
|
||||
if (filtered.length === 0) {
|
||||
container.innerHTML = '<div class="loading-inline">暂无匹配的 BUG 记录</div>';
|
||||
const emptyText = bugsLongTermMode ? '暂无匹配的长期 BUG 记录' : '暂无匹配的非长期 BUG 记录';
|
||||
container.innerHTML = `<div class="loading-inline">${emptyText}</div>`;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -104,7 +115,9 @@ function bugsRenderList() {
|
||||
const st = BUG_STATUSES[b.status] || BUG_STATUSES.open;
|
||||
const pr = BUG_PRIORITIES[b.priority] || BUG_PRIORITIES.medium;
|
||||
const dateStr = b.createdAt ? new Date(b.createdAt).toLocaleDateString('zh-CN') : '';
|
||||
const updStr = b.updatedAt ? new Date(b.updatedAt).toLocaleDateString('zh-CN') : '';
|
||||
const longTermBtnLabel = b.longTerm ? '转出长期 bug' : '转入长期 bug';
|
||||
const longTermBtnTitle = b.longTerm ? '取消长期 BUG 标记' : '标记为长期 BUG';
|
||||
const longTermBtn = `<button class="bug-btn bug-btn-sm bug-longterm-action" data-bug-id="${b.id}" title="${longTermBtnTitle}" style="margin-right:4px">${longTermBtnLabel}</button>`;
|
||||
|
||||
// 快速修复按钮 - 只在待修复/修复中状态时显示
|
||||
const showFixBtn = (b.status === 'open' || b.status === 'fixing');
|
||||
@ -115,15 +128,24 @@ function bugsRenderList() {
|
||||
<span class="bug-card-id">#${String(b.id).padStart(3, '0')}</span>
|
||||
<span class="bug-card-pri" style="color:${pr.color}">${pr.label}</span>
|
||||
<span class="bug-card-title">${bugsEsc(b.title)}</span>
|
||||
${b.longTerm ? '<span class="bug-card-module" style="background:#fef3c7;color:#92400e">长期 BUG</span>' : ''}
|
||||
${b.module ? `<span class="bug-card-module">${bugsEsc(b.module)}</span>` : ''}
|
||||
</div>
|
||||
<div class="bug-card-right">
|
||||
${longTermBtn}
|
||||
${fixBtn}
|
||||
<span class="bug-card-status" style="color:${st.color};background:${st.bg}">${st.label}</span>
|
||||
<span class="bug-card-date">${dateStr}</span>
|
||||
</div>
|
||||
</div>`;
|
||||
}).join('');
|
||||
|
||||
container.querySelectorAll('.bug-longterm-action').forEach(btn => {
|
||||
btn.addEventListener('click', (e) => {
|
||||
e.stopPropagation();
|
||||
bugsToggleLongTerm(Number(btn.dataset.bugId), e);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function bugsEsc(s) {
|
||||
@ -157,6 +179,7 @@ function bugsShowDetail(id) {
|
||||
<div class="bug-detail-title">${bugsEsc(bug.title)}</div>
|
||||
<div class="bug-detail-meta">
|
||||
<span class="bug-card-pri" style="color:${pr.color}">${pr.label}</span>
|
||||
${bug.longTerm ? '<span class="bug-card-module" style="background:#fef3c7;color:#92400e">长期 BUG</span>' : ''}
|
||||
${bug.module ? `<span class="bug-card-module">${bugsEsc(bug.module)}</span>` : ''}
|
||||
<span>创建: ${dateStr}</span>
|
||||
${updStr ? `<span>更新: ${updStr}</span>` : ''}
|
||||
@ -172,7 +195,10 @@ function bugsShowDetail(id) {
|
||||
<label>状态:</label>
|
||||
<select id="bug-status-select" class="filter-select" onchange="bugsUpdateStatus(${bug.id}, this.value)">${statusOpts}</select>
|
||||
</div>
|
||||
<div>
|
||||
<div style="display:flex;gap:8px;align-items:center">
|
||||
<button class="bug-btn" id="bug-detail-longterm-btn" type="button">
|
||||
${bug.longTerm ? '转出长期 bug' : '转入长期 bug'}
|
||||
</button>
|
||||
<button class="bug-btn bug-btn-danger" onclick="bugsDelete(${bug.id})">删除</button>
|
||||
</div>
|
||||
</div>
|
||||
@ -180,6 +206,11 @@ function bugsShowDetail(id) {
|
||||
`;
|
||||
document.body.appendChild(overlay);
|
||||
|
||||
document.getElementById('bug-detail-longterm-btn')?.addEventListener('click', async (e) => {
|
||||
await bugsToggleLongTerm(bug.id, e);
|
||||
overlay.remove();
|
||||
});
|
||||
|
||||
// ESC to close
|
||||
const handler = (e) => {
|
||||
if (e.key === 'Escape') {
|
||||
@ -299,6 +330,40 @@ async function bugsQuickFix(id, event) {
|
||||
}
|
||||
}
|
||||
|
||||
// ========== Long-term Bug ==========
|
||||
|
||||
function bugsToggleLongTermMode() {
|
||||
bugsLongTermMode = !bugsLongTermMode;
|
||||
bugsRenderList();
|
||||
}
|
||||
|
||||
async function bugsToggleLongTerm(id, event) {
|
||||
if (event) {
|
||||
event.stopPropagation();
|
||||
}
|
||||
|
||||
const bug = bugsList.find(b => b.id === id);
|
||||
if (!bug) return;
|
||||
|
||||
const nextLongTerm = !bug.longTerm;
|
||||
try {
|
||||
const r = await fetch('/api/bugs/update', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ id, longTerm: nextLongTerm })
|
||||
});
|
||||
const result = await r.json();
|
||||
if (result.success) {
|
||||
bug.longTerm = nextLongTerm;
|
||||
bug.updatedAt = Date.now();
|
||||
bugsRenderList();
|
||||
bugsShowToast(nextLongTerm ? '已转入长期 BUG' : '已转出长期 BUG', 'success');
|
||||
}
|
||||
} catch (e) {
|
||||
alert('更新失败: ' + e.message);
|
||||
}
|
||||
}
|
||||
|
||||
// ========== Update Status ==========
|
||||
|
||||
async function bugsUpdateStatus(id, newStatus) {
|
||||
@ -367,6 +432,12 @@ function bugsBindFilters() {
|
||||
if (el) el.addEventListener(el.tagName === 'SELECT' ? 'change' : 'input', () => bugsRenderList());
|
||||
});
|
||||
|
||||
const longTermToggle = document.getElementById('bugs-longterm-toggle');
|
||||
if (longTermToggle && !longTermToggle.dataset.bound) {
|
||||
longTermToggle.dataset.bound = '1';
|
||||
longTermToggle.addEventListener('click', bugsToggleLongTermMode);
|
||||
}
|
||||
|
||||
// Populate module filter dropdown
|
||||
const moduleFilter = document.getElementById('bugs-module-filter');
|
||||
if (moduleFilter && moduleFilter.options.length <= 1) {
|
||||
|
||||
@ -936,6 +936,7 @@ class DashboardHandler(http.server.SimpleHTTPRequestHandler):
|
||||
'status': 'open',
|
||||
'priority': data.get('priority', 'medium'),
|
||||
'module': data.get('module', ''),
|
||||
'longTerm': False,
|
||||
'createdAt': now,
|
||||
'updatedAt': now,
|
||||
}
|
||||
@ -967,7 +968,7 @@ class DashboardHandler(http.server.SimpleHTTPRequestHandler):
|
||||
return
|
||||
|
||||
# Update allowed fields
|
||||
for field in ('status', 'priority', 'title', 'description', 'module'):
|
||||
for field in ('status', 'priority', 'title', 'description', 'module', 'longTerm'):
|
||||
if field in data:
|
||||
bug[field] = data[field]
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
BIN
Unity/Assets/Resources/Audio/SFX/UI_beep.mp3
Normal file
BIN
Unity/Assets/Resources/Audio/SFX/UI_beep.mp3
Normal file
Binary file not shown.
23
Unity/Assets/Resources/Audio/SFX/UI_beep.mp3.meta
Normal file
23
Unity/Assets/Resources/Audio/SFX/UI_beep.mp3.meta
Normal file
@ -0,0 +1,23 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a2aacaf5c6244864ab112cdfdd1bc7bd
|
||||
AudioImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 7
|
||||
defaultSettings:
|
||||
serializedVersion: 2
|
||||
loadType: 0
|
||||
sampleRateSetting: 0
|
||||
sampleRateOverride: 44100
|
||||
compressionFormat: 1
|
||||
quality: 1
|
||||
conversionMode: 0
|
||||
preloadAudioData: 0
|
||||
platformSettingOverrides: {}
|
||||
forceToMono: 0
|
||||
normalize: 1
|
||||
loadInBackground: 0
|
||||
ambisonic: 0
|
||||
3D: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Unity/Assets/Resources/Audio/SFX/UI_message.mp3
Normal file
BIN
Unity/Assets/Resources/Audio/SFX/UI_message.mp3
Normal file
Binary file not shown.
23
Unity/Assets/Resources/Audio/SFX/UI_message.mp3.meta
Normal file
23
Unity/Assets/Resources/Audio/SFX/UI_message.mp3.meta
Normal file
@ -0,0 +1,23 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3f4a3f31fcefb1f4b95996e46a23e65e
|
||||
AudioImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 7
|
||||
defaultSettings:
|
||||
serializedVersion: 2
|
||||
loadType: 0
|
||||
sampleRateSetting: 0
|
||||
sampleRateOverride: 44100
|
||||
compressionFormat: 1
|
||||
quality: 1
|
||||
conversionMode: 0
|
||||
preloadAudioData: 0
|
||||
platformSettingOverrides: {}
|
||||
forceToMono: 0
|
||||
normalize: 1
|
||||
loadInBackground: 0
|
||||
ambisonic: 0
|
||||
3D: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Unity/Assets/Resources/Audio/SFX/UI_playerenter.mp3
Normal file
BIN
Unity/Assets/Resources/Audio/SFX/UI_playerenter.mp3
Normal file
Binary file not shown.
23
Unity/Assets/Resources/Audio/SFX/UI_playerenter.mp3.meta
Normal file
23
Unity/Assets/Resources/Audio/SFX/UI_playerenter.mp3.meta
Normal file
@ -0,0 +1,23 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6fa126b335a9b2549b831e4dcbe9d33e
|
||||
AudioImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 7
|
||||
defaultSettings:
|
||||
serializedVersion: 2
|
||||
loadType: 0
|
||||
sampleRateSetting: 0
|
||||
sampleRateOverride: 44100
|
||||
compressionFormat: 1
|
||||
quality: 1
|
||||
conversionMode: 0
|
||||
preloadAudioData: 0
|
||||
platformSettingOverrides: {}
|
||||
forceToMono: 0
|
||||
normalize: 1
|
||||
loadInBackground: 0
|
||||
ambisonic: 0
|
||||
3D: 1
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -37,6 +37,8 @@ MonoBehaviour:
|
||||
OutsideMultiplayOpenTitle: "\u5F85\u52A0\u5165"
|
||||
OutsideMultiplayReadyTitle: "\u5DF2\u51C6\u5907"
|
||||
OutsideMultiplayOpenHint: "\u4ECD\u6709\u5F85\u52A0\u5165\u7684\u5E2D\u4F4D\uFF0C\u8BF7\u51CF\u5C11\u5E2D\u4F4D"
|
||||
OutsideMultiplayRoomFull: "\u623F\u95F4\u5DF2\u6EE1"
|
||||
OutsideMultiplayRoomGone: "\u623F\u95F4\u5DF2\u89E3\u6563\u6216\u5DF2\u5F00\u59CB\u6E38\u620F"
|
||||
OutsideHistoryDropListNoLimitP: "\u4E0D\u9650"
|
||||
OutsideHistoryDropList2P: "2\u4EBA"
|
||||
OutsideHistoryDropList3P: "3\u4EBA"
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -37,6 +37,8 @@ MonoBehaviour:
|
||||
OutsideMultiplayOpenTitle: 20068
|
||||
OutsideMultiplayReadyTitle: 20069
|
||||
OutsideMultiplayOpenHint: 20077
|
||||
OutsideMultiplayRoomFull: 20078
|
||||
OutsideMultiplayRoomGone: 20079
|
||||
OutsideHistoryDropListNoLimitP: 17352
|
||||
OutsideHistoryDropList2P: 17353
|
||||
OutsideHistoryDropList3P: 17354
|
||||
|
||||
@ -302,7 +302,7 @@ MonoBehaviour:
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: "\u4E0B\u4E00\u56DE\u5408"
|
||||
m_text: "\u4E0B\u4E00\u56DE\u5408{param}"
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: ce4904f8ddac15944907907115531ad5, type: 2}
|
||||
m_sharedMaterial: {fileID: 1214840240034325189, guid: ce4904f8ddac15944907907115531ad5, type: 2}
|
||||
|
||||
@ -1977,7 +1977,7 @@ RectTransform:
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 475.04083, y: -253.69449}
|
||||
m_SizeDelta: {x: 830.08167, y: 137.3574}
|
||||
m_SizeDelta: {x: 0, y: 137.3574}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1640998311177812195
|
||||
MonoBehaviour:
|
||||
|
||||
@ -1587,7 +1587,7 @@ RectTransform:
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 338.1344, y: -253.69449}
|
||||
m_SizeDelta: {x: 556.2688, y: 137.3574}
|
||||
m_SizeDelta: {x: 0, y: 137.3574}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1640998311177812195
|
||||
MonoBehaviour:
|
||||
|
||||
@ -897,6 +897,7 @@ RectTransform:
|
||||
- {fileID: 3133578300518463787}
|
||||
- {fileID: 2439448078848170519}
|
||||
- {fileID: 3618832129753901035}
|
||||
- {fileID: 1474286997294041896}
|
||||
- {fileID: 6639640428677976138}
|
||||
- {fileID: 7463303194629128016}
|
||||
m_Father: {fileID: 0}
|
||||
@ -1268,6 +1269,131 @@ CanvasGroup:
|
||||
m_Interactable: 1
|
||||
m_BlocksRaycasts: 1
|
||||
m_IgnoreParentGroups: 0
|
||||
--- !u!1 &1914164061467379823
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 1474286997294041896}
|
||||
- component: {fileID: 2011404267749524708}
|
||||
- component: {fileID: 8640139426645544408}
|
||||
- component: {fileID: 2575979264737155721}
|
||||
- component: {fileID: 8631636501533165638}
|
||||
m_Layer: 5
|
||||
m_Name: MainOption
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &1474286997294041896
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1914164061467379823}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 6606599364322460693}
|
||||
- {fileID: 386778647830652531}
|
||||
- {fileID: 2619787506741607809}
|
||||
- {fileID: 8378484949347058075}
|
||||
m_Father: {fileID: 1937094061063432054}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 685.66, y: 58.596}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2011404267749524708
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1914164061467379823}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &8640139426645544408
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1914164061467379823}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: 4ecd2ec108d90844fa8da6f661f5f2ba, type: 3}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!114 &2575979264737155721
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1914164061467379823}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Padding:
|
||||
m_Left: 0
|
||||
m_Right: 0
|
||||
m_Top: 0
|
||||
m_Bottom: 0
|
||||
m_ChildAlignment: 0
|
||||
m_Spacing: 0
|
||||
m_ChildForceExpandWidth: 1
|
||||
m_ChildForceExpandHeight: 1
|
||||
m_ChildControlWidth: 0
|
||||
m_ChildControlHeight: 1
|
||||
m_ChildScaleWidth: 0
|
||||
m_ChildScaleHeight: 0
|
||||
m_ReverseArrangement: 0
|
||||
--- !u!114 &8631636501533165638
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1914164061467379823}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 8dcc80d08d40bf94ab40a2dc19128fd0, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
options:
|
||||
- {fileID: 1807640456278866168}
|
||||
- {fileID: 4210926127593848258}
|
||||
- {fileID: 5016693945640908142}
|
||||
SelectBG: {fileID: 6606599364322460693}
|
||||
Passive: 0
|
||||
--- !u!1 &1989639312305090475
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -1343,6 +1469,216 @@ MonoBehaviour:
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &1999161440677586977
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 386778647830652531}
|
||||
- component: {fileID: 7990871729346823581}
|
||||
- component: {fileID: 7795559999661117964}
|
||||
- component: {fileID: 1807640456278866168}
|
||||
- component: {fileID: 8771933438046784565}
|
||||
m_Layer: 5
|
||||
m_Name: Option1
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &386778647830652531
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1999161440677586977}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1474286997294041896}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 232.7144, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &7990871729346823581
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1999161440677586977}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &7795559999661117964
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1999161440677586977}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: "bug\u62A5\u544A"
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: ce4904f8ddac15944907907115531ad5, type: 2}
|
||||
m_sharedMaterial: {fileID: 1214840240034325189, guid: ce4904f8ddac15944907907115531ad5, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4285151807
|
||||
m_fontColor: {r: 0.24705884, g: 0.227451, b: 0.4156863, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 24
|
||||
m_fontSizeBase: 24
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 1
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 24
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!114 &1807640456278866168
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1999161440677586977}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 0
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 7795559999661117964}
|
||||
m_OnClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!114 &8771933438046784565
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 1999161440677586977}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 6b27f832d22e4a8d916272b644937774, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
Ban: 0
|
||||
NoExport: 0
|
||||
FontBan: 0
|
||||
Preset: 0
|
||||
ID: 17125
|
||||
FontID: 2
|
||||
TextCfg:
|
||||
- Type: 1
|
||||
ApplyFontSize: 0
|
||||
FontSize: 24
|
||||
ApplyCharacterSpacing: 0
|
||||
CharacterSpacing: 0
|
||||
ApplyWordSpacing: 0
|
||||
WordSpacing: 0
|
||||
ApplyLineSpacing: 0
|
||||
LineSpacing: 0
|
||||
ApplyParagraphSpacing: 0
|
||||
ParagraphSpacing: 0
|
||||
--- !u!1 &2051357518330651642
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -2023,6 +2359,102 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_ShowMaskGraphic: 0
|
||||
--- !u!1 &3383405614125398143
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6606599364322460693}
|
||||
- component: {fileID: 6273590708716621151}
|
||||
- component: {fileID: 1902778048877976185}
|
||||
- component: {fileID: 874024432785967225}
|
||||
m_Layer: 5
|
||||
m_Name: Selected
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &6606599364322460693
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3383405614125398143}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1474286997294041896}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 577, y: -28.828}
|
||||
m_SizeDelta: {x: 219.2009, y: 57.655}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &6273590708716621151
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3383405614125398143}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &1902778048877976185
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3383405614125398143}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 0.25490198, g: 0.23137257, b: 0.41960788, a: 1}
|
||||
m_RaycastTarget: 0
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: 4ecd2ec108d90844fa8da6f661f5f2ba, type: 3}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 0
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!114 &874024432785967225
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 3383405614125398143}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_IgnoreLayout: 1
|
||||
m_MinWidth: -1
|
||||
m_MinHeight: -1
|
||||
m_PreferredWidth: -1
|
||||
m_PreferredHeight: -1
|
||||
m_FlexibleWidth: -1
|
||||
m_FlexibleHeight: -1
|
||||
m_LayoutPriority: 1
|
||||
--- !u!1 &3615384252569431640
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -3095,6 +3527,216 @@ MonoBehaviour:
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1
|
||||
--- !u!1 &5846297993139481704
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 2619787506741607809}
|
||||
- component: {fileID: 3385654819515015557}
|
||||
- component: {fileID: 3403372174413168230}
|
||||
- component: {fileID: 4210926127593848258}
|
||||
- component: {fileID: 6687397942884599374}
|
||||
m_Layer: 5
|
||||
m_Name: Option2
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &2619787506741607809
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5846297993139481704}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1474286997294041896}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 232.7144, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3385654819515015557
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5846297993139481704}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &3403372174413168230
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5846297993139481704}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: "\u7FFB\u8BD1\u9519\u8BEF"
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: ce4904f8ddac15944907907115531ad5, type: 2}
|
||||
m_sharedMaterial: {fileID: 1214840240034325189, guid: ce4904f8ddac15944907907115531ad5, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4285151807
|
||||
m_fontColor: {r: 0.24705884, g: 0.227451, b: 0.4156863, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 24
|
||||
m_fontSizeBase: 24
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 1
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 24
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!114 &4210926127593848258
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5846297993139481704}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 0
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 3403372174413168230}
|
||||
m_OnClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!114 &6687397942884599374
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5846297993139481704}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 6b27f832d22e4a8d916272b644937774, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
Ban: 0
|
||||
NoExport: 0
|
||||
FontBan: 0
|
||||
Preset: 0
|
||||
ID: 272
|
||||
FontID: 2
|
||||
TextCfg:
|
||||
- Type: 1
|
||||
ApplyFontSize: 0
|
||||
FontSize: 24
|
||||
ApplyCharacterSpacing: 0
|
||||
CharacterSpacing: 0
|
||||
ApplyWordSpacing: 0
|
||||
WordSpacing: 0
|
||||
ApplyLineSpacing: 0
|
||||
LineSpacing: 0
|
||||
ApplyParagraphSpacing: 0
|
||||
ParagraphSpacing: 0
|
||||
--- !u!1 &5894350066324164393
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -3164,6 +3806,216 @@ MonoBehaviour:
|
||||
m_ChildScaleWidth: 0
|
||||
m_ChildScaleHeight: 0
|
||||
m_ReverseArrangement: 0
|
||||
--- !u!1 &5918702236667496888
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8378484949347058075}
|
||||
- component: {fileID: 5801127926463566140}
|
||||
- component: {fileID: 5739847322603019725}
|
||||
- component: {fileID: 5016693945640908142}
|
||||
- component: {fileID: 8008891161689170056}
|
||||
m_Layer: 5
|
||||
m_Name: Option3
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8378484949347058075
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5918702236667496888}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 1474286997294041896}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
m_AnchorMax: {x: 0, y: 0}
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 232.7144, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &5801127926463566140
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5918702236667496888}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &5739847322603019725
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5918702236667496888}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: "\u63D0\u51FA\u5EFA\u8BAE"
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: ce4904f8ddac15944907907115531ad5, type: 2}
|
||||
m_sharedMaterial: {fileID: 1214840240034325189, guid: ce4904f8ddac15944907907115531ad5, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 24
|
||||
m_fontSizeBase: 24
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 1
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 24
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!114 &5016693945640908142
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5918702236667496888}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 0
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 5739847322603019725}
|
||||
m_OnClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!114 &8008891161689170056
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5918702236667496888}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 6b27f832d22e4a8d916272b644937774, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
Ban: 0
|
||||
NoExport: 0
|
||||
FontBan: 0
|
||||
Preset: 0
|
||||
ID: 19676
|
||||
FontID: 2
|
||||
TextCfg:
|
||||
- Type: 1
|
||||
ApplyFontSize: 0
|
||||
FontSize: 24
|
||||
ApplyCharacterSpacing: 0
|
||||
CharacterSpacing: 0
|
||||
ApplyWordSpacing: 0
|
||||
WordSpacing: 0
|
||||
ApplyLineSpacing: 0
|
||||
LineSpacing: 0
|
||||
ApplyParagraphSpacing: 0
|
||||
ParagraphSpacing: 0
|
||||
--- !u!1 &6286795247557177253
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -3343,7 +4195,7 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 700.719, y: -526.8339}
|
||||
m_AnchoredPosition: {x: 700.719, y: -585.42993}
|
||||
m_SizeDelta: {x: 1037.964, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &2233556797218185597
|
||||
|
||||
@ -5397,7 +5397,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1150287024181789176, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -79.4652
|
||||
value: -76.465
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1350492721882748050, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
@ -5437,7 +5437,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1604250236086511826, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -79.4652
|
||||
value: -76.465
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2012257235429162126, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
@ -5477,7 +5477,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2293914634218563585, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -79.4652
|
||||
value: -76.465
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2423916526881118935, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
@ -5489,7 +5489,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2423916526881118935, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 108.4702
|
||||
value: 105.47
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2423916526881118935, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
@ -5497,7 +5497,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2423916526881118935, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -166.15051
|
||||
value: -303.675
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2511047359023480271, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
@ -5529,7 +5529,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2897385894931438084, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 108.4702
|
||||
value: 105.47
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2897385894931438084, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
@ -5537,7 +5537,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2897385894931438084, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -105.69031
|
||||
value: -188.205
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2947719523726246818, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
@ -5573,7 +5573,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4041604487283979261, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 108.4702
|
||||
value: 105.47
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4041604487283979261, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
@ -5581,7 +5581,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4041604487283979261, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -45.230103
|
||||
value: -72.735
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6031293868694483027, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
@ -5693,11 +5693,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7220624217921356721, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 232.36604
|
||||
value: 283.8
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7220624217921356721, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -25.230103
|
||||
value: -23.73
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7721772225024868457, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_Name
|
||||
@ -5717,11 +5717,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8365422807726369352, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 232.36604
|
||||
value: 283.8
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 8365422807726369352, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -25.230103
|
||||
value: -23.73
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9043542078479674011, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
@ -5733,11 +5733,11 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9043542078479674011, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 232.36604
|
||||
value: 283.8
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 9043542078479674011, guid: f707ad1415ed95c4dbac2aa3ef60e237, type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -25.230103
|
||||
value: -23.73
|
||||
objectReference: {fileID: 0}
|
||||
m_RemovedComponents: []
|
||||
m_RemovedGameObjects: []
|
||||
@ -5970,7 +5970,7 @@ PrefabInstance:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 4944937303067552312, guid: fb0641be7df17f1489b938bde7529f8b, type: 3}
|
||||
propertyPath: m_IsActive
|
||||
value: 0
|
||||
value: 1
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 5892710643921794157, guid: fb0641be7df17f1489b938bde7529f8b, type: 3}
|
||||
propertyPath: m_AnchorMax.y
|
||||
|
||||
@ -832,7 +832,7 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 397.9826, y: -34}
|
||||
m_AnchoredPosition: {x: -5, y: -51}
|
||||
m_SizeDelta: {x: 338.1129, y: 53.9677}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &6457064681279636580
|
||||
@ -1068,7 +1068,7 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: -557, y: -387}
|
||||
m_AnchoredPosition: {x: -557, y: -353}
|
||||
m_SizeDelta: {x: 63.3733, y: 63.6832}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3987244559183850426
|
||||
@ -1708,7 +1708,7 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: -1.5339, y: -19.3419}
|
||||
m_AnchoredPosition: {x: -1.5339, y: 12}
|
||||
m_SizeDelta: {x: 368.6122, y: 67.1428}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2328433573199222475
|
||||
@ -2698,7 +2698,7 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 26, y: -767}
|
||||
m_AnchoredPosition: {x: 26, y: -747}
|
||||
m_SizeDelta: {x: 321.8103, y: 104.9406}
|
||||
m_Pivot: {x: 0, y: 1}
|
||||
--- !u!222 &8919916523410679615
|
||||
@ -3247,8 +3247,8 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: -738.3697, y: -452.11703}
|
||||
m_SizeDelta: {x: 391.9449, y: 121.9672}
|
||||
m_AnchoredPosition: {x: -738.55, y: -435.5198}
|
||||
m_SizeDelta: {x: 391.6, y: 178.7196}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &153221385617399801
|
||||
CanvasRenderer:
|
||||
@ -3826,7 +3826,7 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 15.5, y: 27.44}
|
||||
m_AnchoredPosition: {x: 15.5, y: 58.78189}
|
||||
m_SizeDelta: {x: 216.98, y: 26.42}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &3550754327903251425
|
||||
@ -4066,7 +4066,7 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: -73, y: 27.44}
|
||||
m_AnchoredPosition: {x: -73, y: 58.78189}
|
||||
m_SizeDelta: {x: 216.98, y: 26.42}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &9146606384703110025
|
||||
|
||||
@ -11807,6 +11807,7 @@ RectTransform:
|
||||
- {fileID: 442963545254729132}
|
||||
- {fileID: 2172527432691932578}
|
||||
- {fileID: 950736415580937085}
|
||||
- {fileID: 6394447706666146607}
|
||||
- {fileID: 5306177055940492692}
|
||||
- {fileID: 5319791491089766199}
|
||||
m_Father: {fileID: 3681143847542175175}
|
||||
@ -15698,6 +15699,171 @@ MonoBehaviour:
|
||||
- {fileID: 2411504628776399857}
|
||||
SelectBG: {fileID: 5877282367144789499}
|
||||
Passive: 0
|
||||
--- !u!1 &4327218388685173335
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 6394447706666146607}
|
||||
- component: {fileID: 905120754425247179}
|
||||
- component: {fileID: 7202360347716054817}
|
||||
- component: {fileID: 7247273129590876727}
|
||||
m_Layer: 5
|
||||
m_Name: IlegalHint
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 0
|
||||
--- !u!224 &6394447706666146607
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4327218388685173335}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1.00008, y: 1.00008, z: 1.00008}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 673566701473212552}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 928.03, y: -58.9889}
|
||||
m_SizeDelta: {x: 275.93, y: 37.3549}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &905120754425247179
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4327218388685173335}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &7202360347716054817
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4327218388685173335}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 0
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: "\u623F\u95F4\u540D\u4E0D\u5408\u89C4"
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8e119f168f1a6b745be02ef19f51610f, type: 2}
|
||||
m_sharedMaterial: {fileID: -8081454072124122709, guid: 8e119f168f1a6b745be02ef19f51610f, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4278518015
|
||||
m_fontColor: {r: 1, g: 0, b: 0.021029472, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 22
|
||||
m_fontSizeBase: 24
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 1
|
||||
m_fontSizeMin: 12
|
||||
m_fontSizeMax: 22
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 4
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!114 &7247273129590876727
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 4327218388685173335}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 6b27f832d22e4a8d916272b644937774, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
Ban: 0
|
||||
NoExport: 0
|
||||
FontBan: 0
|
||||
Preset: 0
|
||||
ID: 19979
|
||||
FontID: 2
|
||||
TextCfg:
|
||||
- Type: 1
|
||||
ApplyFontSize: 0
|
||||
FontSize: 24
|
||||
ApplyCharacterSpacing: 0
|
||||
CharacterSpacing: 0
|
||||
ApplyWordSpacing: 0
|
||||
WordSpacing: 0
|
||||
ApplyLineSpacing: 0
|
||||
LineSpacing: 0
|
||||
ApplyParagraphSpacing: 0
|
||||
ParagraphSpacing: 0
|
||||
--- !u!1 &4330990698167950129
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 47f0483d122c95d49aa9e90b4d51deb5
|
||||
guid: 7861091965088df41b5c1aca5e9c0a3e
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
@ -1136,6 +1136,171 @@ MonoBehaviour:
|
||||
LineSpacing: 0
|
||||
ApplyParagraphSpacing: 0
|
||||
ParagraphSpacing: 0
|
||||
--- !u!1 &5763353435607814537
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 8484977175690715260}
|
||||
- component: {fileID: 2874665760547938859}
|
||||
- component: {fileID: 2400030704245378848}
|
||||
- component: {fileID: 2998396317244162034}
|
||||
m_Layer: 5
|
||||
m_Name: Text
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &8484977175690715260
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5763353435607814537}
|
||||
m_LocalRotation: {x: -0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: -1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 4512853961089905004}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0.5}
|
||||
m_AnchorMax: {x: 0, y: 0.5}
|
||||
m_AnchoredPosition: {x: 75.03357, y: -0.17298126}
|
||||
m_SizeDelta: {x: 124.7169, y: 46.6237}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!222 &2874665760547938859
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5763353435607814537}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &2400030704245378848
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5763353435607814537}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 0
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: "\u5C4F\u853D"
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8e119f168f1a6b745be02ef19f51610f, type: 2}
|
||||
m_sharedMaterial: {fileID: -8081454072124122709, guid: 8e119f168f1a6b745be02ef19f51610f, type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4289079557
|
||||
m_fontColor: {r: 0.021493427, g: 0.16216365, b: 0.6509434, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 24
|
||||
m_fontSizeBase: 20
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 1
|
||||
m_fontSizeMin: 12
|
||||
m_fontSizeMax: 24
|
||||
m_fontStyle: 4
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 512
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 0
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!114 &2998396317244162034
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 5763353435607814537}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 6b27f832d22e4a8d916272b644937774, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
Ban: 0
|
||||
NoExport: 0
|
||||
FontBan: 0
|
||||
Preset: 0
|
||||
ID: 17377
|
||||
FontID: 2
|
||||
TextCfg:
|
||||
- Type: 1
|
||||
ApplyFontSize: 0
|
||||
FontSize: 24
|
||||
ApplyCharacterSpacing: 0
|
||||
CharacterSpacing: 0
|
||||
ApplyWordSpacing: 0
|
||||
WordSpacing: 0
|
||||
ApplyLineSpacing: 0
|
||||
LineSpacing: 0
|
||||
ApplyParagraphSpacing: 0
|
||||
ParagraphSpacing: 0
|
||||
--- !u!1 &5879505570580221772
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -1339,6 +1504,7 @@ RectTransform:
|
||||
- {fileID: 555533381074390939}
|
||||
- {fileID: 96625707259803793}
|
||||
- {fileID: 768525217504304060}
|
||||
- {fileID: 4512853961089905004}
|
||||
m_Father: {fileID: 0}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 0}
|
||||
@ -1402,3 +1568,240 @@ MonoBehaviour:
|
||||
GameStateText: {fileID: 0}
|
||||
VersionText: {fileID: 0}
|
||||
JoinButton: {fileID: 5777197804309038576}
|
||||
ActionButton: {fileID: 5800461245087449632}
|
||||
--- !u!1 &8852519433211468652
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 4512853961089905004}
|
||||
- component: {fileID: 5815633150663516744}
|
||||
- component: {fileID: 60679182699258626}
|
||||
- component: {fileID: 5800461245087449632}
|
||||
- component: {fileID: 1345292219526059393}
|
||||
- component: {fileID: 8403910360848460228}
|
||||
m_Layer: 5
|
||||
m_Name: JubaoButton
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &4512853961089905004
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8852519433211468652}
|
||||
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: -1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 8484977175690715260}
|
||||
m_Father: {fileID: 2527218108953289808}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 1132.4092, y: -65.257}
|
||||
m_SizeDelta: {x: 153.5145, y: 65.514}
|
||||
m_Pivot: {x: 0, y: 0}
|
||||
--- !u!222 &5815633150663516744
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8852519433211468652}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!114 &60679182699258626
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8852519433211468652}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 0.003921569}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_Sprite: {fileID: 21300000, guid: df39380aaef39404eaf3e0e9183c785c, type: 3}
|
||||
m_Type: 1
|
||||
m_PreserveAspect: 1
|
||||
m_FillCenter: 1
|
||||
m_FillMethod: 4
|
||||
m_FillAmount: 1
|
||||
m_FillClockwise: 1
|
||||
m_FillOrigin: 0
|
||||
m_UseSpriteMesh: 0
|
||||
m_PixelsPerUnitMultiplier: 1.5
|
||||
--- !u!114 &5800461245087449632
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8852519433211468652}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Navigation:
|
||||
m_Mode: 3
|
||||
m_WrapAround: 0
|
||||
m_SelectOnUp: {fileID: 0}
|
||||
m_SelectOnDown: {fileID: 0}
|
||||
m_SelectOnLeft: {fileID: 0}
|
||||
m_SelectOnRight: {fileID: 0}
|
||||
m_Transition: 1
|
||||
m_Colors:
|
||||
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
|
||||
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
|
||||
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
|
||||
m_ColorMultiplier: 1
|
||||
m_FadeDuration: 0.1
|
||||
m_SpriteState:
|
||||
m_HighlightedSprite: {fileID: 0}
|
||||
m_PressedSprite: {fileID: 0}
|
||||
m_SelectedSprite: {fileID: 0}
|
||||
m_DisabledSprite: {fileID: 0}
|
||||
m_AnimationTriggers:
|
||||
m_NormalTrigger: Normal
|
||||
m_HighlightedTrigger: Highlighted
|
||||
m_PressedTrigger: Pressed
|
||||
m_SelectedTrigger: Selected
|
||||
m_DisabledTrigger: Disabled
|
||||
m_Interactable: 1
|
||||
m_TargetGraphic: {fileID: 60679182699258626}
|
||||
m_OnClick:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
--- !u!82 &1345292219526059393
|
||||
AudioSource:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8852519433211468652}
|
||||
m_Enabled: 1
|
||||
serializedVersion: 4
|
||||
OutputAudioMixerGroup: {fileID: 0}
|
||||
m_audioClip: {fileID: 0}
|
||||
m_PlayOnAwake: 1
|
||||
m_Volume: 1
|
||||
m_Pitch: 1
|
||||
Loop: 0
|
||||
Mute: 0
|
||||
Spatialize: 0
|
||||
SpatializePostEffects: 0
|
||||
Priority: 128
|
||||
DopplerLevel: 1
|
||||
MinDistance: 1
|
||||
MaxDistance: 500
|
||||
Pan2D: 0
|
||||
rolloffMode: 0
|
||||
BypassEffects: 0
|
||||
BypassListenerEffects: 0
|
||||
BypassReverbZones: 0
|
||||
rolloffCustomCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0.33333334
|
||||
outWeight: 0.33333334
|
||||
- serializedVersion: 3
|
||||
time: 1
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0.33333334
|
||||
outWeight: 0.33333334
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
panLevelCustomCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0.33333334
|
||||
outWeight: 0.33333334
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
spreadCustomCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 0
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0.33333334
|
||||
outWeight: 0.33333334
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
reverbZoneMixCustomCurve:
|
||||
serializedVersion: 2
|
||||
m_Curve:
|
||||
- serializedVersion: 3
|
||||
time: 0
|
||||
value: 1
|
||||
inSlope: 0
|
||||
outSlope: 0
|
||||
tangentMode: 0
|
||||
weightedMode: 0
|
||||
inWeight: 0.33333334
|
||||
outWeight: 0.33333334
|
||||
m_PreInfinity: 2
|
||||
m_PostInfinity: 2
|
||||
m_RotationOrder: 4
|
||||
--- !u!114 &8403910360848460228
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 8852519433211468652}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 33d75335a9dad784a91baba5578371fb, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
hoverSound: {fileID: 0}
|
||||
targetScale: 1.1
|
||||
clickSound: {fileID: 0}
|
||||
pressScale: 0.8
|
||||
scaleDuration: 0.1
|
||||
|
||||
@ -66,7 +66,7 @@ MonoBehaviour:
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: "\u6295\u964D"
|
||||
m_text: "\u4E3E\u62A5"
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: ce4904f8ddac15944907907115531ad5, type: 2}
|
||||
m_sharedMaterial: {fileID: 1214840240034325189, guid: ce4904f8ddac15944907907115531ad5, type: 2}
|
||||
@ -169,7 +169,7 @@ GameObject:
|
||||
- component: {fileID: 8122721559232986071}
|
||||
- component: {fileID: 749900240545571269}
|
||||
m_Layer: 5
|
||||
m_Name: CheckButton
|
||||
m_Name: NoSeeButton
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
@ -405,7 +405,7 @@ GameObject:
|
||||
- component: {fileID: 8341363460398201508}
|
||||
- component: {fileID: 4268531322444815779}
|
||||
m_Layer: 5
|
||||
m_Name: SurrenderButton
|
||||
m_Name: JubaoButton
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
@ -946,7 +946,7 @@ MonoBehaviour:
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: "\u786E\u8BA4"
|
||||
m_text: "\u5C4F\u853D"
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: ce4904f8ddac15944907907115531ad5, type: 2}
|
||||
m_sharedMaterial: {fileID: 1214840240034325189, guid: ce4904f8ddac15944907907115531ad5, type: 2}
|
||||
@ -1060,7 +1060,7 @@ GameObject:
|
||||
- component: {fileID: 5660124054416036487}
|
||||
- component: {fileID: 5151123123469694305}
|
||||
m_Layer: 5
|
||||
m_Name: UIBottomBottomBarQuitPanel
|
||||
m_Name: UIOutsideMultiplayRoomActionPanel
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
@ -1151,13 +1151,12 @@ MonoBehaviour:
|
||||
m_GameObject: {fileID: 4562217579296961775}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 23a2c17451c60ba4596a82bec9da1626, type: 3}
|
||||
m_Script: {fileID: 11500000, guid: f86d753f5f274e94b87ac0f58e6c5eed, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
Animancer: {fileID: 5660124054416036487}
|
||||
CancelButton: {fileID: 3793769769101931997}
|
||||
SurrenderButton: {fileID: 6171244316253519132}
|
||||
CheckButton: {fileID: 4254165084226125654}
|
||||
BlockButton: {fileID: 4254165084226125654}
|
||||
ReportButton: {fileID: 6171244316253519132}
|
||||
--- !u!1 &4669599011627093475
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@ -1536,7 +1535,7 @@ MonoBehaviour:
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: "\u9000\u51FA\u672C\u5C40"
|
||||
m_text: "\u7279\u6B8A\u64CD\u4F5C"
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: ce4904f8ddac15944907907115531ad5, type: 2}
|
||||
m_sharedMaterial: {fileID: 1214840240034325189, guid: ce4904f8ddac15944907907115531ad5, type: 2}
|
||||
@ -1969,9 +1968,9 @@ RectTransform:
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children:
|
||||
- {fileID: 7534345392331640139}
|
||||
- {fileID: 8336259769512063222}
|
||||
- {fileID: 3276818161146238211}
|
||||
- {fileID: 8336259769512063222}
|
||||
- {fileID: 7534345392331640139}
|
||||
m_Father: {fileID: 2929065332464497643}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
@ -2086,7 +2085,7 @@ MonoBehaviour:
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: "\u662F\u5426\u9000\u51FA\u6E38\u620F\uFF1F\n\u6E38\u620F\u5C06\u81EA\u52A8\u4FDD\u5B58"
|
||||
m_text: "\u5C4F\u853D\u623F\u95F4\u540E\u5C06\u57281\u5929\u5185\u4E0D\u518D\u663E\u793A\u8BE5\u73A9\u5BB6\u7684\u623F\u95F4\uFF0C\u4E3E\u62A5\u529F\u80FD\u4ECD\u5728\u5F00\u53D1\u4E2D\u3002"
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: 8e119f168f1a6b745be02ef19f51610f, type: 2}
|
||||
m_sharedMaterial: {fileID: -8081454072124122709, guid: 8e119f168f1a6b745be02ef19f51610f, type: 2}
|
||||
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d4ab4a8a3b7e1024f820bff533bdcb3f
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -1,17 +1,85 @@
|
||||
# TH1 屏蔽词表
|
||||
# 规则:
|
||||
# - 一行一个词
|
||||
# - #开头的行是注释
|
||||
# - 空行忽略
|
||||
# - 大小写不敏感
|
||||
# TH1 banned word fallback list
|
||||
# Scope:
|
||||
# - Small high-confidence fallback for room names and player chat.
|
||||
# - Steam text filtering should still run first when available.
|
||||
# - Do not add political, religious, historical, personal-name, or broad sensitive terms here.
|
||||
# - One entry per line. Lines starting with # are ignored.
|
||||
# - Matching is case-insensitive in code.
|
||||
#
|
||||
# 来源建议:GitHub 搜 sensitive-words / textfilter 有现成多语种词表,复制粘贴即可
|
||||
# 修改本文件后无需重启编辑器,下次进游戏自动重新加载
|
||||
# Maintenance:
|
||||
# - Keep this list compact to reduce false positives.
|
||||
# - Avoid very short ambiguous English words such as ass, sex, die, kill.
|
||||
# - Move to a generated multi-source word-list before treating this as a compliance solution.
|
||||
|
||||
# ========== 中文 ==========
|
||||
# English
|
||||
fuck
|
||||
fucking
|
||||
fucker
|
||||
motherfucker
|
||||
shit
|
||||
bullshit
|
||||
asshole
|
||||
bitch
|
||||
bastard
|
||||
cunt
|
||||
dickhead
|
||||
dick
|
||||
cock
|
||||
pussy
|
||||
whore
|
||||
slut
|
||||
nigger
|
||||
nigga
|
||||
|
||||
# ========== English ==========
|
||||
# Chinese
|
||||
傻逼
|
||||
傻b
|
||||
煞笔
|
||||
妈的
|
||||
他妈的
|
||||
去你妈
|
||||
你妈逼
|
||||
草你妈
|
||||
草泥马
|
||||
操你
|
||||
操你妈
|
||||
卧槽
|
||||
尼玛
|
||||
死妈
|
||||
鸡巴
|
||||
几把
|
||||
屌
|
||||
贱人
|
||||
王八蛋
|
||||
混蛋
|
||||
狗屎
|
||||
|
||||
# ========== 日本語 ==========
|
||||
# Japanese
|
||||
くそ
|
||||
クソ
|
||||
ちくしょう
|
||||
ばかやろう
|
||||
バカヤロー
|
||||
死ね
|
||||
くたばれ
|
||||
ファック
|
||||
ちんこ
|
||||
まんこ
|
||||
|
||||
# ========== 한국어 ==========
|
||||
# Korean
|
||||
씨발
|
||||
시발
|
||||
ㅅㅂ
|
||||
병신
|
||||
개새끼
|
||||
새끼
|
||||
좆
|
||||
좆같
|
||||
지랄
|
||||
꺼져
|
||||
죽어
|
||||
엿먹어
|
||||
미친놈
|
||||
미친년
|
||||
보지
|
||||
자지
|
||||
|
||||
@ -104,6 +104,9 @@ namespace Logic.Audio
|
||||
path["SFX/MATCH_lose"] = "Audio/SFX/MATCH_lose";
|
||||
path["SFX/UNIT_born"] = "Audio/SFX/UNIT_born";
|
||||
path["SFX/start"] = "Audio/SFX/start";
|
||||
path["SFX/UI_message"] = "Audio/SFX/UI_message";
|
||||
path["SFX/UI_playerenter"] = "Audio/SFX/UI_playerenter";
|
||||
path["SFX/UI_beep"] = "Audio/SFX/UI_beep";
|
||||
|
||||
|
||||
|
||||
|
||||
@ -133,7 +133,9 @@ namespace TH1_Core.Events
|
||||
TurnHint,
|
||||
ExamineTech,
|
||||
ExamineCityExp,
|
||||
InfiltrateStealCoin
|
||||
InfiltrateStealCoin,
|
||||
OutsideMultiplayRoomFull,
|
||||
OutsideMultiplayRoomGone
|
||||
}
|
||||
public struct ShowUINotifyCommon
|
||||
{
|
||||
|
||||
@ -176,6 +176,7 @@ namespace TH1_Core.Managers
|
||||
{
|
||||
//step #2
|
||||
DebugUI?.Update();
|
||||
UIBottomManager?.Update();
|
||||
|
||||
//如果正在AIPlaying 更新AIHint
|
||||
if (Main.MapData != null && Main.MapData.CurPlayer != null && Main.MapData.CurPlayer != Main.MapData.PlayerMap.SelfPlayerData)
|
||||
|
||||
@ -41,6 +41,8 @@ public class TextDataAssets : ScriptableObject
|
||||
[MultilingualField]public string OutsideMultiplayOpenTitle;
|
||||
[MultilingualField]public string OutsideMultiplayReadyTitle;
|
||||
[MultilingualField]public string OutsideMultiplayOpenHint;
|
||||
[MultilingualField]public string OutsideMultiplayRoomFull;
|
||||
[MultilingualField]public string OutsideMultiplayRoomGone;
|
||||
|
||||
[MultilingualField]public string OutsideHistoryDropListNoLimitP;
|
||||
[MultilingualField]public string OutsideHistoryDropList2P;
|
||||
|
||||
@ -1,51 +1,57 @@
|
||||
/*
|
||||
* @Description: 屏蔽词过滤器。从 Resources/banned_words.txt 加载词表,命中后替换为同长度 *。
|
||||
* @Date: 2026-05-22
|
||||
*/
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using UnityEngine;
|
||||
|
||||
#if UNITY_STANDALONE_WIN || UNITY_STANDALONE_LINUX || UNITY_STANDALONE_OSX || STEAMWORKS_WIN || STEAMWORKS_LIN_OSX
|
||||
using Steamworks;
|
||||
#endif
|
||||
|
||||
namespace TH1_Logic.Chat
|
||||
{
|
||||
public enum BannedTextContext
|
||||
{
|
||||
GameContent,
|
||||
Chat,
|
||||
Name
|
||||
}
|
||||
|
||||
public static class BannedWordFilter
|
||||
{
|
||||
private const string ResourcePath = "banned_words";
|
||||
|
||||
private static readonly List<string> _words = new List<string>();
|
||||
private static readonly string[] BuiltInWords = { "fuck" };
|
||||
private static bool _loaded;
|
||||
|
||||
/// <summary>
|
||||
/// 对输入文本做屏蔽词过滤,命中词原地替换为同长度的 *。
|
||||
/// 大小写不敏感。空字符串/null 原样返回。
|
||||
/// </summary>
|
||||
public static string Filter(string input)
|
||||
#if UNITY_STANDALONE_WIN || UNITY_STANDALONE_LINUX || UNITY_STANDALONE_OSX || STEAMWORKS_WIN || STEAMWORKS_LIN_OSX
|
||||
private static bool _steamFilterInitAttempted;
|
||||
private static bool _steamFilterAvailable;
|
||||
#endif
|
||||
|
||||
public static string Filter(string input, BannedTextContext context = BannedTextContext.GameContent, ulong sourceSteamId = 0)
|
||||
{
|
||||
if (string.IsNullOrEmpty(input)) return input;
|
||||
EnsureLoaded();
|
||||
if (_words.Count == 0) return input;
|
||||
|
||||
string result = input;
|
||||
EnsureLoaded();
|
||||
|
||||
string result = TrySteamFilter(input, context, sourceSteamId, out var steamFiltered)
|
||||
? steamFiltered
|
||||
: input;
|
||||
|
||||
foreach (var word in BuiltInWords)
|
||||
{
|
||||
result = ReplaceWord(result, word);
|
||||
}
|
||||
|
||||
foreach (var word in _words)
|
||||
{
|
||||
int searchStart = 0;
|
||||
while (searchStart < result.Length)
|
||||
{
|
||||
int idx = result.IndexOf(word, searchStart, StringComparison.OrdinalIgnoreCase);
|
||||
if (idx < 0) break;
|
||||
result = result.Substring(0, idx)
|
||||
+ new string('*', word.Length)
|
||||
+ result.Substring(idx + word.Length);
|
||||
searchStart = idx + word.Length;
|
||||
}
|
||||
result = ReplaceWord(result, word);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 强制重新加载词表。调试/热更新词表时手动调用。
|
||||
/// </summary>
|
||||
public static void Reload()
|
||||
{
|
||||
_loaded = false;
|
||||
@ -61,7 +67,7 @@ namespace TH1_Logic.Chat
|
||||
var ta = Resources.Load<TextAsset>(ResourcePath);
|
||||
if (ta == null)
|
||||
{
|
||||
Debug.LogWarning($"[BannedWordFilter] Resources/{ResourcePath}.txt 未找到,屏蔽词过滤不生效");
|
||||
Debug.LogWarning($"[BannedWordFilter] Resources/{ResourcePath}.txt not found, local word-list filtering is disabled");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -72,7 +78,79 @@ namespace TH1_Logic.Chat
|
||||
if (line.StartsWith("#")) continue;
|
||||
_words.Add(line);
|
||||
}
|
||||
Debug.Log($"[BannedWordFilter] 加载完成,共 {_words.Count} 个屏蔽词");
|
||||
|
||||
Debug.Log($"[BannedWordFilter] Loaded {_words.Count} local banned words");
|
||||
}
|
||||
|
||||
private static bool TrySteamFilter(string input, BannedTextContext context, ulong sourceSteamId, out string filtered)
|
||||
{
|
||||
filtered = null;
|
||||
|
||||
#if UNITY_STANDALONE_WIN || UNITY_STANDALONE_LINUX || UNITY_STANDALONE_OSX || STEAMWORKS_WIN || STEAMWORKS_LIN_OSX
|
||||
try
|
||||
{
|
||||
if (!CallbackDispatcher.IsInitialized) return false;
|
||||
|
||||
if (!_steamFilterInitAttempted)
|
||||
{
|
||||
_steamFilterInitAttempted = true;
|
||||
_steamFilterAvailable = SteamUtils.InitFilterText(0);
|
||||
if (!_steamFilterAvailable)
|
||||
{
|
||||
Debug.LogWarning("[BannedWordFilter] Steam text filter unavailable, falling back to local word list");
|
||||
}
|
||||
}
|
||||
|
||||
if (!_steamFilterAvailable) return false;
|
||||
|
||||
var source = sourceSteamId == 0 ? CSteamID.Nil : new CSteamID(sourceSteamId);
|
||||
uint bufferSize = (uint)Math.Max(Encoding.UTF8.GetByteCount(input) + 1, 1);
|
||||
int filteredCount = SteamUtils.FilterText(MapSteamContext(context), source, input, out filtered, bufferSize);
|
||||
return filteredCount >= 0 && filtered != null;
|
||||
}
|
||||
catch (Exception e) when (e is DllNotFoundException || e is EntryPointNotFoundException || e is InvalidOperationException)
|
||||
{
|
||||
_steamFilterAvailable = false;
|
||||
Debug.LogWarning($"[BannedWordFilter] Steam text filter failed, falling back to local word list: {e.Message}");
|
||||
return false;
|
||||
}
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if UNITY_STANDALONE_WIN || UNITY_STANDALONE_LINUX || UNITY_STANDALONE_OSX || STEAMWORKS_WIN || STEAMWORKS_LIN_OSX
|
||||
private static ETextFilteringContext MapSteamContext(BannedTextContext context)
|
||||
{
|
||||
switch (context)
|
||||
{
|
||||
case BannedTextContext.Chat:
|
||||
return ETextFilteringContext.k_ETextFilteringContextChat;
|
||||
case BannedTextContext.Name:
|
||||
return ETextFilteringContext.k_ETextFilteringContextName;
|
||||
default:
|
||||
return ETextFilteringContext.k_ETextFilteringContextGameContent;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
private static string ReplaceWord(string input, string word)
|
||||
{
|
||||
if (string.IsNullOrEmpty(input) || string.IsNullOrEmpty(word)) return input;
|
||||
|
||||
int searchStart = 0;
|
||||
while (searchStart < input.Length)
|
||||
{
|
||||
int idx = input.IndexOf(word, searchStart, StringComparison.OrdinalIgnoreCase);
|
||||
if (idx < 0) break;
|
||||
|
||||
input = input.Substring(0, idx)
|
||||
+ new string('*', word.Length)
|
||||
+ input.Substring(idx + word.Length);
|
||||
searchStart = idx + word.Length;
|
||||
}
|
||||
|
||||
return input;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -39,7 +39,7 @@ namespace TH1_Logic.Chat
|
||||
var item = new ChatItem();
|
||||
item.Hash = System.Guid.NewGuid().GetHashCode();
|
||||
item.SenderId = lobby.GetSelfMemberId();
|
||||
item.Message = BannedWordFilter.Filter(message);
|
||||
item.Message = BannedWordFilter.Filter(message, BannedTextContext.Chat, item.SenderId);
|
||||
item.Time = Time.time;
|
||||
|
||||
ChatItems.Add(item);
|
||||
@ -56,7 +56,7 @@ namespace TH1_Logic.Chat
|
||||
public void ReceiveChatItem(ChatItem newItem)
|
||||
{
|
||||
if (newItem == null || _chatItems.ContainsKey(newItem.Hash)) return;
|
||||
newItem.Message = BannedWordFilter.Filter(newItem.Message);
|
||||
newItem.Message = BannedWordFilter.Filter(newItem.Message, BannedTextContext.Chat, newItem.SenderId);
|
||||
newItem.Time = Time.time;
|
||||
ChatItems.Add(newItem);
|
||||
_chatItems[newItem.Hash] = newItem;
|
||||
@ -87,4 +87,4 @@ namespace TH1_Logic.Chat
|
||||
[MemoryPackIgnore]
|
||||
public bool AlreadyUIShow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1124,7 +1124,7 @@ namespace TH1_Logic.Steam
|
||||
}
|
||||
var filteredRoomName = result.ToString();
|
||||
if (string.IsNullOrEmpty(filteredRoomName)) return "Default";
|
||||
return BannedWordFilter.Filter(filteredRoomName);
|
||||
return BannedWordFilter.Filter(filteredRoomName, BannedTextContext.Name);
|
||||
}
|
||||
|
||||
public bool IsInitialized()
|
||||
|
||||
@ -116,6 +116,11 @@ namespace TH1_UI.Controller.Bottom
|
||||
WindowScript.HideBottomBarNextTurn();
|
||||
}
|
||||
|
||||
public void RefreshNextTurnCountdown()
|
||||
{
|
||||
WindowScript?.RefreshNextTurnCountdown();
|
||||
}
|
||||
|
||||
|
||||
public void ShowBottomBarTabUnit()
|
||||
{
|
||||
@ -215,4 +220,4 @@ namespace TH1_UI.Controller.Bottom
|
||||
Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -94,9 +94,9 @@ namespace TH1_UI.Core
|
||||
{
|
||||
BottomBarController.BottomBarQuit();
|
||||
}
|
||||
public static void Update()
|
||||
public void Update()
|
||||
{
|
||||
|
||||
BottomBarController?.RefreshNextTurnCountdown();
|
||||
}
|
||||
|
||||
public void UpdateBottomBarHeroAvatar()
|
||||
@ -119,4 +119,4 @@ namespace TH1_UI.Core
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -38,7 +38,7 @@ namespace TH1_UI.View.Bottom.Chat
|
||||
}
|
||||
else
|
||||
{
|
||||
SenderText.text = BannedWordFilter.Filter(data.SenderName) + ":";
|
||||
SenderText.text = BannedWordFilter.Filter(data.SenderName, BannedTextContext.Name) + ":";
|
||||
SenderText.color = data.IsSelf ? SelfNameColor : OtherNameColor;
|
||||
}
|
||||
}
|
||||
@ -46,7 +46,7 @@ namespace TH1_UI.View.Bottom.Chat
|
||||
// 设置消息内容
|
||||
if (MessageText != null)
|
||||
{
|
||||
MessageText.text = BannedWordFilter.Filter(data.Message);
|
||||
MessageText.text = BannedWordFilter.Filter(data.Message, BannedTextContext.Chat);
|
||||
}
|
||||
|
||||
// 设置时间
|
||||
|
||||
@ -49,6 +49,10 @@ namespace TH1_UI.View.Bottom
|
||||
public UIBottomBottomBarNextTurnConfirmPanelMono NextTurnConfirmPanel;
|
||||
|
||||
public int _tabUnitCount = 0;
|
||||
private TextMeshProUGUI _nextButtonText;
|
||||
private MultilingualTextMono _nextButtonMultilingualText;
|
||||
private string _lastNextTurnCountdownParam;
|
||||
private int _lastCountdownBeepSecond = -1;
|
||||
|
||||
protected override void OnInit()
|
||||
{
|
||||
@ -117,8 +121,8 @@ namespace TH1_UI.View.Bottom
|
||||
|
||||
public void SetNextTurnButtonVisible(bool visible)
|
||||
{
|
||||
if(visible) ShowButton(NextButton);
|
||||
else HideButton(NextButton);
|
||||
if(visible) ShowBottomBarNextTurn();
|
||||
else HideBottomBarNextTurn();
|
||||
}
|
||||
|
||||
//通常一局只会set一次,每次都是完全清空,然后绑定新的一个对局的按钮
|
||||
@ -128,6 +132,7 @@ namespace TH1_UI.View.Bottom
|
||||
QuitPanel.gameObject.SetActive(false);
|
||||
if (NextTurnConfirmPanel != null)
|
||||
NextTurnConfirmPanel.gameObject.SetActive(false);
|
||||
CacheNextTurnButtonText();
|
||||
|
||||
QuitButton.onClick.RemoveAllListeners();
|
||||
QuitButton.onClick.AddListener(OnQuitButtonClicked);
|
||||
@ -163,6 +168,7 @@ namespace TH1_UI.View.Bottom
|
||||
|
||||
// 初始检查 TabButton 是否显示
|
||||
SetTabButtonVisible(CheckHasTabUnit(out var _));
|
||||
RefreshNextTurnCountdown();
|
||||
}
|
||||
|
||||
private void OnQuitButtonClicked()
|
||||
@ -305,6 +311,7 @@ namespace TH1_UI.View.Bottom
|
||||
//HideButton(TechButton);
|
||||
//HideButton(HeroButton);
|
||||
HideButton(NextButton);
|
||||
SetNextTurnCountdownParam(string.Empty);
|
||||
}
|
||||
|
||||
public void HideBottomBarTabUnit()
|
||||
@ -324,9 +331,73 @@ namespace TH1_UI.View.Bottom
|
||||
{
|
||||
//ShowButton(TechButton);
|
||||
ShowButton(NextButton);
|
||||
RefreshNextTurnCountdown();
|
||||
//ShowButton(HeroButton);
|
||||
}
|
||||
|
||||
public void RefreshNextTurnCountdown()
|
||||
{
|
||||
SetNextTurnCountdownParam(GetNextTurnCountdownParam());
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
RefreshNextTurnCountdown();
|
||||
}
|
||||
|
||||
private string GetNextTurnCountdownParam()
|
||||
{
|
||||
var map = Main.MapData;
|
||||
if (map?.MapConfig == null || map.Net == null || map.PlayerMap == null) return string.Empty;
|
||||
if (map.Net.Mode != NetMode.Multi) return string.Empty;
|
||||
if (!map.MapConfig.IsLimitTime || map.MapConfig.TimeLimitSeconds <= 0) return string.Empty;
|
||||
if (map.CurPlayer == null || map.PlayerMap.SelfPlayerData == null) return string.Empty;
|
||||
if (map.CurPlayer != map.PlayerMap.SelfPlayerData) return string.Empty;
|
||||
if (NextButton == null || !NextButton.gameObject.activeInHierarchy) return string.Empty;
|
||||
|
||||
var remainingSeconds = map.Net.PlayerStartTime > 0f
|
||||
? Mathf.CeilToInt(map.MapConfig.TimeLimitSeconds - (Time.time - map.Net.PlayerStartTime))
|
||||
: map.MapConfig.TimeLimitSeconds;
|
||||
if (remainingSeconds < 0) remainingSeconds = 0;
|
||||
PlayCountdownBeepIfNeeded(remainingSeconds);
|
||||
return $" {remainingSeconds}s";
|
||||
}
|
||||
|
||||
private void SetNextTurnCountdownParam(string param)
|
||||
{
|
||||
CacheNextTurnButtonText();
|
||||
if (_nextButtonMultilingualText == null) return;
|
||||
param ??= string.Empty;
|
||||
if (string.IsNullOrEmpty(param)) _lastCountdownBeepSecond = -1;
|
||||
if (_lastNextTurnCountdownParam == param) return;
|
||||
|
||||
_lastNextTurnCountdownParam = param;
|
||||
_nextButtonMultilingualText.ParamList = new List<string> { param };
|
||||
_nextButtonMultilingualText.OnMultilingualChanged();
|
||||
}
|
||||
|
||||
private void PlayCountdownBeepIfNeeded(int secondsLeft)
|
||||
{
|
||||
if (secondsLeft > 10 || secondsLeft <= 0)
|
||||
{
|
||||
_lastCountdownBeepSecond = -1;
|
||||
return;
|
||||
}
|
||||
if (_lastCountdownBeepSecond == secondsLeft) return;
|
||||
_lastCountdownBeepSecond = secondsLeft;
|
||||
AudioManager.Instance.PlayAudio("SFX/UI_beep");
|
||||
}
|
||||
|
||||
private void CacheNextTurnButtonText()
|
||||
{
|
||||
if (_nextButtonMultilingualText != null) return;
|
||||
if (NextButton == null) return;
|
||||
_nextButtonText = NextButton.GetComponentInChildren<TextMeshProUGUI>(true);
|
||||
_nextButtonMultilingualText = _nextButtonText != null
|
||||
? _nextButtonText.GetComponent<MultilingualTextMono>()
|
||||
: null;
|
||||
}
|
||||
|
||||
|
||||
public void SetTechButtonVisible(bool visible)
|
||||
{
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Logic.Audio;
|
||||
using Logic.Multilingual;
|
||||
using TH1_Logic.Net;
|
||||
using TH1_Logic.Steam;
|
||||
@ -33,6 +34,7 @@ namespace TH1_UI.View.Bottom
|
||||
|
||||
private List<UIBottomNetRowMono> _netInfoRowList = null;
|
||||
private bool _initialized = false;
|
||||
private int _lastNetMemberCount = -1;
|
||||
|
||||
protected override void OnInit()
|
||||
{
|
||||
@ -119,6 +121,7 @@ namespace TH1_UI.View.Bottom
|
||||
var lobbyInfo = LobbyManager.Instance.Lobby as SteamLobbyManager;
|
||||
if (lobbyInfo == null) return;
|
||||
var mids = lobbyInfo.GetAllMemberInfo();
|
||||
PlayMemberEnterAudioIfNeeded(mids.Count);
|
||||
|
||||
//如果发现人数变多了,重新Init(比如继续一个3人局游戏,开始进来的时候只有2人
|
||||
if (mids.Count > _netInfoRowList.Count)
|
||||
@ -141,6 +144,13 @@ namespace TH1_UI.View.Bottom
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void PlayMemberEnterAudioIfNeeded(int memberCount)
|
||||
{
|
||||
if (_lastNetMemberCount >= 0 && memberCount > _lastNetMemberCount)
|
||||
AudioManager.Instance.PlayAudio("SFX/UI_playerenter");
|
||||
_lastNetMemberCount = memberCount;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
@ -208,6 +218,7 @@ namespace TH1_UI.View.Bottom
|
||||
public void CloseView()
|
||||
{
|
||||
_initialized = false;
|
||||
_lastNetMemberCount = -1;
|
||||
|
||||
// 清理 ChatArea
|
||||
CloseChatArea();
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Logic.Audio;
|
||||
using Logic.Multilingual;
|
||||
using TH1_Logic.Chat;
|
||||
using TH1_Logic.Net;
|
||||
@ -281,6 +282,8 @@ namespace TH1_UI.View.Common
|
||||
};
|
||||
CreateChatRow(data);
|
||||
}
|
||||
if (newCount > 0)
|
||||
AudioManager.Instance.PlayAudio("SFX/UI_message");
|
||||
Debug.Log($"[ChatArea] RefreshChatBox: {newCount} new messages, total items={items.Count}, rows={_chatRows.Count}");
|
||||
}
|
||||
|
||||
@ -342,7 +345,7 @@ namespace TH1_UI.View.Common
|
||||
senderName = $"玩家{item.SenderId}";
|
||||
|
||||
if (sb.Length > 0) sb.Append('\n');
|
||||
sb.Append(FilterChatText(senderName)).Append(':').Append(FilterChatText(item.Message));
|
||||
sb.Append(FilterNameText(senderName)).Append(':').Append(FilterChatText(item.Message));
|
||||
}
|
||||
|
||||
DocText.text = sb.ToString();
|
||||
@ -390,7 +393,7 @@ namespace TH1_UI.View.Common
|
||||
|
||||
// 拼接显示文本: "发言者:内容" 或系统消息直接显示内容
|
||||
string displayMessage = FilterChatText(data.Message);
|
||||
string displaySenderName = FilterChatText(data.SenderName);
|
||||
string displaySenderName = FilterNameText(data.SenderName);
|
||||
string displayText = data.IsSystem
|
||||
? displayMessage
|
||||
: $"{displaySenderName}:{displayMessage}";
|
||||
@ -407,7 +410,12 @@ namespace TH1_UI.View.Common
|
||||
|
||||
private static string FilterChatText(string text)
|
||||
{
|
||||
return BannedWordFilter.Filter(text);
|
||||
return BannedWordFilter.Filter(text, BannedTextContext.Chat);
|
||||
}
|
||||
|
||||
private static string FilterNameText(string text)
|
||||
{
|
||||
return BannedWordFilter.Filter(text, BannedTextContext.Name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -56,6 +56,12 @@ namespace TH1_UI.View.Notify
|
||||
case UINotifyCommonType.InfiltrateStealCoin:
|
||||
MultilingualManager.Instance.SetUIText(content,Table.Instance.TextDataAssets.NotifyUIInfiltrateStealCoin,new List<string>(){eventType.IntParam.ToString()});
|
||||
break;
|
||||
case UINotifyCommonType.OutsideMultiplayRoomFull:
|
||||
MultilingualManager.Instance.SetUIText(content,Table.Instance.TextDataAssets.OutsideMultiplayRoomFull);
|
||||
break;
|
||||
case UINotifyCommonType.OutsideMultiplayRoomGone:
|
||||
MultilingualManager.Instance.SetUIText(content,Table.Instance.TextDataAssets.OutsideMultiplayRoomGone);
|
||||
break;
|
||||
}
|
||||
Timer.Instance.TimerRegister(this, AutoClose,1f,"UINotifyCommonView");
|
||||
}
|
||||
|
||||
@ -0,0 +1,51 @@
|
||||
using TH1_Logic.Chat;
|
||||
|
||||
namespace TH1_UI.View.Outside
|
||||
{
|
||||
internal static class RoomNameInputValidator
|
||||
{
|
||||
public const int MaxRoomNameLength = 20;
|
||||
public const string InvalidRoomNameHint = "房间名称包含不适当内容,请修改后再确认。禁止使用辱骂、歧视、色情、广告、冒充官方或泄露隐私等内容。";
|
||||
public const string InvalidCharactersHint = "房间名称只能使用中文、英文字母、数字、下划线、中划线和点。";
|
||||
|
||||
public static string SanitizeAllowedCharacters(string input)
|
||||
{
|
||||
if (string.IsNullOrEmpty(input)) return string.Empty;
|
||||
|
||||
var result = new System.Text.StringBuilder();
|
||||
foreach (char c in input.Trim())
|
||||
{
|
||||
bool isChinese = c >= '\u4e00' && c <= '\u9fff';
|
||||
bool isLetter = (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
|
||||
bool isDigit = c >= '0' && c <= '9';
|
||||
bool isAllowedSymbol = c == '_' || c == '-' || c == '.';
|
||||
|
||||
if (isChinese || isLetter || isDigit || isAllowedSymbol)
|
||||
{
|
||||
result.Append(c);
|
||||
}
|
||||
|
||||
if (result.Length >= MaxRoomNameLength) break;
|
||||
}
|
||||
|
||||
return result.ToString();
|
||||
}
|
||||
|
||||
public static bool TryValidateForSubmit(string input, string fallbackRoomName, out string roomName, out string hint)
|
||||
{
|
||||
roomName = SanitizeAllowedCharacters(input);
|
||||
if (string.IsNullOrEmpty(roomName)) roomName = SanitizeAllowedCharacters(fallbackRoomName);
|
||||
if (string.IsNullOrEmpty(roomName)) roomName = "Default";
|
||||
|
||||
var filtered = BannedWordFilter.Filter(roomName, BannedTextContext.Name);
|
||||
if (filtered != roomName)
|
||||
{
|
||||
hint = InvalidRoomNameHint;
|
||||
return false;
|
||||
}
|
||||
|
||||
hint = null;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2a7a6d47e24d4e2f95a2c3d6ce1b4a78
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -35,6 +35,8 @@ namespace TH1_UI.View.Outside
|
||||
public TMP_InputField PasswordInput;
|
||||
public GameObject PasswordHintObject;
|
||||
public TextMeshProUGUI PasswordHintText;
|
||||
public GameObject RoomNameHintObject;
|
||||
public TextMeshProUGUI RoomNameHintText;
|
||||
|
||||
private Action<CreateRoomParams> _onConfirm;
|
||||
private Action _onClose;
|
||||
@ -63,6 +65,7 @@ namespace TH1_UI.View.Outside
|
||||
RoomType.OnOptionClicked = _ => RefreshPasswordVisible();
|
||||
|
||||
AutoBindRoomNameInput();
|
||||
InitRoomNameInput();
|
||||
EnsureSeatCountOption();
|
||||
AutoBindPasswordLabel();
|
||||
EnsurePasswordHint();
|
||||
@ -76,6 +79,7 @@ namespace TH1_UI.View.Outside
|
||||
SeatCount?.Init(SeatToIndex(defaultSeatCount));
|
||||
if (RoomNameInput != null) RoomNameInput.text = string.Empty;
|
||||
SetRoomNamePlaceholder(_defaultRoomName);
|
||||
HideRoomNameHint();
|
||||
if (PasswordInput != null) PasswordInput.text = string.Empty;
|
||||
HidePasswordHint();
|
||||
RefreshPasswordVisible();
|
||||
@ -88,9 +92,13 @@ namespace TH1_UI.View.Outside
|
||||
|
||||
public bool TryBuildParams(out CreateRoomParams args)
|
||||
{
|
||||
var roomName = RoomNameInput != null ? RoomNameInput.text?.Trim() : string.Empty;
|
||||
if (string.IsNullOrEmpty(roomName)) roomName = _defaultRoomName;
|
||||
roomName = SteamLobbyManager.FilterRoomName(roomName);
|
||||
args = default;
|
||||
var inputRoomName = RoomNameInput != null ? RoomNameInput.text : string.Empty;
|
||||
if (!RoomNameInputValidator.TryValidateForSubmit(inputRoomName, _defaultRoomName, out var roomName, out var roomNameHint))
|
||||
{
|
||||
ShowRoomNameHint(roomNameHint);
|
||||
return false;
|
||||
}
|
||||
|
||||
args = new CreateRoomParams
|
||||
{
|
||||
@ -172,6 +180,38 @@ namespace TH1_UI.View.Outside
|
||||
}
|
||||
}
|
||||
|
||||
private void InitRoomNameInput()
|
||||
{
|
||||
if (RoomNameInput == null) return;
|
||||
RoomNameInput.characterLimit = RoomNameInputValidator.MaxRoomNameLength;
|
||||
RoomNameInput.onValueChanged.RemoveListener(OnRoomNameInputChanged);
|
||||
RoomNameInput.onValueChanged.AddListener(OnRoomNameInputChanged);
|
||||
}
|
||||
|
||||
private void OnRoomNameInputChanged(string value)
|
||||
{
|
||||
HideRoomNameHint();
|
||||
|
||||
var sanitized = RoomNameInputValidator.SanitizeAllowedCharacters(value);
|
||||
if (sanitized == value) return;
|
||||
|
||||
RoomNameInput.SetTextWithoutNotify(sanitized);
|
||||
RoomNameInput.caretPosition = sanitized.Length;
|
||||
ShowRoomNameHint(RoomNameInputValidator.InvalidCharactersHint);
|
||||
}
|
||||
|
||||
private void ShowRoomNameHint(string hint)
|
||||
{
|
||||
EnsureRoomNameHint();
|
||||
if (RoomNameHintText != null) RoomNameHintText.text = hint;
|
||||
if (RoomNameHintObject != null) RoomNameHintObject.SetActive(true);
|
||||
}
|
||||
|
||||
private void HideRoomNameHint()
|
||||
{
|
||||
if (RoomNameHintObject != null) RoomNameHintObject.SetActive(false);
|
||||
}
|
||||
|
||||
private void ShowPasswordHint()
|
||||
{
|
||||
EnsurePasswordHint();
|
||||
@ -274,6 +314,30 @@ namespace TH1_UI.View.Outside
|
||||
PasswordHintObject.SetActive(false);
|
||||
}
|
||||
|
||||
private void EnsureRoomNameHint()
|
||||
{
|
||||
if (RoomNameHintObject != null && RoomNameHintText != null) return;
|
||||
if (RoomNameInput == null || RoomNameInput.textComponent == null) return;
|
||||
|
||||
var hintObject = new GameObject("RoomNameHint", typeof(RectTransform));
|
||||
hintObject.transform.SetParent(RoomNameInput.transform.parent, false);
|
||||
var rect = hintObject.GetComponent<RectTransform>();
|
||||
rect.anchorMin = new Vector2(0.5f, 0.5f);
|
||||
rect.anchorMax = new Vector2(0.5f, 0.5f);
|
||||
rect.pivot = new Vector2(0.5f, 0.5f);
|
||||
rect.anchoredPosition = new Vector2(0f, -34f);
|
||||
rect.sizeDelta = new Vector2(520f, 54f);
|
||||
|
||||
RoomNameHintText = hintObject.AddComponent<TextMeshProUGUI>();
|
||||
RoomNameHintText.font = RoomNameInput.textComponent.font;
|
||||
RoomNameHintText.fontSize = 18f;
|
||||
RoomNameHintText.color = Color.red;
|
||||
RoomNameHintText.alignment = TextAlignmentOptions.Center;
|
||||
RoomNameHintText.text = RoomNameInputValidator.InvalidRoomNameHint;
|
||||
RoomNameHintObject = hintObject;
|
||||
RoomNameHintObject.SetActive(false);
|
||||
}
|
||||
|
||||
private int GetSeatCount()
|
||||
{
|
||||
if (SeatCount == null) return 4;
|
||||
|
||||
@ -0,0 +1,117 @@
|
||||
using System;
|
||||
using System.Text.RegularExpressions;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace TH1_UI.View.Outside
|
||||
{
|
||||
public class UIOutsideMultiplayJoinPasswordPanelMono : MonoBehaviour
|
||||
{
|
||||
public GameObject PanelRoot;
|
||||
public Button CheckButton;
|
||||
public Button CloseButton;
|
||||
public TMP_InputField PasswordInput;
|
||||
public GameObject PasswordHintObject;
|
||||
public TextMeshProUGUI PasswordHintText;
|
||||
|
||||
private Action<string> _onConfirm;
|
||||
private Action _onClose;
|
||||
|
||||
public void Init(Action<string> onConfirm, Action onClose = null)
|
||||
{
|
||||
_onConfirm = onConfirm;
|
||||
_onClose = onClose;
|
||||
|
||||
if (CheckButton != null)
|
||||
{
|
||||
CheckButton.onClick.RemoveAllListeners();
|
||||
CheckButton.onClick.AddListener(OnClickCheck);
|
||||
}
|
||||
|
||||
if (CloseButton != null)
|
||||
{
|
||||
CloseButton.onClick.RemoveAllListeners();
|
||||
CloseButton.onClick.AddListener(OnClickClose);
|
||||
}
|
||||
|
||||
if (PasswordInput != null)
|
||||
{
|
||||
PasswordInput.characterLimit = 4;
|
||||
PasswordInput.onValueChanged.RemoveListener(OnPasswordChanged);
|
||||
PasswordInput.onValueChanged.AddListener(OnPasswordChanged);
|
||||
}
|
||||
|
||||
Hide();
|
||||
}
|
||||
|
||||
public void Show()
|
||||
{
|
||||
if (PasswordInput != null)
|
||||
PasswordInput.text = string.Empty;
|
||||
HideHint();
|
||||
GetRoot().SetActive(true);
|
||||
PasswordInput?.ActivateInputField();
|
||||
}
|
||||
|
||||
public void Hide()
|
||||
{
|
||||
GetRoot().SetActive(false);
|
||||
}
|
||||
|
||||
private void OnClickCheck()
|
||||
{
|
||||
var password = PasswordInput != null ? PasswordInput.text?.Trim() : string.Empty;
|
||||
if (!IsValidPassword(password))
|
||||
{
|
||||
ShowHint();
|
||||
return;
|
||||
}
|
||||
|
||||
Hide();
|
||||
_onConfirm?.Invoke(password);
|
||||
}
|
||||
|
||||
private void OnClickClose()
|
||||
{
|
||||
Hide();
|
||||
_onClose?.Invoke();
|
||||
}
|
||||
|
||||
private void OnPasswordChanged(string value)
|
||||
{
|
||||
HideHint();
|
||||
if (PasswordInput == null) return;
|
||||
|
||||
var sanitized = Regex.Replace(value ?? string.Empty, @"\D", string.Empty);
|
||||
if (sanitized == value) return;
|
||||
|
||||
PasswordInput.SetTextWithoutNotify(sanitized);
|
||||
PasswordInput.caretPosition = sanitized.Length;
|
||||
}
|
||||
|
||||
private void ShowHint()
|
||||
{
|
||||
if (PasswordHintText != null)
|
||||
PasswordHintText.text = "密码必须是4位数字,请重新输入";
|
||||
if (PasswordHintObject != null)
|
||||
PasswordHintObject.SetActive(true);
|
||||
}
|
||||
|
||||
private void HideHint()
|
||||
{
|
||||
if (PasswordHintObject != null)
|
||||
PasswordHintObject.SetActive(false);
|
||||
}
|
||||
|
||||
private static bool IsValidPassword(string password)
|
||||
{
|
||||
return !string.IsNullOrEmpty(password) && Regex.IsMatch(password, @"^\d{4}$");
|
||||
}
|
||||
|
||||
private GameObject GetRoot()
|
||||
{
|
||||
return PanelRoot != null ? PanelRoot : gameObject;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b3f19e9ed4884c44a8e548dbf29d4c37
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -14,11 +14,13 @@ public class UIOutsideMultiplayLobbyRowMono : MonoBehaviour
|
||||
public TextMeshProUGUI GameStateText;
|
||||
public TextMeshProUGUI VersionText;
|
||||
public Button JoinButton;
|
||||
public Button ActionButton;
|
||||
|
||||
private LobbyListInfo _lobbyInfo;
|
||||
|
||||
public bool CheckParam()
|
||||
{
|
||||
AutoBindButtons();
|
||||
return RoomNameText != null && OwnerNameText != null
|
||||
&& PlayerCountText != null && JoinButton != null;
|
||||
}
|
||||
@ -29,7 +31,7 @@ public class UIOutsideMultiplayLobbyRowMono : MonoBehaviour
|
||||
/// <param name="lobbyInfo">房间信息</param>
|
||||
/// <param name="lobby">SteamLobbyManager实例</param>
|
||||
/// <param name="onJoinClicked">加入按钮回调(由View统一处理)</param>
|
||||
public void SetContent(LobbyListInfo lobbyInfo, SteamLobbyManager lobby, Action<LobbyListInfo> onJoinClicked)
|
||||
public void SetContent(LobbyListInfo lobbyInfo, SteamLobbyManager lobby, Action<LobbyListInfo> onJoinClicked, Action<LobbyListInfo> onActionClicked = null)
|
||||
{
|
||||
if (!CheckParam()) return;
|
||||
|
||||
@ -38,7 +40,7 @@ public class UIOutsideMultiplayLobbyRowMono : MonoBehaviour
|
||||
var roomName = string.IsNullOrEmpty(lobbyInfo.RoomName)
|
||||
? $"Room {lobbyInfo.LobbyId}"
|
||||
: lobbyInfo.RoomName;
|
||||
RoomNameText.text = BannedWordFilter.Filter(roomName);
|
||||
RoomNameText.text = BannedWordFilter.Filter(roomName, BannedTextContext.Name);
|
||||
OwnerNameText.text = lobbyInfo.OwnerName ?? "Unknown";
|
||||
PlayerCountText.text = $"{lobbyInfo.CurrentPlayers}/{lobbyInfo.MaxPlayers}";
|
||||
|
||||
@ -49,6 +51,24 @@ public class UIOutsideMultiplayLobbyRowMono : MonoBehaviour
|
||||
|
||||
JoinButton.onClick.RemoveAllListeners();
|
||||
JoinButton.onClick.AddListener(() => onJoinClicked?.Invoke(_lobbyInfo));
|
||||
|
||||
if (ActionButton != null)
|
||||
{
|
||||
ActionButton.onClick.RemoveAllListeners();
|
||||
ActionButton.onClick.AddListener(() => onActionClicked?.Invoke(_lobbyInfo));
|
||||
}
|
||||
}
|
||||
|
||||
private void AutoBindButtons()
|
||||
{
|
||||
if (ActionButton == null)
|
||||
ActionButton = FindButton("ActionButton") ?? FindButton("MoreButton") ?? FindButton("OptionButton");
|
||||
}
|
||||
|
||||
private Button FindButton(string buttonName)
|
||||
{
|
||||
var child = transform.Find(buttonName);
|
||||
return child != null ? child.GetComponent<Button>() : null;
|
||||
}
|
||||
|
||||
void Start()
|
||||
|
||||
@ -0,0 +1,67 @@
|
||||
using System;
|
||||
using TH1_Logic.Steam;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace TH1_UI.View.Outside
|
||||
{
|
||||
public class UIOutsideMultiplayRoomActionPanelMono : MonoBehaviour
|
||||
{
|
||||
public Button CancelButton;
|
||||
public Button BlockButton;
|
||||
public Button ReportButton;
|
||||
|
||||
private LobbyListInfo _lobbyInfo;
|
||||
private Action<LobbyListInfo> _onBlock;
|
||||
private Action<LobbyListInfo> _onReport;
|
||||
|
||||
public void Init(Action<LobbyListInfo> onBlock, Action<LobbyListInfo> onReport)
|
||||
{
|
||||
_onBlock = onBlock;
|
||||
_onReport = onReport;
|
||||
|
||||
if (CancelButton != null)
|
||||
{
|
||||
CancelButton.onClick.RemoveAllListeners();
|
||||
CancelButton.onClick.AddListener(Hide);
|
||||
}
|
||||
|
||||
if (BlockButton != null)
|
||||
{
|
||||
BlockButton.onClick.RemoveAllListeners();
|
||||
BlockButton.onClick.AddListener(OnClickBlock);
|
||||
}
|
||||
|
||||
if (ReportButton != null)
|
||||
{
|
||||
ReportButton.onClick.RemoveAllListeners();
|
||||
ReportButton.onClick.AddListener(OnClickReport);
|
||||
}
|
||||
|
||||
Hide();
|
||||
}
|
||||
|
||||
public void Show(LobbyListInfo lobbyInfo)
|
||||
{
|
||||
_lobbyInfo = lobbyInfo;
|
||||
gameObject.SetActive(true);
|
||||
}
|
||||
|
||||
public void Hide()
|
||||
{
|
||||
gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
private void OnClickBlock()
|
||||
{
|
||||
Hide();
|
||||
_onBlock?.Invoke(_lobbyInfo);
|
||||
}
|
||||
|
||||
private void OnClickReport()
|
||||
{
|
||||
Hide();
|
||||
_onReport?.Invoke(_lobbyInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f86d753f5f274e94b87ac0f58e6c5eed
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@ -4,6 +4,7 @@ using Animancer;
|
||||
using Logic;
|
||||
using Logic.Action;
|
||||
using Logic.AI;
|
||||
using Logic.Audio;
|
||||
using Logic.Multilingual;
|
||||
using ParadoxNotion;
|
||||
using RuntimeData;
|
||||
@ -66,6 +67,8 @@ namespace TH1_UI.View.Outside
|
||||
public TMP_InputField RoomNameInput;
|
||||
public Button RoomNameEditButton;
|
||||
public Button RoomNameCheckButton;
|
||||
public GameObject RoomNameHintObject;
|
||||
public TextMeshProUGUI RoomNameHintText;
|
||||
|
||||
|
||||
|
||||
@ -81,6 +84,10 @@ namespace TH1_UI.View.Outside
|
||||
public Button RefreshHallButton;
|
||||
public GameObject HallRowPrefab;
|
||||
public GameObject HallList;
|
||||
public GameObject JoinPasswordPanel;
|
||||
public UIOutsideMultiplayJoinPasswordPanelMono JoinPasswordPanelMono;
|
||||
public GameObject RoomActionPanel;
|
||||
public UIOutsideMultiplayRoomActionPanelMono RoomActionPanelMono;
|
||||
|
||||
[Header("聊天区域")]
|
||||
public RectTransform ChatAreaRoot;
|
||||
@ -110,6 +117,7 @@ namespace TH1_UI.View.Outside
|
||||
private List<UIOutsideMultiplayLobbyRowMono> _lobbyRowList;
|
||||
private UIChatAreaMono _chatArea;
|
||||
private GameObject _chatAreaGo;
|
||||
private LobbyListInfo _pendingJoinLobbyInfo;
|
||||
|
||||
private SteamLobbyManager _lobby;
|
||||
private const int MaxRoomSeatCount = 4;
|
||||
@ -122,6 +130,7 @@ namespace TH1_UI.View.Outside
|
||||
public ViDelegateAssisstant.Dele OnStartGame;
|
||||
|
||||
private bool _noRoom = false;
|
||||
private int _lastRoomMemberCount = -1;
|
||||
|
||||
// 自动刷新大厅列表
|
||||
private float _lastLobbyRefreshTime = 0f;
|
||||
@ -223,6 +232,13 @@ namespace TH1_UI.View.Outside
|
||||
RoomNameCheckButton.onClick.AddListener(ConfirmEditRoomName);
|
||||
}
|
||||
|
||||
if (RoomNameInput != null)
|
||||
{
|
||||
RoomNameInput.characterLimit = RoomNameInputValidator.MaxRoomNameLength;
|
||||
RoomNameInput.onValueChanged.RemoveListener(OnRoomNameInputChanged);
|
||||
RoomNameInput.onValueChanged.AddListener(OnRoomNameInputChanged);
|
||||
}
|
||||
|
||||
if (ReadyButton != null)
|
||||
{
|
||||
SetButtonText(ReadyButton, MultilingualManager.Instance.GetMultilingualText(Table.Instance.TextDataAssets.OutsideMultiplayReadyTitle));
|
||||
@ -244,6 +260,8 @@ namespace TH1_UI.View.Outside
|
||||
_lobbyRowList = new List<UIOutsideMultiplayLobbyRowMono>();
|
||||
_lobby = LobbyManager.Instance.Lobby as SteamLobbyManager;
|
||||
|
||||
EnsureMultiplaySubPanels();
|
||||
|
||||
RefreshHallButton.onClick.RemoveAllListeners();
|
||||
RefreshHallButton.onClick.AddListener(OnRefreshLobbyClicked);
|
||||
|
||||
@ -370,18 +388,28 @@ namespace TH1_UI.View.Outside
|
||||
{
|
||||
CloseChatArea();
|
||||
_noRoom = true;
|
||||
_lastRoomMemberCount = -1;
|
||||
SetNoRoom();
|
||||
}
|
||||
else
|
||||
{
|
||||
InitChatArea();
|
||||
_noRoom = false;
|
||||
PlayMemberEnterAudioIfNeeded();
|
||||
SetRoomInfoSetting();
|
||||
SetRoomInfoMember();
|
||||
ShowRoom();
|
||||
}
|
||||
}
|
||||
|
||||
private void PlayMemberEnterAudioIfNeeded()
|
||||
{
|
||||
int memberCount = _lobby.GetMemberCount();
|
||||
if (_lastRoomMemberCount >= 0 && memberCount > _lastRoomMemberCount)
|
||||
AudioManager.Instance.PlayAudio("SFX/UI_playerenter");
|
||||
_lastRoomMemberCount = memberCount;
|
||||
}
|
||||
|
||||
|
||||
private void ShowRoom()
|
||||
{
|
||||
@ -1008,6 +1036,7 @@ namespace TH1_UI.View.Outside
|
||||
RoomNameInput.ActivateInputField();
|
||||
}
|
||||
|
||||
HideRoomNameHint();
|
||||
SetRoomNameEditMode(true);
|
||||
}
|
||||
|
||||
@ -1019,12 +1048,14 @@ namespace TH1_UI.View.Outside
|
||||
return;
|
||||
}
|
||||
|
||||
var roomName = RoomNameInput != null ? RoomNameInput.text?.Trim() : string.Empty;
|
||||
if (!string.IsNullOrEmpty(roomName))
|
||||
var inputRoomName = RoomNameInput != null ? RoomNameInput.text : string.Empty;
|
||||
if (!RoomNameInputValidator.TryValidateForSubmit(inputRoomName, _lobby.GetRoomName(), out var roomName, out var roomNameHint))
|
||||
{
|
||||
_lobby.SetRoomName(roomName);
|
||||
ShowRoomNameHint(roomNameHint);
|
||||
return;
|
||||
}
|
||||
|
||||
_lobby.SetRoomName(roomName);
|
||||
SetRoomNameEditMode(false);
|
||||
}
|
||||
|
||||
@ -1045,9 +1076,59 @@ namespace TH1_UI.View.Outside
|
||||
RoomNameInput.gameObject.SetActive(isEditing);
|
||||
}
|
||||
|
||||
if (!isEditing) HideRoomNameHint();
|
||||
|
||||
if (RoomNameEditButton != null) RoomNameEditButton.gameObject.SetActive(canEdit && !isEditing);
|
||||
if (RoomNameCheckButton != null) RoomNameCheckButton.gameObject.SetActive(canEdit && isEditing);
|
||||
}
|
||||
|
||||
private void OnRoomNameInputChanged(string value)
|
||||
{
|
||||
HideRoomNameHint();
|
||||
|
||||
var sanitized = RoomNameInputValidator.SanitizeAllowedCharacters(value);
|
||||
if (sanitized == value) return;
|
||||
|
||||
RoomNameInput.SetTextWithoutNotify(sanitized);
|
||||
RoomNameInput.caretPosition = sanitized.Length;
|
||||
ShowRoomNameHint(RoomNameInputValidator.InvalidCharactersHint);
|
||||
}
|
||||
|
||||
private void ShowRoomNameHint(string hint)
|
||||
{
|
||||
EnsureRoomNameHint();
|
||||
if (RoomNameHintText != null) RoomNameHintText.text = hint;
|
||||
if (RoomNameHintObject != null) RoomNameHintObject.SetActive(true);
|
||||
}
|
||||
|
||||
private void HideRoomNameHint()
|
||||
{
|
||||
if (RoomNameHintObject != null) RoomNameHintObject.SetActive(false);
|
||||
}
|
||||
|
||||
private void EnsureRoomNameHint()
|
||||
{
|
||||
if (RoomNameHintObject != null && RoomNameHintText != null) return;
|
||||
if (RoomNameInput == null || RoomNameInput.textComponent == null) return;
|
||||
|
||||
var hintObject = new GameObject("RoomNameHint", typeof(RectTransform));
|
||||
hintObject.transform.SetParent(RoomNameInput.transform.parent, false);
|
||||
var rect = hintObject.GetComponent<RectTransform>();
|
||||
rect.anchorMin = new Vector2(0.5f, 0.5f);
|
||||
rect.anchorMax = new Vector2(0.5f, 0.5f);
|
||||
rect.pivot = new Vector2(0.5f, 0.5f);
|
||||
rect.anchoredPosition = new Vector2(0f, -34f);
|
||||
rect.sizeDelta = new Vector2(520f, 54f);
|
||||
|
||||
RoomNameHintText = hintObject.AddComponent<TextMeshProUGUI>();
|
||||
RoomNameHintText.font = RoomNameInput.textComponent.font;
|
||||
RoomNameHintText.fontSize = 18f;
|
||||
RoomNameHintText.color = Color.red;
|
||||
RoomNameHintText.alignment = TextAlignmentOptions.Center;
|
||||
RoomNameHintText.text = RoomNameInputValidator.InvalidRoomNameHint;
|
||||
RoomNameHintObject = hintObject;
|
||||
RoomNameHintObject.SetActive(false);
|
||||
}
|
||||
|
||||
public void OnPlayerOptionClicked(uint idx)
|
||||
{
|
||||
@ -1673,7 +1754,7 @@ namespace TH1_UI.View.Outside
|
||||
for (int i = 0; i < lobbyCount; i++)
|
||||
{
|
||||
_lobbyRowList[i].gameObject.SetActive(true);
|
||||
_lobbyRowList[i].SetContent(lobbyInfos[i], _lobby, OnJoinLobbyClicked);
|
||||
_lobbyRowList[i].SetContent(lobbyInfos[i], _lobby, OnJoinLobbyClicked, OnLobbyActionClicked);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1690,15 +1771,112 @@ namespace TH1_UI.View.Outside
|
||||
|
||||
if (lobbyInfo.GameState != 0)
|
||||
{
|
||||
NetworkPlayerTipManager.Instance.Request(NetworkPlayerTipType.LobbyJoinFailed);
|
||||
ShowLobbyNotify(UINotifyCommonType.OutsideMultiplayRoomGone);
|
||||
return;
|
||||
}
|
||||
|
||||
if (lobbyInfo.MaxPlayers > 0 && lobbyInfo.CurrentPlayers >= lobbyInfo.MaxPlayers)
|
||||
{
|
||||
ShowLobbyNotify(UINotifyCommonType.OutsideMultiplayRoomFull);
|
||||
return;
|
||||
}
|
||||
|
||||
if (lobbyInfo.HasPassword)
|
||||
{
|
||||
if (JoinPasswordPanelMono != null)
|
||||
{
|
||||
_pendingJoinLobbyInfo = lobbyInfo;
|
||||
JoinPasswordPanelMono.Show();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("[UIOutsideMultiplay] Join password panel is missing.");
|
||||
JoinLobbyWithPassword(lobbyInfo, string.Empty);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
//注册一次性加入结果监听
|
||||
JoinLobbyWithPassword(lobbyInfo, string.Empty);
|
||||
}
|
||||
|
||||
private void OnJoinPasswordConfirmed(string password)
|
||||
{
|
||||
if (_pendingJoinLobbyInfo == null) return;
|
||||
JoinLobbyWithPassword(_pendingJoinLobbyInfo, password);
|
||||
_pendingJoinLobbyInfo = null;
|
||||
}
|
||||
|
||||
private void JoinLobbyWithPassword(LobbyListInfo lobbyInfo, string password)
|
||||
{
|
||||
_lobby.OnLobbyEnteredEvent += OnLobbyJoinSuccess;
|
||||
_lobby.OnLobbyErrorEvent += OnLobbyJoinFailed;
|
||||
_lobby.RefreshLobbyListInfo();
|
||||
LobbyManager.Instance.Lobby.JoinLobbyById(lobbyInfo.LobbyId);
|
||||
LobbyManager.Instance.Lobby.JoinLobbyById(lobbyInfo.LobbyId, password);
|
||||
}
|
||||
|
||||
private void OnLobbyActionClicked(LobbyListInfo lobbyInfo)
|
||||
{
|
||||
RoomActionPanelMono?.Show(lobbyInfo);
|
||||
}
|
||||
|
||||
private void OnBlockLobbyClicked(LobbyListInfo lobbyInfo)
|
||||
{
|
||||
Debug.Log($"[UIOutsideMultiplay] Block lobby owner: {lobbyInfo?.OwnerId}");
|
||||
}
|
||||
|
||||
private void OnReportLobbyClicked(LobbyListInfo lobbyInfo)
|
||||
{
|
||||
Debug.Log($"[UIOutsideMultiplay] Report lobby owner: {lobbyInfo?.OwnerId}");
|
||||
EventManager.Publish(new ShowUIGlobalBugReport());
|
||||
}
|
||||
|
||||
private void ShowLobbyNotify(UINotifyCommonType type)
|
||||
{
|
||||
EventManager.Publish(new ShowUINotifyCommon { UINotifyCommonType = type });
|
||||
}
|
||||
|
||||
private void EnsureMultiplaySubPanels()
|
||||
{
|
||||
if (JoinPasswordPanelMono == null)
|
||||
{
|
||||
if (JoinPasswordPanel == null)
|
||||
{
|
||||
var existing = transform.Find("UIOutsideMultiplayJoinPasswordPanel");
|
||||
JoinPasswordPanel = existing != null ? existing.gameObject : null;
|
||||
}
|
||||
|
||||
if (JoinPasswordPanel == null)
|
||||
{
|
||||
var prefab = Resources.Load<GameObject>("Prefab/UI/Outside/UIOutsideMultiplayJoinPasswordPanel");
|
||||
if (prefab != null)
|
||||
JoinPasswordPanel = Instantiate(prefab, transform);
|
||||
}
|
||||
|
||||
JoinPasswordPanelMono = JoinPasswordPanel?.GetComponent<UIOutsideMultiplayJoinPasswordPanelMono>();
|
||||
}
|
||||
|
||||
JoinPasswordPanelMono?.Init(OnJoinPasswordConfirmed);
|
||||
|
||||
if (RoomActionPanelMono == null)
|
||||
{
|
||||
if (RoomActionPanel == null)
|
||||
{
|
||||
var existing = transform.Find("UIOutsideMultiplayRoomActionPanel");
|
||||
RoomActionPanel = existing != null ? existing.gameObject : null;
|
||||
}
|
||||
|
||||
if (RoomActionPanel == null)
|
||||
{
|
||||
var prefab = Resources.Load<GameObject>("Prefab/UI/Outside/UIOutsideMultiplayRoomActionPanel");
|
||||
if (prefab != null)
|
||||
RoomActionPanel = Instantiate(prefab, transform);
|
||||
}
|
||||
|
||||
RoomActionPanelMono = RoomActionPanel?.GetComponent<UIOutsideMultiplayRoomActionPanelMono>();
|
||||
}
|
||||
|
||||
RoomActionPanelMono?.Init(OnBlockLobbyClicked, OnReportLobbyClicked);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user