diff --git a/ProjectNLD/Assets/Code/Scripts/FlipbookAnimationStarter.cs b/ProjectNLD/Assets/Code/Scripts/FlipbookAnimationStarter.cs
new file mode 100644
index 00000000000..774b9e5260e
--- /dev/null
+++ b/ProjectNLD/Assets/Code/Scripts/FlipbookAnimationStarter.cs
@@ -0,0 +1,127 @@
+using UnityEngine;
+
+///
+/// Flipbook动画启动器
+/// 用于非循环的Flipbook动画,在对象激活时自动设置_StartTime,使动画从当前时间开始播放
+///
+public class FlipbookAnimationStarter : MonoBehaviour
+{
+ [Header("设置")]
+ [Tooltip("是否在OnEnable时自动设置StartTime")]
+ public bool autoSetOnEnable = true;
+
+ [Tooltip("使用Material实例还是共享Material(建议使用实例)")]
+ public bool useMaterialInstance = true;
+
+ [Tooltip("是否也处理子对象的Renderer")]
+ public bool includeChildren = false;
+
+ private static readonly int StartTimePropertyID = Shader.PropertyToID("_StartTime");
+ private MaterialPropertyBlock _propertyBlock;
+ private Renderer[] _renderers;
+
+ private void Awake()
+ {
+ // 初始化MaterialPropertyBlock(性能更好的方式)
+ _propertyBlock = new MaterialPropertyBlock();
+
+ // 获取所有Renderer
+ if (includeChildren)
+ {
+ _renderers = GetComponentsInChildren(true);
+ }
+ else
+ {
+ var renderer = GetComponent();
+ _renderers = renderer != null ? new[] { renderer } : new Renderer[0];
+ }
+ }
+
+ private void OnEnable()
+ {
+ if (autoSetOnEnable)
+ {
+ SetStartTime();
+ }
+ }
+
+ ///
+ /// 手动设置动画开始时间
+ ///
+ public void SetStartTime()
+ {
+ SetStartTime(Time.time);
+ }
+
+ ///
+ /// 设置指定的开始时间
+ ///
+ public void SetStartTime(float startTime)
+ {
+ foreach (var renderer in _renderers)
+ {
+ if (renderer == null) continue;
+
+ if (useMaterialInstance)
+ {
+ // 方式1: 使用MaterialPropertyBlock(推荐,不会创建材质实例,性能更好)
+ renderer.GetPropertyBlock(_propertyBlock);
+ _propertyBlock.SetFloat(StartTimePropertyID, startTime);
+ renderer.SetPropertyBlock(_propertyBlock);
+ }
+ else
+ {
+ // 方式2: 使用Material实例(会创建材质副本)
+ // 注意:renderer.material会自动创建材质实例
+ renderer.material.SetFloat(StartTimePropertyID, startTime);
+ }
+ }
+ }
+
+ ///
+ /// 重置动画到第一帧
+ ///
+ public void ResetAnimation()
+ {
+ SetStartTime(0f);
+ }
+
+ ///
+ /// 从当前时间重新播放动画
+ ///
+ public void RestartAnimation()
+ {
+ SetStartTime(Time.time);
+ }
+
+#if UNITY_EDITOR
+ [ContextMenu("设置StartTime为当前时间")]
+ private void EditorSetStartTime()
+ {
+ if (Application.isPlaying)
+ {
+ SetStartTime();
+ Debug.Log($"已设置 {gameObject.name} 的StartTime为 {Time.time}");
+ }
+ else
+ {
+ Debug.LogWarning("请在运行时执行此操作");
+ }
+ }
+
+ [ContextMenu("重置StartTime为0")]
+ private void EditorResetStartTime()
+ {
+ if (Application.isPlaying)
+ {
+ ResetAnimation();
+ Debug.Log($"已重置 {gameObject.name} 的StartTime为0");
+ }
+ else
+ {
+ Debug.LogWarning("请在运行时执行此操作");
+ }
+ }
+#endif
+}
+
diff --git a/ProjectNLD/Assets/Code/Scripts/FlipbookAnimationStarter.cs.meta b/ProjectNLD/Assets/Code/Scripts/FlipbookAnimationStarter.cs.meta
new file mode 100644
index 00000000000..cf7d82e57a1
--- /dev/null
+++ b/ProjectNLD/Assets/Code/Scripts/FlipbookAnimationStarter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d9aca55876490b6449de8f38a029b7b1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/AndroidManifest.xml b/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/AndroidManifest.xml
new file mode 100644
index 00000000000..b0861159862
--- /dev/null
+++ b/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/AndroidManifest.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/AndroidManifest.xml.meta b/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/AndroidManifest.xml.meta
new file mode 100644
index 00000000000..e85884bc4c7
--- /dev/null
+++ b/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/AndroidManifest.xml.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: e67627dae8fb6664abc0325a1e989564
+TextScriptImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/DevNLD-release.aar b/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/DevNLD-release.aar
new file mode 100644
index 00000000000..32ba390204e
Binary files /dev/null and b/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/DevNLD-release.aar differ
diff --git a/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/DevNLD-release.aar.meta b/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/DevNLD-release.aar.meta
new file mode 100644
index 00000000000..2d186dfb60e
--- /dev/null
+++ b/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/DevNLD-release.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 42887166198c26f4a88574c85ebbf377
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/alipaysdk-android-15.8.17.aar b/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/alipaysdk-android-15.8.17.aar
new file mode 100644
index 00000000000..a34f8139b13
Binary files /dev/null and b/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/alipaysdk-android-15.8.17.aar differ
diff --git a/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/alipaysdk-android-15.8.17.aar.meta b/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/alipaysdk-android-15.8.17.aar.meta
new file mode 100644
index 00000000000..40fa5211bac
--- /dev/null
+++ b/Tool/Channels/VinnyTest/Assets/Plugins/Android/AliPay/alipaysdk-android-15.8.17.aar.meta
@@ -0,0 +1,32 @@
+fileFormatVersion: 2
+guid: 99faef125be8c3446a158d4b75c6428a
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ defineConstraints: []
+ isPreloaded: 0
+ isOverridable: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Tool/Channels/VinnyTest/Assets/Plugins/Android/AndroidManifest.xml b/Tool/Channels/VinnyTest/Assets/Plugins/Android/AndroidManifest.xml
new file mode 100644
index 00000000000..c071f63d888
--- /dev/null
+++ b/Tool/Channels/VinnyTest/Assets/Plugins/Android/AndroidManifest.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Tool/Channels/VinnyTest/ChannelSetting.yaml b/Tool/Channels/VinnyTest/ChannelSetting.yaml
new file mode 100644
index 00000000000..228c6433d6b
--- /dev/null
+++ b/Tool/Channels/VinnyTest/ChannelSetting.yaml
@@ -0,0 +1,49 @@
+# 宏定义列表,供脚本添加到 PlayerSettings 的宏定义中
+Define_list:
+ - BI_PHXH # BI
+ - LOGIN_PHONE # 手机登录
+
+# 应用包名
+PackageName: "com.phxh.nlddev"
+
+# 是否海外渠道
+IsOversea: false
+
+# 多语言配置
+Language: "Lan_CN"
+
+# 当前版本号
+Version: "0.8.0"
+
+# BuildCode
+BuildCode: 4
+
+# 构建资源远程上传路径
+OssRemoteUploadPath: "oss://nld-dev-k8f3h2qr9plmn3b3/client_res/Build"
+AssetsEndPoint: "oss-cn-chengdu.aliyuncs.com"
+
+# 阿里云 OSS 配置
+ConfigAccessKeyId: "LTAI5tPLKwa1cSD1woBLvNBq"
+ConfigAccessKeySecret: "aPvNg3waBzXas8nnn2lo46o1TEQY8X"
+ConfigBucketName: "nld-dev-k8f3h2qr9plmn3b3"
+ConfigURL: "http://k8f3h2qr9plmn3b3.kedrgame.com"
+
+# http请求配置
+AppAccessKey: "0SoE48O9sayjkG8J"
+AppKey: "uUi_UI1oMKWo0VOSN1zme17Z70-FlAv3Lcx2mNhoYe4="
+
+# 崩溃监控配置(仅 Android)
+CrashSight_Android:
+ id: "669a94ce69" # 崩溃上报的 App ID
+ key: "d9412717-2416-4270-b8bc-f7a0805f988f" # 崩溃上报的 Key
+
+# TalkingData初始化
+TalkingData:
+ appid: "2D0025FE20F34810BADABEFC00D32D22" # 测试包的App ID
+ channel: "VinnyTest" # 上报渠道
+
+Packages:
+ - CrashSight@latest
+ - TalkingData@0.0.1
+ - WXPay@1.0.0
+ - AliPay@0.0.1
\ No newline at end of file