diff --git a/.gitignore b/.gitignore index 8cc580f..ca10b67 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ sdk-intergration/.vscode sdk-intergration/' sdk-intergration/Assets/.claude/settings.json sdk-intergration/.idea +.worktrees/* \ No newline at end of file diff --git a/ExtraPluginCfgs/Android/flexion/AndroidManifest.xml b/ExtraPluginCfgs/Android/flexion/AndroidManifest.xml index 7b1ce8c..6a04330 100644 --- a/ExtraPluginCfgs/Android/flexion/AndroidManifest.xml +++ b/ExtraPluginCfgs/Android/flexion/AndroidManifest.xml @@ -7,7 +7,7 @@ diff --git a/ExtraPluginCfgs/Android/flexion/ChannelHelpers.java b/ExtraPluginCfgs/Android/flexion/ChannelHelpers.java index ca159cc..000d512 100644 --- a/ExtraPluginCfgs/Android/flexion/ChannelHelpers.java +++ b/ExtraPluginCfgs/Android/flexion/ChannelHelpers.java @@ -1,9 +1,17 @@ package com.unity3d.player; public class ChannelHelpers { + public static final String CHANNEL = "Flexion"; static void register() { SDKManager.registerHelper(CHANNEL, new FlexionSDKHelper()); } + + + // Flexion provides price in micros and currency code, so no normalization needed + // 支付的变化,可能会修改这里 + public static String normalizeSkuList(String msg) { + return msg; + } } diff --git a/ExtraPluginCfgs/Android/googleplay/ChannelHelpers.java b/ExtraPluginCfgs/Android/googleplay/ChannelHelpers.java index c9cac26..b62fba6 100644 --- a/ExtraPluginCfgs/Android/googleplay/ChannelHelpers.java +++ b/ExtraPluginCfgs/Android/googleplay/ChannelHelpers.java @@ -6,4 +6,8 @@ public class ChannelHelpers { static void register() { // GooglePlay uses default behavior, no additional SDKHelper } + + public static String normalizeSkuList(String msg) { + return msg; + } } diff --git a/ExtraPluginCfgs/Android/rustore/AndroidManifest.xml b/ExtraPluginCfgs/Android/rustore/AndroidManifest.xml index 2fcbc26..ad0b932 100644 --- a/ExtraPluginCfgs/Android/rustore/AndroidManifest.xml +++ b/ExtraPluginCfgs/Android/rustore/AndroidManifest.xml @@ -6,8 +6,9 @@ - diff --git a/ExtraPluginCfgs/Android/rustore/ChannelHelpers.java b/ExtraPluginCfgs/Android/rustore/ChannelHelpers.java index 68706a9..231322c 100644 --- a/ExtraPluginCfgs/Android/rustore/ChannelHelpers.java +++ b/ExtraPluginCfgs/Android/rustore/ChannelHelpers.java @@ -1,9 +1,44 @@ package com.unity3d.player; +import android.util.Log; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + public class ChannelHelpers { public static final String CHANNEL = "Rustore"; static void register() { - // Rustore uses default behavior, no additional SDKHelper yet + // Rustore uses default behavior, no additional SDKHelper + } + + public static String normalizeSkuList(String msg) { + if (msg == null || msg.isEmpty()) return msg; + try { + JSONArray products = new JSONArray(msg); + for (int i = 0; i < products.length(); i++) { + JSONObject p = products.getJSONObject(i); + + // price is in kopecks, convert to micros: kopecks * 10000 + String price = p.optString("price", "0"); + long micros = Long.parseLong(price) * 10000; + p.put("price_amount_micros", String.valueOf(micros)); + + // Map currency → price_currency_code + String currency = p.optString("currency", ""); + if (!currency.isEmpty()) { + p.put("price_currency_code", currency); + } + + // Convert display price: "199" → "₽1.99" + float rubles = Float.parseFloat(price) / 100; + p.put("price", String.format("₽%s", rubles)); + } + return products.toString(); + } catch (JSONException e) { + Log.e("ChannelHelpers", "normalizeSkuList error: " + e.getMessage()); + return msg; + } } } diff --git a/docs/merge-rustore-test-to-flexion.md b/docs/merge-rustore-test-to-flexion.md new file mode 100644 index 0000000..701a3a3 --- /dev/null +++ b/docs/merge-rustore-test-to-flexion.md @@ -0,0 +1,154 @@ +# 合并记录: dev_rustore 测试内容 → dev_flexion + +**日期:** 2026-04-30 +**源分支:** dev_rustore (c105818) +**目标分支:** dev_flexion (66aa7a9) + +--- + +## 已合并的文件 + +### 1. sdk-intergration/Assets/Scripts/SDKTest.cs + +新增 VK 登录/绑定/检查 和 Review 测试按钮及事件处理: + +**新增字段:** +- `_loginVkBtn` — VK 登录按钮 +- `_linkVkBtn` — VK 绑定按钮 +- `_checkVkBtn` — VK 检查绑定按钮 +- `_reviewBtn` — 应用评价按钮 + +**新增监听 (Start):** +```csharp +_loginVkBtn.onClick.AddListener(() => OnLogin(EAccoutType.hwVkid)); +_linkVkBtn.onClick.AddListener(OnLinkVkId); +_checkVkBtn.onClick.AddListener(OnCheckVKId); +_reviewBtn.onClick.AddListener(OnReview); +``` + +**新增方法:** +```csharp +private async void OnLinkVkId() // VK 绑定 → TYSdkFacade.Instance.LinkAccount(EAccoutType.hwVkid) +private async void OnCheckVKId() // VK 检查 → TYSdkFacade.Instance.LinkCheck(EAccoutType.hwVkid) +private void OnReview() // 评价 → UnityBridgeFunc.Review() +``` + +### 2. sdk-intergration/Assets/Scenes/SampleScene.unity + +直接从 dev_rustore 检出完整文件,包含新增 UI 按钮 GameObject: +- VK Login 按钮 +- VK Link 按钮 +- VK Check 按钮 +- Review 按钮 + +### 3. sdk-intergration/ProjectSettings/ProjectSettings.asset + +修复构建错误,将 `AndroidMinSdkVersion` 从 25 提升到 26: +- **原因:** `tuyoosdk_1.0.0.aar` 声明 minSdkVersion 26,低于此版本会 manifest 合并失败 +- **影响:** 全局生效,所有渠道统一 minSdk 26 + +--- + +## 跳过的文件 (dev_flexion 已有更完善的实现) + +### TYSdkModel.cs — 跳过 +- dev_rustore: 硬编码 `AccountInfo.hwPayType = "rustore.global.app"`, SKUDetail 写死 Rustore 格式 +- dev_flexion: 使用 `ChannelConfig.Channel` 动态区分渠道,同时兼容 Google/Rustore/Flexion +- **理由:** dev_flexion 的 `ChannelConfig` 抽象更成熟,无需降级 + +### TYSdkFacade.cs — 跳过 +- dev_rustore: 硬编码 `Channel = "hwVkid"`, 超时 120s +- dev_flexion: 已有 `Channel => ChannelConfig.Channel`, 动态 `LoginTimeoutSeconds` +- **理由:** dev_flexion 已包含 VK 映射 `{"vk.global.app", EAccoutType.hwVkid}`, 且抽象更优 + +### TYSdkFacade_Pay.cs — 跳过 +- dev_rustore: `var pType = tysdk.AccountInfo.hwPayType` (硬编码 rustore) +- dev_flexion: `var pType = ChannelConfig.PayType` (动态配置) +- **理由:** dev_flexion 的方案已覆盖 rustore 支付类型 + +### UnityBridgeFunc.cs — 跳过 +- dev_rustore: 仅代码格式重排,无功能变更 +- dev_flexion: 已包含 `Review()` 等方法声明 + +--- + +## 构建错误修复 + +``` +Error: uses-sdk:minSdkVersion 25 cannot be smaller than version 26 + declared in library [:tuyoosdk_1.0.0:] +``` + +**修复:** `ProjectSettings.asset` → `AndroidMinSdkVersion: 25` → `26` + +**替代方案分析:** +- `tools:overrideLibrary="com.tuyoo.gamesdk"` (rustore AndroidManifest 已有) 只能绕过 manifest 合并冲突 +- 无法绕过 gradle 层 `processReleaseMainManifest` task 的 minSdkVersion 检查 +- 改 ProjectSettings 是唯一可行方案 + +--- + +## SKU 列表格式统一 + +**问题:** Rustore 和 GooglePlay 返回的商品列表 JSON 字段不同,C# 端用同一个 `SKUDetail` 类反序列化。 + +**方案:** 在 Java 端 `ChannelHelpers.normalizeSkuList()` 中统一格式,C# 端不做渠道判断。 + +### 数据流 + +``` +SDK API → defaultThirdExtend() → ChannelHelpers.normalizeSkuList(msg) → Unity SKUListResult → DeserializeObject> +``` + +### 变更文件 + +#### 1. ExtraPluginCfgs/Android/rustore/ChannelHelpers.java — 新增 normalizeSkuList + +```java +// 将 Rustore 原始格式转为统一格式: +// price: "199" (戈比) → "₽1.99" +// 新增 price_amount_micros: "199" * 10000 = "1990000" +// 新增 price_currency_code: ← currency 字段 +``` + +#### 2. ExtraPluginCfgs/Android/googleplay/ChannelHelpers.java — 新增 normalizeSkuList + +```java +// GooglePlay 格式已是标准,直接原样返回 +public static String normalizeSkuList(String msg) { return msg; } +``` + +#### 3. ExtraPluginCfgs/Android/flexion/ChannelHelpers.java — 新增 normalizeSkuList + +```java +// Flexion 有自己的 SDKHelper.queryProducts(),不走 defaultThirdExtend,编译需要方法存在 +public static String normalizeSkuList(String msg) { return msg; } +``` + +#### 4. SDKManager.java — defaultThirdExtend 调用 normalizeSkuList + +```java +// 回调成功时: result.put("respObj", ChannelHelpers.normalizeSkuList(msg)); +``` + +#### 5. TYSdkModel.cs — SKUDetail 简化 + +```csharp +// 去掉 Normalize() 方法和 normalized 字段 +// 属性直接用统一字段: +// ProdPrice => float.Parse(price_amount_micros) / 1000000 +// ProdPriceStr => price +``` + +#### 6. TYSdkFacade_Pay.cs — SKUListResult 去掉 Normalize 调用 + +```csharp +// 反序列化后直接赋值,不再调 sku.Normalize() +``` + +### 扩展新渠道 + +添加新渠道时只需: +1. 创建 `ExtraPluginCfgs/Android/{channel}/ChannelHelpers.java` +2. 实现 `normalizeSkuList()` 将该渠道 SKU JSON 转为统一格式 +3. C# 端无需改动 diff --git a/sdk-intergration/Assets/Editor/ChannelBuildTool.cs b/sdk-intergration/Assets/Editor/ChannelBuildTool.cs index 02b8d86..9511e67 100644 --- a/sdk-intergration/Assets/Editor/ChannelBuildTool.cs +++ b/sdk-intergration/Assets/Editor/ChannelBuildTool.cs @@ -33,6 +33,7 @@ public class ChannelBuildTool } Debug.Log($"[ChannelSwitch] Switching to {channel}..."); + currentChannel = channel; // 1. Sync AAR var srcAarDir = Path.Combine(cfgDir, "Plugins/Android"); @@ -118,6 +119,8 @@ public class ChannelBuildTool } } + private static string currentChannel = ""; + // ==================== Menu: Switch Channel ==================== [MenuItem("Tools/Switch Channel/GooglePlay")] @@ -131,6 +134,28 @@ public class ChannelBuildTool // ==================== Menu: Build ==================== + [MenuItem("Tools/Build Android (Current Channel)")] + public static void Build_CurrentChannel() + { + if (string.IsNullOrEmpty(currentChannel)) + { + Debug.LogError("[ChannelBuild] No channel selected. Use Tools/Switch Channel first."); + return; + } + BuildAndroidForChannel(currentChannel, false); + } + + [MenuItem("Tools/Build Android (Current Channel) Debug")] + public static void Build_CurrentChannel_Debug() + { + if (string.IsNullOrEmpty(currentChannel)) + { + Debug.LogError("[ChannelBuild] No channel selected. Use Tools/Switch Channel first."); + return; + } + BuildAndroidForChannel(currentChannel, true); + } + [MenuItem("Tools/Build Android (Channel)/GooglePlay")] public static void Build_GooglePlay() => BuildAndroidForChannel("GooglePlay", false); diff --git a/sdk-intergration/Assets/Plugins/Android/AndroidManifest.xml b/sdk-intergration/Assets/Plugins/Android/AndroidManifest.xml index 0c8cbb2..ebd9b2e 100644 --- a/sdk-intergration/Assets/Plugins/Android/AndroidManifest.xml +++ b/sdk-intergration/Assets/Plugins/Android/AndroidManifest.xml @@ -29,10 +29,20 @@ + + + + + + + - + + + + diff --git a/sdk-intergration/Assets/Plugins/Android/gradleTemplate.properties b/sdk-intergration/Assets/Plugins/Android/gradleTemplate.properties index a016918..cc49b2a 100644 --- a/sdk-intergration/Assets/Plugins/Android/gradleTemplate.properties +++ b/sdk-intergration/Assets/Plugins/Android/gradleTemplate.properties @@ -1,10 +1,11 @@ org.gradle.jvmargs=-Xmx**JVM_HEAP_SIZE**M org.gradle.parallel=true unityStreamingAssets=**STREAMING_ASSETS** -android.useAndroidX=true -android.enableJetifier=true # Android Resolver Properties Start android.useAndroidX=true android.enableJetifier=true # Android Resolver Properties End + +android.suppressUnsupportedCompileSdk=35 + **ADDITIONAL_PROPERTIES** diff --git a/sdk-intergration/Assets/Plugins/Android/launcherTemplate.gradle b/sdk-intergration/Assets/Plugins/Android/launcherTemplate.gradle index b2904c4..31efa26 100644 --- a/sdk-intergration/Assets/Plugins/Android/launcherTemplate.gradle +++ b/sdk-intergration/Assets/Plugins/Android/launcherTemplate.gradle @@ -17,6 +17,7 @@ android { compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 + } defaultConfig { diff --git a/sdk-intergration/Assets/Plugins/Android/mainTemplate.gradle b/sdk-intergration/Assets/Plugins/Android/mainTemplate.gradle index ff45e4d..fa895c0 100644 --- a/sdk-intergration/Assets/Plugins/Android/mainTemplate.gradle +++ b/sdk-intergration/Assets/Plugins/Android/mainTemplate.gradle @@ -13,7 +13,7 @@ android { } // Android Resolver Exclusions End android { - namespace "com.unity3d.player" + namespace "com.unity3d.player" } dependencies { @@ -36,7 +36,7 @@ dependencies { implementation 'net.aihelp:android-aihelp-aar:5.3.+' implementation 'com.google.android.gms:play-services-auth:20.2.0' - implementation('com.android.billingclient:billing:6.0.1') + implementation('com.android.billingclient:billing:7.0.0') implementation 'com.google.android.gms:play-services-basement:18.2.0' implementation 'androidx.fragment:fragment:1.3.6' @@ -48,7 +48,7 @@ dependencies { implementation 'com.miui.referrer:homereferrer:1.0.0.6' - implementation platform('com.google.firebase:firebase-bom:32.7.4') + implementation platform('com.google.firebase:firebase-bom:34.6.0') implementation 'com.google.firebase:firebase-analytics' implementation('com.facebook.android:facebook-android-sdk:16.2.0') @@ -72,26 +72,15 @@ dependencies { implementation 'com.appsflyer:purchase-connector:2.2.0' // Assets/AppsFlyer/Editor/AppsFlyerDependencies.xml:8 implementation 'com.appsflyer:unity-wrapper:6.17.7' // Assets/AppsFlyer/Editor/AppsFlyerDependencies.xml:6 implementation 'com.google.android.ump:user-messaging-platform:2.1.0' // Assets/MaxSdk/AppLovin/Editor/Dependencies.xml:5 + implementation 'com.tapjoy:tapjoy-android-unitybridge:14.5.0' // Packages/com.unity.package-offerwall/Editor/TJPluginDependencies.xml:10 // Android Resolver Dependencies End **DEPS**} -// Android Resolver Exclusions Start -android { - packagingOptions { - exclude ('/lib/armeabi/*' + '*') - exclude ('/lib/mips/*' + '*') - exclude ('/lib/mips64/*' + '*') - exclude ('/lib/x86/*' + '*') - exclude ('/lib/x86_64/*' + '*') - } -} -// Android Resolver Exclusions End android { ndkPath "**NDKPATH**" compileSdkVersion **APIVERSION** buildToolsVersion '**BUILDTOOLS**' - compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 diff --git a/sdk-intergration/Assets/Plugins/Android/settingsTemplate.gradle b/sdk-intergration/Assets/Plugins/Android/settingsTemplate.gradle index 73133c1..d25174e 100644 --- a/sdk-intergration/Assets/Plugins/Android/settingsTemplate.gradle +++ b/sdk-intergration/Assets/Plugins/Android/settingsTemplate.gradle @@ -18,6 +18,9 @@ dependencyResolutionManagement { mavenCentral() // Android Resolver Repos Start def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/") + maven { + url "https://sdk.tapjoy.com/" // Packages/com.unity.package-offerwall/Editor/TJPluginDependencies.xml:9 + } maven { url "https://android-sdk.is.com/" // Assets/MaxSdk/Mediation/IronSource/Editor/Dependencies.xml:8 } diff --git a/sdk-intergration/Assets/Scenes/SampleScene.unity b/sdk-intergration/Assets/Scenes/SampleScene.unity index 85b6a2a..50dc601 100644 --- a/sdk-intergration/Assets/Scenes/SampleScene.unity +++ b/sdk-intergration/Assets/Scenes/SampleScene.unity @@ -38,7 +38,6 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.12733836, g: 0.13418846, b: 0.12118524, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -123,6 +122,85 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &9113281 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9113282} + - component: {fileID: 9113284} + - component: {fileID: 9113283} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &9113282 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9113281} + 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: 678940590} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &9113283 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9113281} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 33 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Review +--- !u!222 &9113284 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9113281} + m_CullTransparentMesh: 1 --- !u!1 &29523098 GameObject: m_ObjectHideFlags: 0 @@ -365,6 +443,85 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 120435829} m_CullTransparentMesh: 1 +--- !u!1 &159485066 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 159485067} + - component: {fileID: 159485069} + - component: {fileID: 159485068} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &159485067 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 159485066} + 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: 1113066541} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &159485068 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 159485066} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 33 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: L_VK +--- !u!222 &159485069 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 159485066} + m_CullTransparentMesh: 1 --- !u!1 &174456813 GameObject: m_ObjectHideFlags: 0 @@ -591,6 +748,127 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 231808344} m_CullTransparentMesh: 1 +--- !u!1 &263924338 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 263924339} + - component: {fileID: 263924341} + - component: {fileID: 263924340} + - component: {fileID: 263924342} + m_Layer: 5 + m_Name: VkLogin + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &263924339 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 263924338} + 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: 959891290} + m_Father: {fileID: 1044920373} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &263924340 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 263924338} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + 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!222 &263924341 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 263924338} + m_CullTransparentMesh: 1 +--- !u!114 &263924342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 263924338} + 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: 263924340} + m_OnClick: + m_PersistentCalls: + m_Calls: [] --- !u!1 &276006784 GameObject: m_ObjectHideFlags: 0 @@ -801,12 +1079,12 @@ MonoBehaviour: m_RequiresColorTexture: 0 m_Version: 2 m_TaaSettings: - quality: 3 - frameInfluence: 0.1 - jitterScale: 1 - mipBias: 0 - varianceClampScale: 0.9 - contrastAdaptiveSharpening: 0 + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 --- !u!1 &340278280 GameObject: m_ObjectHideFlags: 0 @@ -965,6 +1243,127 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 354913240} m_CullTransparentMesh: 1 +--- !u!1 &365226264 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 365226265} + - component: {fileID: 365226268} + - component: {fileID: 365226267} + - component: {fileID: 365226266} + m_Layer: 5 + m_Name: CVk + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &365226265 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 365226264} + 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: 425077563} + m_Father: {fileID: 1044920373} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &365226266 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 365226264} + 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: 365226267} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &365226267 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 365226264} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + 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!222 &365226268 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 365226264} + m_CullTransparentMesh: 1 --- !u!1 &407966797 GameObject: m_ObjectHideFlags: 0 @@ -1044,6 +1443,85 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 407966797} m_CullTransparentMesh: 1 +--- !u!1 &425077562 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 425077563} + - component: {fileID: 425077565} + - component: {fileID: 425077564} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &425077563 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 425077562} + 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: 365226265} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &425077564 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 425077562} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 33 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: C_VK +--- !u!222 &425077565 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 425077562} + m_CullTransparentMesh: 1 --- !u!1 &571824850 GameObject: m_ObjectHideFlags: 0 @@ -1165,6 +1643,127 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 571824850} m_CullTransparentMesh: 1 +--- !u!1 &678940589 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 678940590} + - component: {fileID: 678940593} + - component: {fileID: 678940592} + - component: {fileID: 678940591} + m_Layer: 5 + m_Name: Review + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &678940590 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678940589} + 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: 9113282} + m_Father: {fileID: 1044920373} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &678940591 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678940589} + 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: 678940592} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &678940592 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678940589} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + 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!222 &678940593 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 678940589} + m_CullTransparentMesh: 1 --- !u!1 &686445508 GameObject: m_ObjectHideFlags: 0 @@ -2044,6 +2643,85 @@ MonoBehaviour: m_OnClick: m_PersistentCalls: m_Calls: [] +--- !u!1 &959891289 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 959891290} + - component: {fileID: 959891292} + - component: {fileID: 959891291} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &959891290 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959891289} + 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: 263924339} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &959891291 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959891289} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 33 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: VK +--- !u!222 &959891292 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 959891289} + m_CullTransparentMesh: 1 --- !u!1 &1033367769 GameObject: m_ObjectHideFlags: 0 @@ -2276,11 +2954,14 @@ RectTransform: - {fileID: 1956900235} - {fileID: 1910171036} - {fileID: 1188788676} + - {fileID: 263924339} - {fileID: 1627053315} - {fileID: 1668967320} - {fileID: 834002869} - {fileID: 1094138236} - {fileID: 698899140} + - {fileID: 1113066541} + - {fileID: 365226265} - {fileID: 948068709} - {fileID: 1033467961} - {fileID: 571824851} @@ -2293,6 +2974,7 @@ RectTransform: - {fileID: 1686948820} - {fileID: 827533342} - {fileID: 1240291498} + - {fileID: 678940590} m_Father: {fileID: 1451597222} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -2766,6 +3448,127 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1110300852} m_CullTransparentMesh: 1 +--- !u!1 &1113066540 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1113066541} + - component: {fileID: 1113066544} + - component: {fileID: 1113066543} + - component: {fileID: 1113066542} + m_Layer: 5 + m_Name: LVK + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1113066541 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1113066540} + 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: 159485067} + m_Father: {fileID: 1044920373} + 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: 0, y: 0} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1113066542 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1113066540} + 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: 1113066543} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1113066543 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1113066540} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + 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!222 &1113066544 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1113066540} + m_CullTransparentMesh: 1 --- !u!1 &1156426215 GameObject: m_ObjectHideFlags: 0 @@ -4143,9 +4946,12 @@ MonoBehaviour: _InitBtn: {fileID: 1956900236} _loginGuestBtn: {fileID: 1910171037} _loginGoogleBtn: {fileID: 1188788679} + _loginVkBtn: {fileID: 263924342} _loginFbBtn: {fileID: 1627053318} _loginAppleBtn: {fileID: 1668967321} _loginTokenBtn: {fileID: 834002870} + _linkVkBtn: {fileID: 1113066542} + _checkVkBtn: {fileID: 365226266} _linkGoogleBtn: {fileID: 1094138239} _checkGoogleBtn: {fileID: 698899143} _linkFacbookBtn: {fileID: 948068712} @@ -4160,6 +4966,7 @@ MonoBehaviour: _signoutBtn: {fileID: 1686948823} _fbShareLinkBtn: {fileID: 827533345} _mfbShareLinkBtn: {fileID: 1240291501} + _reviewBtn: {fileID: 678940591} _messageTxt: {fileID: 2070325010} --- !u!4 &1788702880 Transform: diff --git a/sdk-intergration/Assets/Scripts/SDKTest.cs b/sdk-intergration/Assets/Scripts/SDKTest.cs index 12a2d37..2eb32ce 100644 --- a/sdk-intergration/Assets/Scripts/SDKTest.cs +++ b/sdk-intergration/Assets/Scripts/SDKTest.cs @@ -16,6 +16,8 @@ public class SDKTest : MonoBehaviour private Button _loginGuestBtn; [SerializeField] private Button _loginGoogleBtn; + [SerializeField] // VK登录 + private Button _loginVkBtn; [SerializeField] private Button _loginFbBtn; [SerializeField] @@ -23,6 +25,10 @@ public class SDKTest : MonoBehaviour [SerializeField] private Button _loginTokenBtn; [SerializeField] + private Button _linkVkBtn; + [SerializeField] + private Button _checkVkBtn; + [SerializeField] private Button _linkGoogleBtn; [SerializeField] private Button _checkGoogleBtn; @@ -50,6 +56,10 @@ public class SDKTest : MonoBehaviour private Button _fbShareLinkBtn; [SerializeField] private Button _mfbShareLinkBtn; + + [SerializeField] + private Button _reviewBtn; + [SerializeField] private Text _messageTxt; @@ -72,6 +82,7 @@ public class SDKTest : MonoBehaviour _loginGuestBtn.onClick.AddListener(() => OnLogin(EAccoutType.hwGuest)); _loginGoogleBtn.onClick.AddListener(() => OnLogin(EAccoutType.hwGoogle)); _loginFbBtn.onClick.AddListener(() => OnLogin(EAccoutType.hwFacebook)); + _loginVkBtn.onClick.AddListener(() => OnLogin(EAccoutType.hwVkid)); #if UNITY_IOS _loginAppleBtn.onClick.AddListener(() => OnLogin(EAccoutType.Apple)); #endif @@ -79,6 +90,8 @@ public class SDKTest : MonoBehaviour _logOutBtn.onClick.AddListener(OnLogout); _linkGoogleBtn.onClick.AddListener(OnLinkGoogle); _checkGoogleBtn.onClick.AddListener(OncheckGoogle); + _linkVkBtn.onClick.AddListener(OnLinkVkId); + _checkVkBtn.onClick.AddListener(OnCheckVKId); _linkFacbookBtn.onClick.AddListener(OnLinkFacebook); _linkAppleBtn.onClick.AddListener(OnLinkApple); _checkFacbookBtn.onClick.AddListener(OncheckFacebook); @@ -90,6 +103,7 @@ public class SDKTest : MonoBehaviour _signoutBtn.onClick.AddListener(OnSignoutBtn); _fbShareLinkBtn.onClick.AddListener(OnFBShareLinkBtn); _mfbShareLinkBtn.onClick.AddListener(OnMessengerShareLinkBtn); + _reviewBtn.onClick.AddListener(OnReview); Debug.Log("SDKTest Started"); } @@ -336,6 +350,13 @@ eb68f93a08156e04 _messageTxt.text = $"\n link google account : {isSuccess}"; } + private async void OnLinkVkId() + { + _messageTxt.text = string.Empty; + var isSuccess = await TYSdkFacade.Instance.LinkAccount(EAccoutType.hwVkid); + _messageTxt.text = $"\n link VkId account : {isSuccess} {isSuccess.code}"; + } + private async void OnLinkFacebook() { _messageTxt.text = string.Empty; @@ -357,6 +378,13 @@ eb68f93a08156e04 _messageTxt.text = $"\n google account linked : {isSuccess}"; } + private async void OnCheckVKId() + { + _messageTxt.text = string.Empty; + var isSuccess = await TYSdkFacade.Instance.LinkCheck(EAccoutType.hwVkid); + _messageTxt.text = $"\n vk account linked : {isSuccess}"; + } + private async void OncheckFacebook() { _messageTxt.text = string.Empty; @@ -379,6 +407,11 @@ eb68f93a08156e04 UnityBridgeFunc.MessengerShareLink("title", "content", "https://www.baidu.com"); } + private void OnReview() + { + UnityBridgeFunc.Review(); + } + /* public void OnTaBtn() { diff --git a/sdk-intergration/Packages/tysdk/Plugins/Android/ChannelHelpers.java b/sdk-intergration/Packages/tysdk/Plugins/Android/ChannelHelpers.java index c9cac26..b62fba6 100644 --- a/sdk-intergration/Packages/tysdk/Plugins/Android/ChannelHelpers.java +++ b/sdk-intergration/Packages/tysdk/Plugins/Android/ChannelHelpers.java @@ -6,4 +6,8 @@ public class ChannelHelpers { static void register() { // GooglePlay uses default behavior, no additional SDKHelper } + + public static String normalizeSkuList(String msg) { + return msg; + } } diff --git a/sdk-intergration/Packages/tysdk/Plugins/Android/SDKManager.java b/sdk-intergration/Packages/tysdk/Plugins/Android/SDKManager.java index 35adbd7..c6065f6 100644 --- a/sdk-intergration/Packages/tysdk/Plugins/Android/SDKManager.java +++ b/sdk-intergration/Packages/tysdk/Plugins/Android/SDKManager.java @@ -77,13 +77,16 @@ public class SDKManager { // ------------------------------------------------------------------------- public static void InitSDK(Activity activity, String ch) { - channel = ch != null ? ch : "GooglePlay"; + channel = ChannelHelpers.CHANNEL; ChannelHelpers.register(); - if (!channel.equals(ChannelHelpers.CHANNEL)) { - Log.e(TAG, "Channel mismatch! Helpers=" + ChannelHelpers.CHANNEL + " expected=" + channel); - } sdkHelper = helperMap.get(channel); - Log.i(TAG, "InitSDK channel=" + channel + " helper=" + (sdkHelper != null ? sdkHelper.getClass().getSimpleName() : "none")); + Log.i(TAG, "[CHANNEL-VERIFY] Java InitSDK channel=" + channel + + " fromCSharp=" + ch + + " helper=" + (sdkHelper != null ? sdkHelper.getClass().getSimpleName() : "default")); + + // Sync channel to C# ChannelConfig + UnityPlayer.UnitySendMessage(ConfigManager.UNITY_FACADE_NAME, + "SetChannelFromNative", channel); if (sdkHelper != null) { sdkHelper.init(activity); @@ -422,7 +425,7 @@ public class SDKManager { JSONObject result = new JSONObject(); result.put("code", code); if (code == SDKCallBack.Extend.EXTEND_CODE_SUCCESS) { - result.put("respObj", msg); + result.put("respObj", ChannelHelpers.normalizeSkuList(msg)); } else { Log.e(TAG, "thirdExtend failed: " + msg); result.put("thirdExtend_errStr", msg); diff --git a/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade.cs b/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade.cs index 4915b97..3ce0e53 100644 --- a/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade.cs +++ b/sdk-intergration/Packages/tysdk/Runtime/TYSdkFacade.cs @@ -138,6 +138,13 @@ namespace tysdk #endif } + // Called from Java SDKManager.InitSDK to sync channel + public void SetChannelFromNative(string ch) + { + ChannelConfig.SetChannel(ch); + UnityEngine.Debug.Log($"[CHANNEL-VERIFY] C# SetChannelFromNative → channel={ch}, payType={ChannelConfig.PayType}, loginTimeout={ChannelConfig.LoginTimeoutSeconds}"); + } + /*================================================ _ _ / \ ___ ___ ___ _ _ _ __ | |_ diff --git a/sdk-intergration/Packages/tysdk/Runtime/TYSdkModel.cs b/sdk-intergration/Packages/tysdk/Runtime/TYSdkModel.cs index 9022bec..1954082 100644 --- a/sdk-intergration/Packages/tysdk/Runtime/TYSdkModel.cs +++ b/sdk-intergration/Packages/tysdk/Runtime/TYSdkModel.cs @@ -94,17 +94,11 @@ namespace tysdk public string price_currency_code; public string title; public string type; - - // RuStore specific public string currency; public string price_amount; - public string ProdPriceStr => ChannelConfig.Channel == "Rustore" - ? $"₽{ProdPrice}" - : price; - public float ProdPrice => ChannelConfig.Channel == "Rustore" - ? float.Parse(price) / 100 - : float.Parse(price_amount_micros) / 1000000; + public string ProdPriceStr => price; + public float ProdPrice => float.Parse(price_amount_micros) / 1000000; public string ProdID => ourProductId; public string ProdKey => productId; diff --git a/sdk-intergration/Packages/tysdk/Runtime/UnityBridgeFunc.cs b/sdk-intergration/Packages/tysdk/Runtime/UnityBridgeFunc.cs index 864bd67..e665a43 100644 --- a/sdk-intergration/Packages/tysdk/Runtime/UnityBridgeFunc.cs +++ b/sdk-intergration/Packages/tysdk/Runtime/UnityBridgeFunc.cs @@ -66,6 +66,7 @@ namespace tysdk using (var activityCls = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) { var activity = activityCls.GetStatic("currentActivity"); + UnityEngine.Debug.Log("[CHANNEL-VERIFY] C# InitSDK → ChannelConfig.Channel=" + ChannelConfig.Channel); sdkManager.CallStatic("InitSDK", activity, ChannelConfig.Channel); } } diff --git a/sdk-intergration/ProjectSettings/ProjectSettings.asset b/sdk-intergration/ProjectSettings/ProjectSettings.asset index 6699313..6bde347 100644 --- a/sdk-intergration/ProjectSettings/ProjectSettings.asset +++ b/sdk-intergration/ProjectSettings/ProjectSettings.asset @@ -173,7 +173,7 @@ PlayerSettings: tvOS: 0 overrideDefaultApplicationIdentifier: 1 AndroidBundleVersionCode: 1 - AndroidMinSdkVersion: 25 + AndroidMinSdkVersion: 26 AndroidTargetSdkVersion: 35 AndroidPreferredInstallLocation: 1 aotOptions: