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: