chore: 重构DOTween插件路径并更新相关代码

1. 将DOTween从原Plugins/DOTween迁移到Plugins/Demigiant/DOTween
2. 更新版本号解析逻辑,适配设备端压缩编码格式
3. 新增UI动画组件UIAnimator及其编辑器脚本
4. 优化主页设备列表项滑动菜单功能
5. 移除无用的VSCode编辑器包配置
6. 更新多语言文案修正末尾标点
7. 调整主页锁定超时配置为可配置项
This commit is contained in:
“虞渠成” 2026-08-19 09:47:44 +08:00
parent 76321e6bb7
commit 3a335e60a2
79 changed files with 6401 additions and 2751 deletions

View File

@ -0,0 +1,343 @@
using DG.Tweening;
using UnityEditor;
using UnityEditorInternal;
using UnityEngine;
/// <summary>
/// UIAnimator 可视化编辑Inspector:
/// - ReorderableList 编排动画步骤(增删/拖拽排序)
/// - 各步骤字段按类型动态显示
/// - 播放/反向/停止/重置 预览(编辑器内即时查看效果,不进入播放模式)
/// </summary>
[CustomEditor(typeof(UIAnimator))]
public class UIAnimatorInspector : Editor
{
private ReorderableList stepList;
private SerializedProperty stepsProp;
// 预览状态
private bool previewing;
private bool previewForward = true;
private float previewElapsed;
private float previewTotal;
private double lastPreviewTime;
private const float RowHeight = 18f;
private const float RowGap = 2f;
private void OnEnable()
{
stepsProp = serializedObject.FindProperty("steps");
stepList = new ReorderableList(serializedObject, stepsProp, true, true, true, true)
{
drawHeaderCallback = rect => EditorGUI.LabelField(rect, "动画步骤"),
drawElementCallback = DrawStepElement,
elementHeightCallback = index => RowHeight * 3 + RowGap * 4,
onAddCallback = OnAddStep
};
}
private void OnDisable()
{
StopPreview();
EditorApplication.update -= OnPreviewUpdate;
}
public override void OnInspectorGUI()
{
serializedObject.Update();
EditorGUILayout.PropertyField(serializedObject.FindProperty("playOnAwake"));
EditorGUILayout.PropertyField(serializedObject.FindProperty("autoAddCanvasGroup"));
// 总时长提示
EditorGUILayout.HelpBox($"动画总时长: {((UIAnimator)target).TotalDuration:F2}s", MessageType.None);
stepList.DoLayoutList();
EditorGUILayout.Space();
DrawPreviewButtons();
serializedObject.ApplyModifiedProperties();
}
// ---------- 步骤绘制 ----------
private void DrawStepElement(Rect rect, int index, bool isActive, bool isFocused)
{
SerializedProperty prop = stepsProp.GetArrayElementAtIndex(index);
SerializedProperty typeProp = prop.FindPropertyRelative("type");
UIAnimator.UIAnimationType type = (UIAnimator.UIAnimationType)typeProp.enumValueIndex;
rect.y += RowGap;
float y = rect.y;
// 第1行:类型
typeProp.enumValueIndex = (int)(UIAnimator.UIAnimationType)EditorGUI.EnumPopup(
new Rect(rect.x, y, rect.width, RowHeight), GUIContent.none, type);
y += RowHeight + RowGap;
// 第2行:延迟 + 时长
float half = (rect.width - 6) * 0.5f;
EditorGUIUtility.labelWidth = 38f;
EditorGUI.PropertyField(new Rect(rect.x, y, half, RowHeight), prop.FindPropertyRelative("delay"));
EditorGUI.PropertyField(new Rect(rect.x + half + 6, y, half, RowHeight), prop.FindPropertyRelative("duration"));
EditorGUIUtility.labelWidth = 0f;
y += RowHeight + RowGap;
// 第3行:缓动 + 类型专属字段
float easeW = half;
EditorGUI.LabelField(new Rect(rect.x, y, easeW, RowHeight), "缓动");
SerializedProperty easeProp = prop.FindPropertyRelative("ease");
easeProp.enumValueIndex = (int)(Ease)EditorGUI.EnumPopup(
new Rect(rect.x + 34f, y, easeW - 34f, RowHeight), GUIContent.none, (Ease)easeProp.enumValueIndex);
Rect valueRect = new Rect(rect.x + half + 6, y, half, RowHeight);
EditorGUIUtility.labelWidth = 42f;
switch (type)
{
case UIAnimator.UIAnimationType.Move:
EditorGUI.PropertyField(valueRect, prop.FindPropertyRelative("moveOffset"));
break;
case UIAnimator.UIAnimationType.Scale:
EditorGUI.PropertyField(valueRect, prop.FindPropertyRelative("targetScale"));
break;
case UIAnimator.UIAnimationType.Rotate:
EditorGUI.PropertyField(valueRect, prop.FindPropertyRelative("targetRotation"));
break;
case UIAnimator.UIAnimationType.Alpha:
EditorGUI.PropertyField(valueRect, prop.FindPropertyRelative("targetAlpha"));
break;
}
EditorGUIUtility.labelWidth = 0f;
}
private void OnAddStep(ReorderableList list)
{
stepsProp.arraySize++;
SerializedProperty newElem = stepsProp.GetArrayElementAtIndex(stepsProp.arraySize - 1);
// 给新步骤赋默认值
newElem.FindPropertyRelative("type").enumValueIndex = 0;
newElem.FindPropertyRelative("delay").floatValue = 0f;
newElem.FindPropertyRelative("duration").floatValue = 0.5f;
newElem.FindPropertyRelative("ease").enumValueIndex = (int)Ease.OutQuad;
newElem.FindPropertyRelative("moveOffset").vector3Value = Vector3.zero;
newElem.FindPropertyRelative("targetScale").vector3Value = Vector3.one;
newElem.FindPropertyRelative("targetRotation").floatValue = 0f;
newElem.FindPropertyRelative("targetAlpha").floatValue = 1f;
serializedObject.ApplyModifiedProperties();
}
// ---------- 预览按钮 ----------
private void DrawPreviewButtons()
{
UIAnimator animator = (UIAnimator)target;
if (animator.steps == null || animator.steps.Count == 0)
{
EditorGUILayout.HelpBox("请先添加动画步骤", MessageType.Warning);
return;
}
EditorGUILayout.BeginHorizontal();
if (GUILayout.Button("▶ 播放", GUILayout.Height(26)))
StartPreview(animator, true);
if (GUILayout.Button("◀ 反向", GUILayout.Height(26)))
StartPreview(animator, false);
if (GUILayout.Button("■ 停止", GUILayout.Height(26)))
StopPreview();
if (GUILayout.Button("⟲ 重置", GUILayout.Height(26)))
ResetToInitial(animator);
EditorGUILayout.EndHorizontal();
if (previewing)
EditorGUILayout.HelpBox("预览中… 停止后恢复初始状态", MessageType.Info);
}
// ---------- 预览驱动 ----------
private void StartPreview(UIAnimator animator, bool forward)
{
StopPreview();
if (animator.GetComponent<RectTransform>() == null)
{
EditorUtility.DisplayDialog("UIAnimator", "需要挂载在带有RectTransform的UI对象上", "确定");
return;
}
animator.SaveInitialState();
previewForward = forward;
previewing = true;
previewElapsed = 0f;
previewTotal = Mathf.Max(animator.TotalDuration, 0.001f);
lastPreviewTime = EditorApplication.timeSinceStartup;
EditorApplication.update -= OnPreviewUpdate;
EditorApplication.update += OnPreviewUpdate;
UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
}
private void StopPreview()
{
if (!previewing) return;
previewing = false;
EditorApplication.update -= OnPreviewUpdate;
RestoreInitialState();
UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
}
private void ResetToInitial(UIAnimator animator)
{
StopPreview();
animator.SaveInitialState();
RestoreInitialState();
}
private void OnPreviewUpdate()
{
if (!previewing) return;
UIAnimator animator = (UIAnimator)target;
if (animator == null) { StopPreview(); return; }
double now = EditorApplication.timeSinceStartup;
previewElapsed += (float)(now - lastPreviewTime);
lastPreviewTime = now;
// 每帧重算总时长,预览中修改步骤字段可即时生效
previewTotal = Mathf.Max(animator.TotalDuration, 0.001f);
// 直接使用绝对时间(秒)驱动,避免归一化比例与步骤时间轴错位
float elapsedTime = previewForward
? Mathf.Min(previewElapsed, previewTotal)
: Mathf.Max(previewTotal - previewElapsed, 0f);
ApplyPreview(animator, elapsedTime);
if (previewElapsed >= previewTotal)
{
previewing = false;
EditorApplication.update -= OnPreviewUpdate;
}
Repaint();
UnityEditorInternal.InternalEditorUtility.RepaintAllViews();
}
/// <summary>
/// 按绝对时间(秒)插值应用步骤(编辑器预览用,与运行时DOTween缓动保持一致的核心曲线)
/// </summary>
private void ApplyPreview(UIAnimator animator, float time)
{
RectTransform rt = animator.RectTransform;
CanvasGroup cg = animator.CanvasGroup;
Vector3 curPos = animator.InitialAnchoredPosition3D;
Vector3 curScale = animator.InitialLocalScale;
float curRotZ = animator.InitialRotationZ;
float curAlpha = animator.InitialAlpha;
float t = 0f;
foreach (var step in animator.steps)
{
float stepStart = t + step.delay;
float stepEnd = stepStart + step.duration;
if (time >= stepStart)
{
float local = Mathf.Clamp01((time - stepStart) / Mathf.Max(step.duration, 0.0001f));
float e = EvaluateEase(step.ease, local);
// 记录本步骤起始值(=上一步结束后的值),串行执行时从该值插值到目标值,
// 与运行时 Sequence.Append 的语义一致,避免多步骤"同时执行"
Vector3 startPos = curPos;
Vector3 startScale = curScale;
float startRotZ = curRotZ;
float startAlpha = curAlpha;
switch (step.type)
{
case UIAnimator.UIAnimationType.Move:
curPos = startPos + step.moveOffset * e;
break;
case UIAnimator.UIAnimationType.Scale:
curScale = Vector3.LerpUnclamped(startScale, step.targetScale, e);
break;
case UIAnimator.UIAnimationType.Rotate:
curRotZ = Mathf.LerpUnclamped(startRotZ, step.targetRotation, e);
break;
case UIAnimator.UIAnimationType.Alpha:
if (cg != null)
curAlpha = Mathf.LerpUnclamped(startAlpha, step.targetAlpha, e);
break;
}
}
t = stepEnd;
}
rt.anchoredPosition3D = curPos;
rt.localScale = curScale;
Vector3 rot = rt.localEulerAngles;
rot.z = curRotZ;
rt.localEulerAngles = rot;
if (cg != null) cg.alpha = curAlpha;
}
private void RestoreInitialState()
{
UIAnimator animator = (UIAnimator)target;
if (animator == null || animator.RectTransform == null) return;
animator.RectTransform.anchoredPosition3D = animator.InitialAnchoredPosition3D;
animator.RectTransform.localScale = animator.InitialLocalScale;
Vector3 rot = animator.RectTransform.localEulerAngles;
rot.z = animator.InitialRotationZ;
animator.RectTransform.localEulerAngles = rot;
if (animator.CanvasGroup != null)
animator.CanvasGroup.alpha = animator.InitialAlpha;
}
// ---------- 预览缓动公式(与DOTween常用缓动一致) ----------
private static float EvaluateEase(Ease ease, float t)
{
switch (ease)
{
case Ease.Linear: return t;
case Ease.InQuad: return t * t;
case Ease.OutQuad: return t * (2f - t);
case Ease.InOutQuad: return t < 0.5f ? 2f * t * t : -1f + (4f - 2f * t) * t;
case Ease.InCubic: return t * t * t;
case Ease.OutCubic: return 1f + (--t) * t * t;
case Ease.InOutCubic: return t < 0.5f ? 4f * t * t * t : (t - 1f) * (2f * t - 2f) * (2f * t - 2f) + 1f;
case Ease.InQuart: return t * t * t * t;
case Ease.OutQuart: return 1f - (--t) * t * t * t;
case Ease.InQuint: return t * t * t * t * t;
case Ease.OutQuint: return 1f + (--t) * t * t * t * t;
case Ease.InSine: return 1f - Mathf.Cos(t * Mathf.PI * 0.5f);
case Ease.OutSine: return Mathf.Sin(t * Mathf.PI * 0.5f);
case Ease.InOutSine: return -0.5f * (Mathf.Cos(Mathf.PI * t) - 1f);
case Ease.InBack: { float c1 = 1.70158f, c3 = c1 + 1f; return c3 * t * t * t - c1 * t * t; }
case Ease.OutBack: { float c1 = 1.70158f, c3 = c1 + 1f; t -= 1f; return 1f + c3 * t * t * t + c1 * t * t; }
case Ease.InOutBack:
{
float c1 = 1.70158f, c2 = c1 * 1.525f;
return t < 0.5f
? (2f * t) * (2f * t) * ((c2 + 1f) * 2f * t - c2) / 2f
: ((2f * t - 2f) * (2f * t - 2f) * ((c2 + 1f) * (t * 2f - 2f) + c2) + 2f) / 2f;
}
case Ease.OutElastic:
{
float c4 = (2f * Mathf.PI) / 3f;
if (t == 0f) return 0f;
if (t == 1f) return 1f;
return Mathf.Pow(2f, -10f * t) * Mathf.Sin((t * 10f - 0.75f) * c4) + 1f;
}
case Ease.OutBounce:
{
const float n1 = 7.5625f, d1 = 2.75f;
if (t < 1f / d1) return n1 * t * t;
if (t < 2f / d1) { t -= 1.5f / d1; return n1 * t * t + 0.75f; }
if (t < 2.5f / d1) { t -= 2.25f / d1; return n1 * t * t + 0.9375f; }
t -= 2.625f / d1; return n1 * t * t + 0.984375f;
}
default: return t;
}
}
}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 330f9ca32b7fd08488ef8131b8159b0a guid: 926e9d8451272b6418789132ab7fdb87
MonoImporter: MonoImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 2 serializedVersion: 2

Binary file not shown.

View File

@ -1,33 +0,0 @@
fileFormatVersion: 2
guid: 01772e6d1817daf4499f5d90eae2d3fe
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,33 +0,0 @@
fileFormatVersion: 2
guid: 99f7651fa6f4bee48ac57745621888ed
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 0
settings: {}
- first:
Editor: Editor
second:
enabled: 1
settings:
DefaultValueInitialized: true
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,88 +0,0 @@
fileFormatVersion: 2
guid: ca20e26c85e59724387b5846850e34fa
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 9
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: -1
wrapV: -1
wrapW: -1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,88 +0,0 @@
fileFormatVersion: 2
guid: 1da37d90e634d3c4cb7da1c3add7ece5
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 9
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: -100
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 2
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 256
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,88 +0,0 @@
fileFormatVersion: 2
guid: e2d7280584521e84a9c21bd7e28f4a0c
TextureImporter:
fileIDToRecycleName: {}
externalObjects: {}
serializedVersion: 9
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: -1
aniso: -1
mipBias: -100
wrapU: -1
wrapV: -1
wrapW: -1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- serializedVersion: 2
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
androidETC2FallbackOverride: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID:
vertices: []
indices:
edges: []
weights: []
spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 5d75b605a42b10041b2b1c05dcf0be0b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +0,0 @@
fileFormatVersion: 2
guid: 51f2d543848052d458bfe6630373d950
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 3987a0ed4d25f954cb5743519a44d1c5 guid: 25027f2ec7ec6ec4aa0f9c69b7c690e7
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}

View File

@ -0,0 +1,21 @@
fileFormatVersion: 2
guid: a50bd9a009c8dfc4ebd88cc8101225a7
labels:
- Tween
- Tweening
- Animation
- HOTween
- Paths
- iTween
- DFTween
- LeanTween
- Ease
- Easing
- Shake
- Punch
- 2DToolkit
- TextMeshPro
- Text
folderAsset: yes
DefaultImporter:
userData:

View File

@ -123,7 +123,14 @@
</member> </member>
<member name="M:DG.Tweening.Core.Easing.EaseManager.Evaluate(DG.Tweening.Tween,System.Single,System.Single,System.Single,System.Single)"> <member name="M:DG.Tweening.Core.Easing.EaseManager.Evaluate(DG.Tweening.Tween,System.Single,System.Single,System.Single,System.Single)">
<summary> <summary>
Returns a value between 0 and 1 (inclusive) based on the elapsed time and ease selected Returns a value between 0 and 1 (inclusive) based on the elapsed time and ease selected.
Use this method if you don't care about <see cref="F:DG.Tweening.LoopType.Incremental"/>, otherwise use <see cref="M:DG.Tweening.Core.Easing.EaseManager.EvaluateUnclamped(DG.Tweening.Tween,System.Single,System.Single,System.Single,System.Single)"/>
</summary>
</member>
<member name="M:DG.Tweening.Core.Easing.EaseManager.EvaluateUnclamped(DG.Tweening.Tween,System.Single,System.Single,System.Single,System.Single)">
<summary>
USE THIS FOR CUSTOM PLUGINS when you want to be able to use <see cref="F:DG.Tweening.LoopType.Incremental"/>.
Returns a value that is from 0 to 1 if <see cref="T:DG.Tweening.LoopType"/> is not incremental, otherwise from 0 to (1 * completed loops)
</summary> </summary>
</member> </member>
<member name="M:DG.Tweening.Core.Easing.EaseManager.Evaluate(DG.Tweening.Ease,DG.Tweening.EaseFunction,System.Single,System.Single,System.Single,System.Single)"> <member name="M:DG.Tweening.Core.Easing.EaseManager.Evaluate(DG.Tweening.Ease,DG.Tweening.EaseFunction,System.Single,System.Single,System.Single,System.Single)">
@ -227,6 +234,11 @@
Used to dispatch commands that need to be captured externally, usually by Modules Used to dispatch commands that need to be captured externally, usually by Modules
</summary> </summary>
</member> </member>
<member name="T:DG.Tweening.Core.DOTweenUtils">
<summary>
Various utils
</summary>
</member>
<member name="M:DG.Tweening.Core.DOTweenUtils.Vector3FromAngle(System.Single,System.Single)"> <member name="M:DG.Tweening.Core.DOTweenUtils.Vector3FromAngle(System.Single,System.Single)">
<summary> <summary>
Returns a Vector3 with z = 0 Returns a Vector3 with z = 0
@ -445,6 +457,14 @@
<summary>If TRUE draws path gizmos in Unity Editor (if the gizmos button is active). <summary>If TRUE draws path gizmos in Unity Editor (if the gizmos button is active).
Deactivate this if you want to avoid gizmos overhead while in Unity Editor</summary> Deactivate this if you want to avoid gizmos overhead while in Unity Editor</summary>
</member> </member>
<member name="P:DG.Tweening.DOTween.tweenersCapacity">
<summary>Gets/sets the max Tweeners capacity (automatically increased by DOTween when necessary).
You can also set both Tweeners and Sequences capacity via the <see cref="M:DG.Tweening.DOTween.SetTweensCapacity(System.Int32,System.Int32)"/> static method</summary>
</member>
<member name="P:DG.Tweening.DOTween.sequencesCapacity">
<summary>Gets/sets the max Sequences capacity (automatically increased by DOTween when necessary).
You can also set both Tweeners and Sequences capacity via the <see cref="M:DG.Tweening.DOTween.SetTweensCapacity(System.Int32,System.Int32)"/> static method</summary>
</member>
<member name="F:DG.Tweening.DOTween.debugMode"> <member name="F:DG.Tweening.DOTween.debugMode">
<summary>If TRUE activates various debug options</summary> <summary>If TRUE activates various debug options</summary>
</member> </member>
@ -1000,7 +1020,7 @@
<summary> <summary>
Tweens a virtual float. Tweens a virtual float.
You can add regular settings to the generated tween, You can add regular settings to the generated tween,
but do not use <code>SetUpdate</code> or you will overwrite the onVirtualUpdate parameter but do not use <code>OnUpdate</code> or you will overwrite the onVirtualUpdate parameter
</summary> </summary>
<param name="from">The value to start from</param> <param name="from">The value to start from</param>
<param name="to">The value to tween to</param> <param name="to">The value to tween to</param>
@ -1011,18 +1031,29 @@
<summary> <summary>
Tweens a virtual int. Tweens a virtual int.
You can add regular settings to the generated tween, You can add regular settings to the generated tween,
but do not use <code>SetUpdate</code> or you will overwrite the onVirtualUpdate parameter but do not use <code>OnUpdate</code> or you will overwrite the onVirtualUpdate parameter
</summary> </summary>
<param name="from">The value to start from</param> <param name="from">The value to start from</param>
<param name="to">The value to tween to</param> <param name="to">The value to tween to</param>
<param name="duration">The duration of the tween</param> <param name="duration">The duration of the tween</param>
<param name="onVirtualUpdate">A callback which must accept a parameter of type int, called at each update</param> <param name="onVirtualUpdate">A callback which must accept a parameter of type int, called at each update</param>
</member> </member>
<member name="M:DG.Tweening.DOVirtual.Vector2(UnityEngine.Vector2,UnityEngine.Vector2,System.Single,DG.Tweening.TweenCallback{UnityEngine.Vector2})">
<summary>
Tweens a virtual Vector2.
You can add regular settings to the generated tween,
but do not use <code>OnUpdate</code> or you will overwrite the onVirtualUpdate parameter
</summary>
<param name="from">The value to start from</param>
<param name="to">The value to tween to</param>
<param name="duration">The duration of the tween</param>
<param name="onVirtualUpdate">A callback which must accept a parameter of type Vector3, called at each update</param>
</member>
<member name="M:DG.Tweening.DOVirtual.Vector3(UnityEngine.Vector3,UnityEngine.Vector3,System.Single,DG.Tweening.TweenCallback{UnityEngine.Vector3})"> <member name="M:DG.Tweening.DOVirtual.Vector3(UnityEngine.Vector3,UnityEngine.Vector3,System.Single,DG.Tweening.TweenCallback{UnityEngine.Vector3})">
<summary> <summary>
Tweens a virtual Vector3. Tweens a virtual Vector3.
You can add regular settings to the generated tween, You can add regular settings to the generated tween,
but do not use <code>SetUpdate</code> or you will overwrite the onVirtualUpdate parameter but do not use <code>OnUpdate</code> or you will overwrite the onVirtualUpdate parameter
</summary> </summary>
<param name="from">The value to start from</param> <param name="from">The value to start from</param>
<param name="to">The value to tween to</param> <param name="to">The value to tween to</param>
@ -1033,7 +1064,7 @@
<summary> <summary>
Tweens a virtual Color. Tweens a virtual Color.
You can add regular settings to the generated tween, You can add regular settings to the generated tween,
but do not use <code>SetUpdate</code> or you will overwrite the onVirtualUpdate parameter but do not use <code>OnUpdate</code> or you will overwrite the onVirtualUpdate parameter
</summary> </summary>
<param name="from">The value to start from</param> <param name="from">The value to start from</param>
<param name="to">The value to tween to</param> <param name="to">The value to tween to</param>
@ -1368,6 +1399,12 @@
<param name="withCallbacks">For Sequences only: if TRUE also internal Sequence callbacks will be fired, <param name="withCallbacks">For Sequences only: if TRUE also internal Sequence callbacks will be fired,
otherwise they will be ignored</param> otherwise they will be ignored</param>
</member> </member>
<member name="M:DG.Tweening.TweenExtensions.Done``1(``0)">
<summary>Optional: indicates that the tween creation has ended, to be used (optionally) as the last element of tween chaining creation.<br/>
This method won't do anything except in case of 0-duration tweens,
where it will complete them immediately instead of waiting for the next internal update routine
(unless they're nested in a Sequence, in which case the Sequence will still be the one in control and this method will be ignored)</summary>
</member>
<member name="M:DG.Tweening.TweenExtensions.Flip(DG.Tweening.Tween)"> <member name="M:DG.Tweening.TweenExtensions.Flip(DG.Tweening.Tween)">
<summary>Flips the direction of this tween (backwards if it was going forward or viceversa)</summary> <summary>Flips the direction of this tween (backwards if it was going forward or viceversa)</summary>
</member> </member>
@ -1525,10 +1562,23 @@
<member name="M:DG.Tweening.TweenExtensions.IsBackwards(DG.Tweening.Tween)"> <member name="M:DG.Tweening.TweenExtensions.IsBackwards(DG.Tweening.Tween)">
<summary>Returns TRUE if this tween was reversed and is set to go backwards</summary> <summary>Returns TRUE if this tween was reversed and is set to go backwards</summary>
</member> </member>
<member name="M:DG.Tweening.TweenExtensions.IsLoopingOrExecutingBackwards(DG.Tweening.Tween)">
<summary>NOTE: To check if a tween was simply set to go backwards see <see cref="M:DG.Tweening.TweenExtensions.IsBackwards(DG.Tweening.Tween)"/>.<para/>
Returns TRUE if this tween is going backwards for any of these reasons:<para/>
- The tween was reversed and is going backwards on a straight loop<para/>
- The tween was reversed and is going backwards on an odd Yoyo loop<para/>
- The tween is going forward but on an even Yoyo loop<para/>
IMPORTANT: if used inside a tween's callback, this will return a result concerning the exact frame when it's asked,
so for example in a callback at the end of a Yoyo loop step this method will never return FALSE
because the frame will never end exactly there and the tween will already be going backwards when the callback is fired</summary>
</member>
<member name="M:DG.Tweening.TweenExtensions.IsComplete(DG.Tweening.Tween)"> <member name="M:DG.Tweening.TweenExtensions.IsComplete(DG.Tweening.Tween)">
<summary>Returns TRUE if the tween is complete <summary>Returns TRUE if the tween is complete
(silently fails and returns FALSE if the tween has been killed)</summary> (silently fails and returns FALSE if the tween has been killed)</summary>
</member> </member>
<member name="M:DG.Tweening.TweenExtensions.IsTimeScaleIndependent(DG.Tweening.Tween)">
<summary>Returns TRUE if this tween was set to be timeScale independent via the <code>tween.SetUpdate</code> method</summary>
</member>
<member name="M:DG.Tweening.TweenExtensions.IsInitialized(DG.Tweening.Tween)"> <member name="M:DG.Tweening.TweenExtensions.IsInitialized(DG.Tweening.Tween)">
<summary>Returns TRUE if this tween has been initialized</summary> <summary>Returns TRUE if this tween has been initialized</summary>
</member> </member>
@ -2655,7 +2705,7 @@
<param name="t">The tween to prepend</param> <param name="t">The tween to prepend</param>
</member> </member>
<member name="M:DG.Tweening.TweenSettingsExtensions.Join(DG.Tweening.Sequence,DG.Tweening.Tween)"> <member name="M:DG.Tweening.TweenSettingsExtensions.Join(DG.Tweening.Sequence,DG.Tweening.Tween)">
<summary>Inserts the given tween at the same time position of the last tween, callback or intervale added to the Sequence. <summary>Inserts the given tween at the same time position of the last tween, callback or interval added to the Sequence.
Note that, in case of a Join after an interval, the insertion time will be the time where the interval starts, not where it finishes. Note that, in case of a Join after an interval, the insertion time will be the time where the interval starts, not where it finishes.
Has no effect if the Sequence has already started</summary> Has no effect if the Sequence has already started</summary>
</member> </member>
@ -2686,6 +2736,12 @@
Has no effect if the Sequence has already started</summary> Has no effect if the Sequence has already started</summary>
<param name="callback">The callback to prepend</param> <param name="callback">The callback to prepend</param>
</member> </member>
<member name="M:DG.Tweening.TweenSettingsExtensions.JoinCallback(DG.Tweening.Sequence,DG.Tweening.TweenCallback)">
<summary>Inserts the given callback at the same time position of the last tween, callback or interval added to the Sequence.
Note that, in case of a Join after an interval, the insertion time will be the time where the interval starts, not where it finishes.
Has no effect if the Sequence has already started</summary>
/// &lt;param name="callback"&gt;The callback to prepend&lt;/param&gt;
</member>
<member name="M:DG.Tweening.TweenSettingsExtensions.InsertCallback(DG.Tweening.Sequence,System.Single,DG.Tweening.TweenCallback)"> <member name="M:DG.Tweening.TweenSettingsExtensions.InsertCallback(DG.Tweening.Sequence,System.Single,DG.Tweening.TweenCallback)">
<summary>Inserts the given callback at the given time position in the Sequence, <summary>Inserts the given callback at the given time position in the Sequence,
automatically adding an interval if needed. automatically adding an interval if needed.

View File

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 34192c5e0d14aee43a0e86cc4823268a
TextScriptImporter:
userData:

Binary file not shown.

View File

@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: a811bde74b26b53498b4f6d872b09b6d
PluginImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
isPreloaded: 0
platformData:
Any:
enabled: 1
settings: {}
Editor:
enabled: 0
settings:
DefaultValueInitialized: true
WindowsStoreApps:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: b27f58ae5d5c33a4bb2d1f4f34bd036d
folderAsset: yes
DefaultImporter:
userData:

View File

@ -4,6 +4,31 @@
<name>DOTweenEditor</name> <name>DOTweenEditor</name>
</assembly> </assembly>
<members> <members>
<member name="T:DG.DOTweenEditor.EditorCompatibilityUtils">
<summary>
Contains compatibility methods taken from DemiEditor (for when DOTween is without it)
</summary>
</member>
<member name="M:DG.DOTweenEditor.EditorCompatibilityUtils.FindObjectOfType``1(System.Boolean)">
<summary>
Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account
</summary>
</member>
<member name="M:DG.DOTweenEditor.EditorCompatibilityUtils.FindObjectOfType(System.Type,System.Boolean)">
<summary>
Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account
</summary>
</member>
<member name="M:DG.DOTweenEditor.EditorCompatibilityUtils.FindObjectsOfType``1(System.Boolean)">
<summary>
Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account
</summary>
</member>
<member name="M:DG.DOTweenEditor.EditorCompatibilityUtils.FindObjectsOfType(System.Type,System.Boolean)">
<summary>
Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account
</summary>
</member>
<member name="M:DG.DOTweenEditor.DOTweenEditorPreview.Start(System.Action)"> <member name="M:DG.DOTweenEditor.DOTweenEditorPreview.Start(System.Action)">
<summary> <summary>
Starts the update loop of tween in the editor. Has no effect during playMode. Starts the update loop of tween in the editor. Has no effect during playMode.
@ -37,6 +62,30 @@
<member name="F:DG.DOTweenEditor.EditorVersion.MinorVersion"> <member name="F:DG.DOTweenEditor.EditorVersion.MinorVersion">
<summary>First minor version (ex: in 2018.1 it would be 1)</summary> <summary>First minor version (ex: in 2018.1 it would be 1)</summary>
</member> </member>
<member name="P:DG.DOTweenEditor.EditorUtils.adbPrefix">
<summary>With final slash. "Packages/" if this is a package, "Assets/" otherwise</summary>
</member>
<member name="P:DG.DOTweenEditor.EditorUtils.demigiantDir">
<summary>With final slash (system based) - might be NULL in case users are not using a parent Demigiant folder</summary>
</member>
<member name="P:DG.DOTweenEditor.EditorUtils.dotweenDir">
<summary>With final slash (system based). If this is a package, represents the package's Runtime dir</summary>
</member>
<member name="P:DG.DOTweenEditor.EditorUtils.editorDir">
<summary>With final slash (system based). If this is a package, represents the package's Editor dir</summary>
</member>
<member name="P:DG.DOTweenEditor.EditorUtils.editorADBDir">
<summary>DOTween editor path from Assets (not included) with final slash, in AssetDatabase format (/)</summary>
</member>
<member name="P:DG.DOTweenEditor.EditorUtils.dotweenProEditorDir">
<summary>With final slash (system based)</summary>
</member>
<member name="P:DG.DOTweenEditor.EditorUtils.dotweenModulesDir">
<summary>With final slash (system based)</summary>
</member>
<member name="P:DG.DOTweenEditor.EditorUtils.dotweenTimelineDir">
<summary>With final slash (system based)</summary>
</member>
<member name="M:DG.DOTweenEditor.EditorUtils.SetEditorTexture(UnityEngine.Texture2D,UnityEngine.FilterMode,System.Int32)"> <member name="M:DG.DOTweenEditor.EditorUtils.SetEditorTexture(UnityEngine.Texture2D,UnityEngine.FilterMode,System.Int32)">
<summary> <summary>
Checks that the given editor texture use the correct import settings, Checks that the given editor texture use the correct import settings,
@ -103,8 +152,38 @@
</member> </member>
<member name="T:DG.DOTweenEditor.DOTweenDefines"> <member name="T:DG.DOTweenEditor.DOTweenDefines">
<summary> <summary>
Not used as menu item anymore, but as a utiity function Not used as menu item anymore, but as a utility function
</summary> </summary>
</member> </member>
<member name="M:DG.DOTweenEditor.DOTweenDefines.RefreshDOTweenSettings(DG.Tweening.Core.DOTweenSettings)">
<summary>Sets the modules bool values to the current defines state</summary>
</member>
<member name="M:DG.DOTweenEditor.DOTweenDefines.RefreshAll">
<summary>Refreshes the enabled state of all defines</summary>
</member>
<member name="M:DG.DOTweenEditor.DOTweenDefines.ApplyGUIEnabledToAll">
<summary>Applies the guiEnabled value state to each define, adding or removing them based on that</summary>
</member>
<member name="M:DG.DOTweenEditor.DOTweenDefines.RemoveAll">
<summary>Removes all DOTween defines including the ones for external assets</summary>
</member>
<member name="M:DG.DOTweenEditor.DOTweenDefines.RemoveAllLegacy">
<summary>Removes all legacy defines</summary>
</member>
<member name="M:DG.DOTweenEditor.DOTweenDefines.Def.Remove">
<summary>Removes the define if present</summary>
</member>
<member name="M:DG.DOTweenEditor.DOTweenDefines.Def.Add">
<summary>Adds the define if it's not already present</summary>
</member>
<member name="F:DG.DOTweenEditor.UnityEditorVersion.Version">
<summary>Full major version + first minor version (ex: 2018.1f)</summary>
</member>
<member name="F:DG.DOTweenEditor.UnityEditorVersion.MajorVersion">
<summary>Major version</summary>
</member>
<member name="F:DG.DOTweenEditor.UnityEditorVersion.MinorVersion">
<summary>First minor version (ex: in 2018.1 it would be 1)</summary>
</member>
</members> </members>
</doc> </doc>

View File

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 2e2c6224d345d9249acfa6e8ef40bb2d
TextScriptImporter:
userData:

View File

@ -0,0 +1,22 @@
fileFormatVersion: 2
guid: 45d5034162d6cf04dbe46da84fc7d074
PluginImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
isPreloaded: 0
platformData:
Any:
enabled: 0
settings: {}
Editor:
enabled: 1
settings:
DefaultValueInitialized: true
WindowsStoreApps:
enabled: 0
settings:
CPU: AnyCPU
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: 0034ebae0c2a9344e897db1160d71b6d
folderAsset: yes
DefaultImporter:
userData:

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@ -0,0 +1,47 @@
fileFormatVersion: 2
guid: 8da095e39e9b4df488dfd436f81116d6
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: .25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
seamlessCubemap: 0
textureFormat: -3
maxTextureSize: 128
textureSettings:
filterMode: 1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: .5, y: .5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
sprites: []
spritePackingTag:
userData:

View File

Before

Width:  |  Height:  |  Size: 319 B

After

Width:  |  Height:  |  Size: 319 B

View File

@ -1,9 +1,10 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 5fdf9c51a08593c41a2b7ace101adb0d guid: 61521df2e071645488ba3d05e49289ae
timeCreated: 1602317874
licenseType: Pro
TextureImporter: TextureImporter:
fileIDToRecycleName: {} fileIDToRecycleName: {}
externalObjects: {} serializedVersion: 4
serializedVersion: 9
mipmaps: mipmaps:
mipMapMode: 0 mipMapMode: 0
enableMipMap: 1 enableMipMap: 1
@ -11,8 +12,6 @@ TextureImporter:
linearTexture: 0 linearTexture: 0
fadeOut: 0 fadeOut: 0
borderMipMap: 0 borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1 mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3 mipMapFadeDistanceEnd: 3
bumpmap: bumpmap:
@ -21,8 +20,6 @@ TextureImporter:
heightScale: 0.25 heightScale: 0.25
normalMapFilter: 0 normalMapFilter: 0
isReadable: 0 isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
grayScaleToAlpha: 0 grayScaleToAlpha: 0
generateCubemap: 6 generateCubemap: 6
cubemapConvolution: 0 cubemapConvolution: 0
@ -30,13 +27,10 @@ TextureImporter:
textureFormat: 1 textureFormat: 1
maxTextureSize: 2048 maxTextureSize: 2048
textureSettings: textureSettings:
serializedVersion: 2
filterMode: -1 filterMode: -1
aniso: -1 aniso: -1
mipBias: -100 mipBias: -1
wrapU: -1 wrapMode: -1
wrapV: -1
wrapW: -1
nPOTScale: 1 nPOTScale: 1
lightmap: 0 lightmap: 0
compressionQuality: 50 compressionQuality: 50
@ -45,44 +39,30 @@ TextureImporter:
spriteMeshType: 1 spriteMeshType: 1
alignment: 0 alignment: 0
spritePivot: {x: 0.5, y: 0.5} spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1 spritePixelsToUnits: 100
alphaUsage: 1 alphaUsage: 1
alphaIsTransparency: 0 alphaIsTransparency: 0
spriteTessellationDetail: -1 spriteTessellationDetail: -1
textureType: 0 textureType: 0
textureShape: 1 textureShape: 1
singleChannelComponent: 0
maxTextureSizeSet: 0 maxTextureSizeSet: 0
compressionQualitySet: 0 compressionQualitySet: 0
textureFormatSet: 0 textureFormatSet: 0
platformSettings: platformSettings:
- serializedVersion: 2 - buildTarget: DefaultTexturePlatform
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048 maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1 textureFormat: -1
textureCompression: 1 textureCompression: 1
compressionQuality: 50 compressionQuality: 50
crunchedCompression: 0 crunchedCompression: 0
allowsAlphaSplitting: 0 allowsAlphaSplitting: 0
overridden: 0 overridden: 0
androidETC2FallbackOverride: 0
spriteSheet: spriteSheet:
serializedVersion: 2 serializedVersion: 2
sprites: [] sprites: []
outline: [] outline: []
physicsShape: []
bones: []
spriteID:
vertices: []
indices:
edges: []
weights: []
spritePackingTag: spritePackingTag:
pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:

View File

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -0,0 +1,47 @@
fileFormatVersion: 2
guid: 7051dba417b3d53409f2918f1ea4938d
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: .25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
seamlessCubemap: 0
textureFormat: -3
maxTextureSize: 256
textureSettings:
filterMode: 1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: .5, y: .5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
sprites: []
spritePackingTag:
userData:

View File

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -0,0 +1,47 @@
fileFormatVersion: 2
guid: 519694efe2bb2914788b151fbd8c01f4
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 1
linearTexture: 0
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: .25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 1024
textureSettings:
filterMode: -1
aniso: -1
mipBias: -1
wrapMode: -1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: .5, y: .5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
alphaIsTransparency: 0
textureType: -1
buildTargetSettings: []
spriteSheet:
sprites: []
spritePackingTag:
userData:

View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -0,0 +1,47 @@
fileFormatVersion: 2
guid: 78a59ca99f8987941adb61f9e14a06a7
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: .25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
seamlessCubemap: 0
textureFormat: -3
maxTextureSize: 512
textureSettings:
filterMode: 1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: .5, y: .5}
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
sprites: []
spritePackingTag:
userData:

View File

@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: 143604b8bad857d47a6f7cc7a533e2dc
folderAsset: yes
DefaultImporter:
userData:

View File

@ -1,14 +1,12 @@
// Author: Daniele Giardini - http://www.demigiant.com // Author: Daniele Giardini - http://www.demigiant.com
// Created: 2018/07/13 // Created: 2018/07/13
#if false // MODULE_MARKER #if !DOTWEEN_NOAUDIO // MODULE_MARKER
using System; using System;
using DG.Tweening.Core; using DG.Tweening.Core;
using DG.Tweening.Plugins.Options; using DG.Tweening.Plugins.Options;
using UnityEngine; using UnityEngine;
#if UNITY_5 || UNITY_2017_1_OR_NEWER
using UnityEngine.Audio; // Required for AudioMixer using UnityEngine.Audio; // Required for AudioMixer
#endif
#pragma warning disable 1591 #pragma warning disable 1591
namespace DG.Tweening namespace DG.Tweening
@ -43,8 +41,7 @@ namespace DG.Tweening
#endregion #endregion
#if UNITY_5 || UNITY_2017_1_OR_NEWER #region AudioMixer
#region AudioMixer (Unity 5 or Newer)
/// <summary>Tweens an AudioMixer's exposed float to the given value. /// <summary>Tweens an AudioMixer's exposed float to the given value.
/// Also stores the AudioMixer as the tween's target so it can be used for filtered operations. /// Also stores the AudioMixer as the tween's target so it can be used for filtered operations.
@ -194,7 +191,6 @@ namespace DG.Tweening
#endregion #endregion
#endregion #endregion
#endif
#endregion #endregion
} }

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: b766d08851589514b97afb23c6f30a70
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -1,6 +1,6 @@
using UnityEngine; using UnityEngine;
#if false || EPO_DOTWEEN // MODULE_MARKER #if DOTWEEN_EPO || EPO_DOTWEEN // MODULE_MARKER
using EPOOutline; using EPOOutline;
using DG.Tweening.Plugins.Options; using DG.Tweening.Plugins.Options;

View File

@ -1,7 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 37abaf6d1b72358458c65c2cc8d6d241 guid: e944529dcaee98f4e9498d80e541d93e
timeCreated: 1602593330
licenseType: Pro
MonoImporter: MonoImporter:
externalObjects: {}
serializedVersion: 2 serializedVersion: 2
defaultReferences: [] defaultReferences: []
executionOrder: 0 executionOrder: 0

View File

@ -1,7 +1,7 @@
// Author: Daniele Giardini - http://www.demigiant.com // Author: Daniele Giardini - http://www.demigiant.com
// Created: 2018/07/13 // Created: 2018/07/13
#if false // MODULE_MARKER #if !DOTWEEN_NOPHYSICS // MODULE_MARKER
using System; using System;
using DG.Tweening.Core; using DG.Tweening.Core;
using DG.Tweening.Core.Enums; using DG.Tweening.Core.Enums;

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: dae9aa560b4242648a3affa2bfabc365
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -1,7 +1,7 @@
// Author: Daniele Giardini - http://www.demigiant.com // Author: Daniele Giardini - http://www.demigiant.com
// Created: 2018/07/13 // Created: 2018/07/13
#if false && (UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1_OR_NEWER) // MODULE_MARKER #if !DOTWEEN_NOPHYSICS2D // MODULE_MARKER
using System; using System;
using DG.Tweening.Core; using DG.Tweening.Core;
using DG.Tweening.Plugins; using DG.Tweening.Plugins;

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 230fe34542e175245ba74b4659dae700
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

View File

@ -1,7 +1,7 @@
// Author: Daniele Giardini - http://www.demigiant.com // Author: Daniele Giardini - http://www.demigiant.com
// Created: 2018/07/13 // Created: 2018/07/13
#if true && (UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1_OR_NEWER) // MODULE_MARKER #if !DOTWEEN_NOSPRITES // MODULE_MARKER
using System; using System;
using UnityEngine; using UnityEngine;
using DG.Tweening.Core; using DG.Tweening.Core;

View File

@ -1,11 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 338cfef648e3485499665176aa8be581 guid: 188918ab119d93148aa0de59ccf5286b
MonoImporter: MonoImporter:
externalObjects: {}
serializedVersion: 2 serializedVersion: 2
defaultReferences: [] defaultReferences: []
executionOrder: 0 executionOrder: 0
icon: {instanceID: 0} icon: {instanceID: 0}
userData: userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,7 +1,7 @@
// Author: Daniele Giardini - http://www.demigiant.com // Author: Daniele Giardini - http://www.demigiant.com
// Created: 2018/07/13 // Created: 2018/07/13
#if true && (UNITY_4_6 || UNITY_5 || UNITY_2017_1_OR_NEWER) // MODULE_MARKER #if !DOTWEEN_NOUI // MODULE_MARKER
using System; using System;
using System.Globalization; using System.Globalization;

View File

@ -1,11 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: a35cdb54fce75be43ba09cccdc27b9a9 guid: a060394c03331a64392db53a10e7f2d1
MonoImporter: MonoImporter:
externalObjects: {}
serializedVersion: 2 serializedVersion: 2
defaultReferences: [] defaultReferences: []
executionOrder: 0 executionOrder: 0
icon: {instanceID: 0} icon: {instanceID: 0}
userData: userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,161 @@
// Author: Daniele Giardini - http://www.demigiant.com
// Created: 2026/01/08
#if DOTWEEN_UITOOLKIT && UNITY_2021_3_OR_NEWER // MODULE_MARKER
using UnityEngine;
using UnityEngine.UIElements;
using DG.Tweening.Core;
using DG.Tweening.Core.Enums;
using DG.Tweening.Plugins.Options;
#pragma warning disable 1591
namespace DG.Tweening
{
public static class DOTweenModuleUIToolkit
{
#region Shortcuts
#region VisualElement
/// <summary>Tweens a VisualElement's position (via style.translate) to the given value.
/// Also stores the VisualElement as the tween's target so it can be used for filtered operations</summary>
/// <param name="endValue">The end value to reach</param><param name="duration">The duration of the tween</param>
/// <param name="snapping">If TRUE the tween will smoothly snap all values to integers</param>
public static TweenerCore<Vector3, Vector3, VectorOptions> DOMove(this VisualElement target, Vector3 endValue, float duration, bool snapping = false)
{
TweenerCore<Vector3, Vector3, VectorOptions> t
= DOTween.To(() => target.resolvedStyle.translate, x => target.style.translate = new Translate(x.x, x.y, x.z), endValue, duration);
t.SetOptions(snapping).SetTarget(target);
return t;
}
/// <summary>Tweens a VisualElement's position (via style.translate) to the given value.
/// Also stores the VisualElement as the tween's target so it can be used for filtered operations</summary>
/// <param name="endValue">The end value to reach</param><param name="duration">The duration of the tween</param>
/// <param name="snapping">If TRUE the tween will smoothly snap all values to integers</param>
public static TweenerCore<Vector2, Vector2, VectorOptions> DOMove(this VisualElement target, Vector2 endValue, float duration, bool snapping = false)
{
TweenerCore<Vector2, Vector2, VectorOptions> t
= DOTween.To(() => (Vector2)target.resolvedStyle.translate, x => target.style.translate = new Translate(x.x, x.y, 0), endValue, duration);
t.SetOptions(snapping).SetTarget(target);
return t;
}
/// <summary>Tweens a VisualElement's X position (via style.translate) to the given value.
/// Also stores the VisualElement as the tween's target so it can be used for filtered operations</summary>
/// <param name="endValue">The end value to reach</param><param name="duration">The duration of the tween</param>
/// <param name="snapping">If TRUE the tween will smoothly snap all values to integers</param>
public static TweenerCore<Vector3, Vector3, VectorOptions> DOMoveX(this VisualElement target, float endValue, float duration, bool snapping = false)
{
TweenerCore<Vector3, Vector3, VectorOptions> t
= DOTween.To(() => target.resolvedStyle.translate, x => target.style.translate = new Translate(x.x, x.y, x.z), new Vector3(endValue, 0, 0), duration);
t.SetOptions(AxisConstraint.X, snapping).SetTarget(target);
return t;
}
/// <summary>Tweens a VisualElement's Y position (via style.translate) to the given value.
/// Also stores the VisualElement as the tween's target so it can be used for filtered operations</summary>
/// <param name="endValue">The end value to reach</param><param name="duration">The duration of the tween</param>
/// <param name="snapping">If TRUE the tween will smoothly snap all values to integers</param>
public static TweenerCore<Vector3, Vector3, VectorOptions> DOMoveY(this VisualElement target, float endValue, float duration, bool snapping = false)
{
TweenerCore<Vector3, Vector3, VectorOptions> t
= DOTween.To(() => target.resolvedStyle.translate, x => target.style.translate = new Translate(x.x, x.y, x.z), new Vector3(0, endValue, 0), duration);
t.SetOptions(AxisConstraint.Y, snapping).SetTarget(target);
return t;
}
/// <summary>Tweens a VisualElement's Z position (via style.translate) to the given value.
/// Also stores the VisualElement as the tween's target so it can be used for filtered operations</summary>
/// <param name="endValue">The end value to reach</param><param name="duration">The duration of the tween</param>
/// <param name="snapping">If TRUE the tween will smoothly snap all values to integers</param>
public static TweenerCore<Vector3, Vector3, VectorOptions> DOMoveZ(this VisualElement target, float endValue, float duration, bool snapping = false)
{
TweenerCore<Vector3, Vector3, VectorOptions> t
= DOTween.To(() => target.resolvedStyle.translate, x => target.style.translate = new Translate(x.x, x.y, x.z), new Vector3(0, 0, endValue), duration);
t.SetOptions(AxisConstraint.Z, snapping).SetTarget(target);
return t;
}
/// <summary>Tweens a VisualElement's scale (via style.scale) to the given value.
/// Also stores the VisualElement as the tween's target so it can be used for filtered operations</summary>
/// <param name="endValue">The end value to reach</param><param name="duration">The duration of the tween</param>
public static TweenerCore<Vector2, Vector2, VectorOptions> DOScale(this VisualElement target, Vector2 endValue, float duration)
{
TweenerCore<Vector2, Vector2, VectorOptions> t
= DOTween.To(() => (Vector2)target.resolvedStyle.scale.value, x => target.style.scale = new Scale(x), endValue, duration);
t.SetTarget(target);
return t;
}
/// <summary>Tweens a VisualElement's scale (via style.scale) to the given value.
/// Also stores the VisualElement as the tween's target so it can be used for filtered operations</summary>
/// <param name="endValue">The end value to reach</param><param name="duration">The duration of the tween</param>
public static TweenerCore<Vector2, Vector2, VectorOptions> DOScale(this VisualElement target, float endValue, float duration)
{
TweenerCore<Vector2, Vector2, VectorOptions> t
= DOTween.To(() => (Vector2)target.resolvedStyle.scale.value, x => target.style.scale = new Scale(x), new Vector2(endValue, endValue), duration);
t.SetTarget(target);
return t;
}
/// <summary>Tweens a VisualElement's rotation (via style.rotate) to the given value.
/// Also stores the VisualElement as the tween's target so it can be used for filtered operations</summary>
/// <param name="endValue">The end value to reach</param><param name="duration">The duration of the tween</param>
public static TweenerCore<float, float, FloatOptions> DORotate(this VisualElement target, float endValue, float duration)
{
TweenerCore<float, float, FloatOptions> t
= DOTween.To(() => target.resolvedStyle.rotate.angle.value, x => target.style.rotate = new Rotate(x), endValue, duration);
t.SetTarget(target);
return t;
}
/// <summary>Punches a VisualElement's position towards the given direction and then back to the starting one
/// as if it was connected to the starting position via an elastic.
/// Also stores the VisualElement as the tween's target so it can be used for filtered operations</summary>
/// <param name="punch">The direction and strength of the punch (added to the VisualElement's current position)</param>
/// <param name="duration">The duration of the tween</param>
/// <param name="vibrato">Indicates how much will the punch vibrate</param>
/// <param name="elasticity">Represents how much (0 to 1) the vector will go beyond the starting position when bouncing backwards.
/// 1 creates a full oscillation between the punch direction and the opposite direction,
/// while 0 oscillates only between the punch and the start position</param>
/// <param name="snapping">If TRUE the tween will smoothly snap all values to integers</param>
public static Tweener DOPunch(this VisualElement target, Vector3 punch, float duration, int vibrato = 10, float elasticity = 1, bool snapping = false)
{
return DOTween.Punch(() => target.resolvedStyle.translate, x => target.style.translate = new Translate(x.x, x.y, x.z), punch, duration, vibrato, elasticity)
.SetTarget(target).SetOptions(snapping);
}
/// <summary>Shakes a VisualElement's position with the given values.
/// Also stores the VisualElement as the tween's target so it can be used for filtered operations</summary>
/// <param name="duration">The duration of the tween</param>
/// <param name="strength">The shake strength</param>
/// <param name="vibrato">Indicates how much will the shake vibrate</param>
/// <param name="randomness">Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware).
/// Setting it to 0 will shake along a single direction.</param>
/// <param name="snapping">If TRUE the tween will smoothly snap all values to integers</param>
/// <param name="fadeOut">If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not</param>
/// <param name="randomnessMode">Randomness mode</param>
public static Tweener DOShake(this VisualElement target, float duration, float strength = 100, int vibrato = 10, float randomness = 90, bool snapping = false, bool fadeOut = true, ShakeRandomnessMode randomnessMode = ShakeRandomnessMode.Full)
{
return DOTween.Shake(() => target.resolvedStyle.translate, x => target.style.translate = new Translate(x.x, x.y, x.z), duration, strength, vibrato, randomness, true, fadeOut, randomnessMode)
.SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetShake).SetOptions(snapping);
}
/// <summary>Shakes a VisualElement's position with the given values.
/// Also stores the VisualElement as the tween's target so it can be used for filtered operations</summary>
/// <param name="duration">The duration of the tween</param>
/// <param name="strength">The shake strength on each axis</param>
/// <param name="vibrato">Indicates how much will the shake vibrate</param>
/// <param name="randomness">Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware).
/// Setting it to 0 will shake along a single direction.</param>
/// <param name="snapping">If TRUE the tween will smoothly snap all values to integers</param>
/// <param name="fadeOut">If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not</param>
/// <param name="randomnessMode">Randomness mode</param>
public static Tweener DOShake(this VisualElement target, float duration, Vector2 strength, int vibrato = 10, float randomness = 90, bool snapping = false, bool fadeOut = true, ShakeRandomnessMode randomnessMode = ShakeRandomnessMode.Full)
{
return DOTween.Shake(() => target.resolvedStyle.translate, x => target.style.translate = new Translate(x.x, x.y, x.z), duration, strength, vibrato, randomness, fadeOut, randomnessMode)
.SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetShake).SetOptions(snapping);
}
#endregion
#endregion
}
}
#endif

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: d67b8f0da04241e45879a134cf7d3f8a guid: 0c0a6d2683fb84e4193f2aa968264881
MonoImporter: MonoImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 2 serializedVersion: 2

View File

@ -18,9 +18,6 @@ namespace DG.Tweening
/// </summary> /// </summary>
public static class DOTweenModuleUnityVersion public static class DOTweenModuleUnityVersion
{ {
#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1_OR_NEWER
#region Unity 4.3 or Newer
#region Material #region Material
/// <summary>Tweens a Material's color using the given gradient /// <summary>Tweens a Material's color using the given gradient
@ -74,12 +71,6 @@ namespace DG.Tweening
#endregion #endregion
#endregion
#endif
#if UNITY_5_3_OR_NEWER || UNITY_2017_1_OR_NEWER
#region Unity 5.3 or Newer
#region CustomYieldInstructions #region CustomYieldInstructions
/// <summary> /// <summary>
@ -172,9 +163,6 @@ namespace DG.Tweening
#endregion #endregion
#endregion
#endif
#if UNITY_2018_1_OR_NEWER #if UNITY_2018_1_OR_NEWER
#region Unity 2018.1 or Newer #region Unity 2018.1 or Newer
@ -320,7 +308,6 @@ namespace DG.Tweening
// ███ CLASSES █████████████████████████████████████████████████████████████████████████████████████████████████████████ // ███ CLASSES █████████████████████████████████████████████████████████████████████████████████████████████████████████
// █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
#if UNITY_5_3_OR_NEWER || UNITY_2017_1_OR_NEWER
public static class DOTweenCYInstruction public static class DOTweenCYInstruction
{ {
public class WaitForCompletion : CustomYieldInstruction public class WaitForCompletion : CustomYieldInstruction
@ -399,5 +386,4 @@ namespace DG.Tweening
} }
} }
} }
#endif
} }

View File

@ -1,11 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: f3b5c12e7cad64c42bf1b4d1e129d093 guid: 63c02322328255542995bd02b47b0457
MonoImporter: MonoImporter:
externalObjects: {}
serializedVersion: 2 serializedVersion: 2
defaultReferences: [] defaultReferences: []
executionOrder: 0 executionOrder: 0
icon: {instanceID: 0} icon: {instanceID: 0}
userData: userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,4 +1,4 @@
// Author: Daniele Giardini - http://www.demigiant.com // Author: Daniele Giardini - http://www.demigiant.com
// Created: 2018/07/13 // Created: 2018/07/13
using System; using System;
@ -12,7 +12,7 @@ using DG.Tweening.Plugins.Options;
namespace DG.Tweening namespace DG.Tweening
{ {
/// <summary> /// <summary>
/// Utility functions that deal with available Modules. /// Utility functions that deal with available Modules and rewrite them.
/// Modules defines: /// Modules defines:
/// - DOTAUDIO /// - DOTAUDIO
/// - DOTPHYSICS /// - DOTPHYSICS
@ -25,13 +25,16 @@ namespace DG.Tweening
/// </summary> /// </summary>
public static class DOTweenModuleUtils public static class DOTweenModuleUtils
{ {
#pragma warning disable UDR0001
static bool _initialized; static bool _initialized;
#pragma warning restore UDR0001
#region Reflection #region Reflection
/// <summary> /// <summary>
/// Called via Reflection by DOTweenComponent on Awake /// Called via Reflection by DOTweenComponent on Awake
/// </summary> /// </summary>
#pragma warning disable UDR0001
#if UNITY_2018_1_OR_NEWER #if UNITY_2018_1_OR_NEWER
[UnityEngine.Scripting.Preserve] [UnityEngine.Scripting.Preserve]
#endif #endif
@ -40,16 +43,20 @@ namespace DG.Tweening
if (_initialized) return; if (_initialized) return;
_initialized = true; _initialized = true;
DOTweenExternalCommand.SetOrientationOnPath -= Physics.SetOrientationOnPath;
DOTweenExternalCommand.SetOrientationOnPath += Physics.SetOrientationOnPath; DOTweenExternalCommand.SetOrientationOnPath += Physics.SetOrientationOnPath;
#if UNITY_EDITOR #if UNITY_EDITOR
#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1 #if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1
UnityEditor.EditorApplication.playmodeStateChanged -= PlaymodeStateChanged;
UnityEditor.EditorApplication.playmodeStateChanged += PlaymodeStateChanged; UnityEditor.EditorApplication.playmodeStateChanged += PlaymodeStateChanged;
#else #else
UnityEditor.EditorApplication.playModeStateChanged -= PlaymodeStateChanged;
UnityEditor.EditorApplication.playModeStateChanged += PlaymodeStateChanged; UnityEditor.EditorApplication.playModeStateChanged += PlaymodeStateChanged;
#endif #endif
#endif #endif
} }
#pragma warning restore UDR0001
#if UNITY_2018_1_OR_NEWER #if UNITY_2018_1_OR_NEWER
#pragma warning disable #pragma warning disable
@ -87,7 +94,7 @@ namespace DG.Tweening
// Called via DOTweenExternalCommand callback // Called via DOTweenExternalCommand callback
public static void SetOrientationOnPath(PathOptions options, Tween t, Quaternion newRot, Transform trans) public static void SetOrientationOnPath(PathOptions options, Tween t, Quaternion newRot, Transform trans)
{ {
#if false // PHYSICS_MARKER #if !DOTWEEN_NOPHYSICS // PHYSICS_MARKER
if (options.isRigidbody) ((Rigidbody)t.target).rotation = newRot; if (options.isRigidbody) ((Rigidbody)t.target).rotation = newRot;
else trans.rotation = newRot; else trans.rotation = newRot;
#else #else
@ -98,7 +105,7 @@ namespace DG.Tweening
// Returns FALSE if the DOTween's Physics2D Module is disabled, or if there's no Rigidbody2D attached // Returns FALSE if the DOTween's Physics2D Module is disabled, or if there's no Rigidbody2D attached
public static bool HasRigidbody2D(Component target) public static bool HasRigidbody2D(Component target)
{ {
#if false // PHYSICS2D_MARKER #if !DOTWEEN_NOPHYSICS2D // PHYSICS2D_MARKER
return target.GetComponent<Rigidbody2D>() != null; return target.GetComponent<Rigidbody2D>() != null;
#else #else
return false; return false;
@ -115,7 +122,7 @@ namespace DG.Tweening
#endif #endif
public static bool HasRigidbody(Component target) public static bool HasRigidbody(Component target)
{ {
#if false // PHYSICS_MARKER #if !DOTWEEN_NOPHYSICS // PHYSICS_MARKER
return target.GetComponent<Rigidbody>() != null; return target.GetComponent<Rigidbody>() != null;
#else #else
return false; return false;
@ -131,7 +138,7 @@ namespace DG.Tweening
){ ){
TweenerCore<Vector3, Path, PathOptions> t = null; TweenerCore<Vector3, Path, PathOptions> t = null;
bool rBodyFoundAndTweened = false; bool rBodyFoundAndTweened = false;
#if false // PHYSICS_MARKER #if !DOTWEEN_NOPHYSICS // PHYSICS_MARKER
if (tweenRigidbody) { if (tweenRigidbody) {
Rigidbody rBody = target.GetComponent<Rigidbody>(); Rigidbody rBody = target.GetComponent<Rigidbody>();
if (rBody != null) { if (rBody != null) {
@ -142,7 +149,7 @@ namespace DG.Tweening
} }
} }
#endif #endif
#if false // PHYSICS2D_MARKER #if !DOTWEEN_NOPHYSICS2D // PHYSICS2D_MARKER
if (!rBodyFoundAndTweened && tweenRigidbody) { if (!rBodyFoundAndTweened && tweenRigidbody) {
Rigidbody2D rBody2D = target.GetComponent<Rigidbody2D>(); Rigidbody2D rBody2D = target.GetComponent<Rigidbody2D>();
if (rBody2D != null) { if (rBody2D != null) {

View File

@ -1,11 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: a4aa6727737229b4391ced2aef935944 guid: 7bcaf917d9cf5b84090421a5a2abe42e
MonoImporter: MonoImporter:
externalObjects: {}
serializedVersion: 2 serializedVersion: 2
defaultReferences: [] defaultReferences: []
executionOrder: 0 executionOrder: 0
icon: {instanceID: 0} icon: {instanceID: 0}
userData: userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,15 +1,17 @@
DOTween and DOTween Pro are copyright (c) 2014-2018 Daniele Giardini - Demigiant DOTween and DOTween Pro are copyright (c) 2014-2026 Daniele Giardini - Demigiant
// IMPORTANT!!! ///////////////////////////////////////////// // IMPORTANT!!! /////////////////////////////////////////////
// Upgrading DOTween from versions older than 1.2.000 /////// // Upgrading DOTween from versions older than 1.2.815 ///////
// (or DOTween Pro older than 1.0.000) ////////////////////// // or DOTween Pro older than 1.0.405 ////////////////////////
// (February 6 2026) ////////////////////////////////////////
------------------------------------------------------------- -------------------------------------------------------------
If you're upgrading your project from a version of DOTween older than 1.2.000 (or DOTween Pro older than 1.0.000) please follow these instructions carefully. 1) Import the new version in the same folder as the previous one (Plugins/Demigiant), overwriting old files. A lot of errors will appear but don't worry.
1) Import the new version in the same folder as the previous one, overwriting old files. A lot of errors will appear but don't worry 2) Close and reopen Unity (and your project) without entering safe mode. This is fundamental: skipping this step will cause a bloodbath
2) Close and reopen Unity (and your project). This is fundamental: skipping this step will cause a bloodbath
3) Open DOTween's Utility Panel (Tools > Demigiant > DOTween Utility Panel) if it doesn't open automatically, then press "Setup DOTween...": this will run the upgrade setup 3) Open DOTween's Utility Panel (Tools > Demigiant > DOTween Utility Panel) if it doesn't open automatically, then press "Setup DOTween...": this will run the upgrade setup
4) From the Add/Remove Modules panel that opens, activate/deactivate Modules for Unity systems and for external assets (Pro version only) 4) From the Add/Remove Modules panel that opens, activate/deactivate Modules for Unity systems and for external assets (Pro version only)
// GET STARTED ////////////////////////////////////////////// // GET STARTED //////////////////////////////////////////////
- After importing a new DOTween update, select DOTween's Utility Panel from the "Tools/Demigiant" menu (if it doesn't open automatically) and press the "Setup DOTween..." button to activate/deactivate Modules. You can also access a Preferences Tab from there to choose default settings for DOTween. - After importing a new DOTween update, select DOTween's Utility Panel from the "Tools/Demigiant" menu (if it doesn't open automatically) and press the "Setup DOTween..." button to activate/deactivate Modules. You can also access a Preferences Tab from there to choose default settings for DOTween.
@ -21,8 +23,8 @@ If you're upgrading your project from a version of DOTween older than 1.2.000 (o
DOTween website (documentation, examples, etc): http://dotween.demigiant.com DOTween website (documentation, examples, etc): http://dotween.demigiant.com
DOTween license: http://dotween.demigiant.com/license.php DOTween license: http://dotween.demigiant.com/license.php
DOTween repository (Google Code): https://code.google.com/p/dotween/ DOTween repository (GitHub): https://github.com/Demigiant/dotween
Demigiant website (documentation, examples, etc): http://www.demigiant.com Demigiant website: http://www.demigiant.com
// NOTES ////////////////////////////////////////////////////// // NOTES //////////////////////////////////////////////////////

View File

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: fccfc62abf2eb0a4db614853430894fd
TextScriptImporter:
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 62fa846b7e1a1c748a8b980198eb83d6 guid: 5ceb9286af053154686bd93085f8d8c4
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}

View File

@ -0,0 +1,35 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!200 &-508766772799334342
ShaderVariantCollection:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: ShaderVariants
m_Shaders: {}
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7d43f626d9b5f4d729097092ded48bdb, type: 3}
m_Name: UIEffectProjectSettings
m_EditorClassIdentifier:
m_PreLoadSettingsInBuild: 1
m_RuntimePresets: []
m_RuntimePresetsV2: []
m_UseHDRColorPicker: 1
m_ShaderVariantCollection: {fileID: 0}
m_ShaderVariantRegistry:
m_OptionalShaders:
- key: Hidden/UI/Default (SoftMaskable)
value: Hidden/UI/Default (UIEffect)
m_Asset: {fileID: -508766772799334342}
m_RegisteredShaders: []
m_ErrorOnUnregisteredVariant: 0
m_UnregisteredVariants: []

View File

@ -1,8 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 25b7121e7bb16be42bfa6c11531ddbfb guid: ea0b832004c179d4aa69068be5863671
folderAsset: yes NativeFormatImporter:
DefaultImporter:
externalObjects: {} externalObjects: {}
mainObjectFileID: 11400000
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:

View File

@ -1557,17 +1557,17 @@
{ {
"key": "100312", "key": "100312",
"zh": "密码长度6位,仅允许使用数字字符", "zh": "密码长度6位,仅允许使用数字字符",
"en": "Fixed 6-digit numeric password only." "en": "Fixed 6-digit numeric password only"
}, },
{ {
"key": "100313", "key": "100313",
"zh": "密码长度8-16位,不能有空格;", "zh": "密码长度8-16位,不能有空格",
"en": "8–16 characters, no spaces. " "en": "8–16 characters, no spaces"
}, },
{ {
"key": "100314", "key": "100314",
"zh": "字符格式应至少包括大写字母、小写字母、数字、特殊字符的三种;", "zh": "字符格式应至少包括大写字母、小写字母、数字、特殊字符的三种",
"en": "Include at least 3 types: uppercase, lowercase, digits, special chars. No 3+ consecutive or repeated digits/letters." "en": "Include at least 3 types: uppercase, lowercase, digits, special chars. No 3+ consecutive or repeated digits/letters"
}, },
{ {
"key": "100315", "key": "100315",
@ -1576,8 +1576,8 @@
}, },
{ {
"key": "100316", "key": "100316",
"zh": "密码不能是登录名的一部分。", "zh": "密码不能是登录名的一部分",
"en": "Cannot be part of login name." "en": "Cannot be part of login name"
}, },
{ {
"key": "100317", "key": "100317",
@ -1598,6 +1598,31 @@
"key": "100320", "key": "100320",
"zh": "*仅支持 2.4GHz Wi-Fi", "zh": "*仅支持 2.4GHz Wi-Fi",
"en": "*Only 2.4GHz Wi-Fi is supported" "en": "*Only 2.4GHz Wi-Fi is supported"
},
{
"key": "100321",
"zh": "指纹设置失败,请重试",
"en": "Fingerprint setup failed, please try again"
},
{
"key": "100322",
"zh": "是否录入管理员指纹?",
"en": "Enroll administrator fingerprint?"
},
{
"key": "100323",
"zh": "录入管理员指纹,用于设备激光操作身份校验,保障使用安全,可选择立即录入或稍后配置。",
"en": "Enroll administrator fingerprint for identity verification before laser activation to ensure safety. You can enroll now or set it up later."
},
{
"key": "100324",
"zh": "录入指纹",
"en": "Enroll Fingerprint"
},
{
"key": "100325",
"zh": "请将手指放置于设备指纹识别区域",
"en": "Place your finger on the device fingerprint sensor"
} }

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -1,9 +1,9 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 0d0559d86cf94a941874092ddf151402 guid: 35f0ab632fde13c45bc9625197cf542f
TextureImporter: TextureImporter:
fileIDToRecycleName: {} internalIDToNameTable: []
externalObjects: {} externalObjects: {}
serializedVersion: 9 serializedVersion: 13
mipmaps: mipmaps:
mipMapMode: 0 mipMapMode: 0
enableMipMap: 0 enableMipMap: 0
@ -20,9 +20,12 @@ TextureImporter:
externalNormalMap: 0 externalNormalMap: 0
heightScale: 0.25 heightScale: 0.25
normalMapFilter: 0 normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0 isReadable: 0
streamingMipmaps: 0 streamingMipmaps: 0
streamingMipmapsPriority: 0 streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0 grayScaleToAlpha: 0
generateCubemap: 6 generateCubemap: 6
cubemapConvolution: 0 cubemapConvolution: 0
@ -33,14 +36,14 @@ TextureImporter:
serializedVersion: 2 serializedVersion: 2
filterMode: 1 filterMode: 1
aniso: 1 aniso: 1
mipBias: -100 mipBias: 0
wrapU: 1 wrapU: 1
wrapV: 1 wrapV: 1
wrapW: 1 wrapW: 0
nPOTScale: 0 nPOTScale: 0
lightmap: 0 lightmap: 0
compressionQuality: 50 compressionQuality: 50
spriteMode: 0 spriteMode: 1
spriteExtrude: 1 spriteExtrude: 1
spriteMeshType: 1 spriteMeshType: 1
alignment: 0 alignment: 0
@ -51,16 +54,22 @@ TextureImporter:
alphaUsage: 1 alphaUsage: 1
alphaIsTransparency: 1 alphaIsTransparency: 1
spriteTessellationDetail: -1 spriteTessellationDetail: -1
textureType: 2 textureType: 8
textureShape: 1 textureShape: 1
singleChannelComponent: 0 singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0 maxTextureSizeSet: 0
compressionQualitySet: 0 compressionQualitySet: 0
textureFormatSet: 0 textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings: platformSettings:
- serializedVersion: 2 - serializedVersion: 3
buildTarget: DefaultTexturePlatform buildTarget: DefaultTexturePlatform
maxTextureSize: 512 maxTextureSize: 2048
resizeAlgorithm: 0 resizeAlgorithm: 0
textureFormat: -1 textureFormat: -1
textureCompression: 1 textureCompression: 1
@ -68,21 +77,51 @@ TextureImporter:
crunchedCompression: 0 crunchedCompression: 0
allowsAlphaSplitting: 0 allowsAlphaSplitting: 0
overridden: 0 overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0 androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet: spriteSheet:
serializedVersion: 2 serializedVersion: 2
sprites: [] sprites: []
outline: [] outline: []
physicsShape: [] physicsShape: []
bones: [] bones: []
spriteID: spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: [] vertices: []
indices: indices:
edges: [] edges: []
weights: [] weights: []
spritePackingTag: secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0 pSDRemoveMatte: 0
pSDShowRemoveMatteOption: 0
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:

View File

@ -328,6 +328,127 @@ Animation:
m_PlayAutomatically: 1 m_PlayAutomatically: 1
m_AnimatePhysics: 0 m_AnimatePhysics: 0
m_CullingType: 0 m_CullingType: 0
--- !u!1 &171953994162575302
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3489378129480615911}
- component: {fileID: 4862718890922970527}
- component: {fileID: 2208564748274254691}
- component: {fileID: 8752954411171160172}
m_Layer: 5
m_Name: "\u91CD\u547D\u540D (1)"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &3489378129480615911
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 171953994162575302}
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: 3034658243493595255}
m_Father: {fileID: 7844458031469168773}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 217.5, y: -60}
m_SizeDelta: {x: 145, y: 120}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4862718890922970527
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 171953994162575302}
m_CullTransparentMesh: 1
--- !u!114 &2208564748274254691
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 171953994162575302}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.99215686, g: 0.84705883, b: 0.20784314, 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: 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!114 &8752954411171160172
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 171953994162575302}
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: 2208564748274254691}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!1 &250314515808294985 --- !u!1 &250314515808294985
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -2433,6 +2554,127 @@ MonoBehaviour:
m_FillOrigin: 0 m_FillOrigin: 0
m_UseSpriteMesh: 0 m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1 m_PixelsPerUnitMultiplier: 1
--- !u!1 &1444034278555601323
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 6449828758236541207}
- component: {fileID: 8748907505049847186}
- component: {fileID: 7052275472841761544}
- component: {fileID: 4271389806304974538}
m_Layer: 5
m_Name: "\u91CD\u547D\u540D (2)"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &6449828758236541207
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1444034278555601323}
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: 1629707109178756068}
m_Father: {fileID: 7844458031469168773}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 362.5, y: -60}
m_SizeDelta: {x: 145, y: 120}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8748907505049847186
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1444034278555601323}
m_CullTransparentMesh: 1
--- !u!114 &7052275472841761544
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1444034278555601323}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.1882353, g: 0.9490196, b: 0.8392157, 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: 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!114 &4271389806304974538
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1444034278555601323}
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: 7052275472841761544}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!1 &1485358923400520455 --- !u!1 &1485358923400520455
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -4601,6 +4843,80 @@ Animation:
m_PlayAutomatically: 0 m_PlayAutomatically: 0
m_AnimatePhysics: 0 m_AnimatePhysics: 0
m_CullingType: 0 m_CullingType: 0
--- !u!1 &2188122373689102454
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7844458031469168773}
- component: {fileID: 7326811173079298642}
- component: {fileID: 6877050589658701912}
m_Layer: 5
m_Name: "\u83DC\u5355"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &7844458031469168773
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2188122373689102454}
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: 2566096844079809264}
- {fileID: 3489378129480615911}
- {fileID: 6449828758236541207}
m_Father: {fileID: 3505955939844419362}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 435, y: 0}
m_Pivot: {x: 0, y: 0.5}
--- !u!222 &7326811173079298642
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2188122373689102454}
m_CullTransparentMesh: 1
--- !u!114 &6877050589658701912
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2188122373689102454}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Padding:
m_Left: 0
m_Right: 0
m_Top: 0
m_Bottom: 0
m_ChildAlignment: 3
m_Spacing: 0
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 1
m_ChildControlHeight: 1
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!1 &2275775934727828550 --- !u!1 &2275775934727828550
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -6366,6 +6682,7 @@ GameObject:
- component: {fileID: 7325526453315403031} - component: {fileID: 7325526453315403031}
- component: {fileID: 8538965056443010729} - component: {fileID: 8538965056443010729}
- component: {fileID: 7161548608695394483} - component: {fileID: 7161548608695394483}
- component: {fileID: 5889520335138296328}
m_Layer: 5 m_Layer: 5
m_Name: "\u4E00\u4E2A\u8BBE\u5907" m_Name: "\u4E00\u4E2A\u8BBE\u5907"
m_TagString: Untagged m_TagString: Untagged
@ -6388,6 +6705,8 @@ RectTransform:
- {fileID: 281041426051862978} - {fileID: 281041426051862978}
- {fileID: 1121656133766426305} - {fileID: 1121656133766426305}
- {fileID: 6744263492203110024} - {fileID: 6744263492203110024}
- {fileID: 8021894877957941971}
- {fileID: 7844458031469168773}
m_Father: {fileID: 5019459736209175623} m_Father: {fileID: 5019459736209175623}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1} m_AnchorMin: {x: 0, y: 1}
@ -6447,6 +6766,8 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
deviceNameText: {fileID: 1001116305648498082} deviceNameText: {fileID: 1001116305648498082}
selectedIndicator: {fileID: 1493165828582188157} selectedIndicator: {fileID: 1493165828582188157}
menuRect: {fileID: 7844458031469168773}
blurOverlay: {fileID: 7004732522669765365}
deviceInfo: deviceInfo:
device_sn: device_sn:
ble_mac: ble_mac:
@ -6507,6 +6828,19 @@ MonoBehaviour:
m_OnClick: m_OnClick:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
--- !u!114 &5889520335138296328
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3209549728057504314}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3}
m_Name:
m_EditorClassIdentifier:
m_ShowMaskGraphic: 1
--- !u!1 &3247212730655260364 --- !u!1 &3247212730655260364
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -6833,6 +7167,127 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
textKey: 100095 textKey: 100095
--- !u!1 &3403368306910610790
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2566096844079809264}
- component: {fileID: 1506127987468939619}
- component: {fileID: 8708873921363957785}
- component: {fileID: 4535161468894169287}
m_Layer: 5
m_Name: "\u91CD\u547D\u540D"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &2566096844079809264
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3403368306910610790}
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: 2612579731749496019}
m_Father: {fileID: 7844458031469168773}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 72.5, y: -60}
m_SizeDelta: {x: 145, y: 120}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &1506127987468939619
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3403368306910610790}
m_CullTransparentMesh: 1
--- !u!114 &8708873921363957785
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3403368306910610790}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 0.20392157, g: 0.56078434, b: 0.98039216, 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: 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!114 &4535161468894169287
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3403368306910610790}
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: 8708873921363957785}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!1 &3433929351811658191 --- !u!1 &3433929351811658191
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -8849,6 +9304,85 @@ MonoBehaviour:
m_VerticalOverflow: 0 m_VerticalOverflow: 0
m_LineSpacing: 1 m_LineSpacing: 1
m_Text: m_Text:
--- !u!1 &4624978287598515970
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3034658243493595255}
- component: {fileID: 2556545737450132359}
- component: {fileID: 6066547719913138627}
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 &3034658243493595255
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4624978287598515970}
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: 3489378129480615911}
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!222 &2556545737450132359
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4624978287598515970}
m_CullTransparentMesh: 1
--- !u!114 &6066547719913138627
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4624978287598515970}
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: 14
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 10
m_MaxSize: 40
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: Button
--- !u!1 &4658765528600517200 --- !u!1 &4658765528600517200
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -13662,6 +14196,81 @@ MonoBehaviour:
m_VerticalOverflow: 0 m_VerticalOverflow: 0
m_LineSpacing: 1 m_LineSpacing: 1
m_Text: 11 m_Text: 11
--- !u!1 &7004732522669765365
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 8021894877957941971}
- component: {fileID: 952256989176536870}
- component: {fileID: 4796557333022528008}
m_Layer: 5
m_Name: "\u6A21\u7CCA"
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &8021894877957941971
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7004732522669765365}
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: 3505955939844419362}
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: -20, y: -20}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &952256989176536870
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7004732522669765365}
m_CullTransparentMesh: 1
--- !u!114 &4796557333022528008
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7004732522669765365}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 2100000, guid: ad4e927583771f942a15cc89421a14de, type: 2}
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: 0}
m_Type: 0
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!1 &7013607108523781923 --- !u!1 &7013607108523781923
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -15275,6 +15884,7 @@ MonoBehaviour:
scheduleSettingPrefab: {fileID: 3216739529495113389, guid: 9eb86459bbba39a4cac2c0965ef4df86, scheduleSettingPrefab: {fileID: 3216739529495113389, guid: 9eb86459bbba39a4cac2c0965ef4df86,
type: 3} type: 3}
LockButtonPlane: {fileID: 2474256133367177989} LockButtonPlane: {fileID: 2474256133367177989}
lockTime: 180
fovSettingPagePrefab: {fileID: 3146413254774730820, guid: 7160c2ae423fa6248b722bcd3e613840, fovSettingPagePrefab: {fileID: 3146413254774730820, guid: 7160c2ae423fa6248b722bcd3e613840,
type: 3} type: 3}
lensSettingPagePrefab: {fileID: 1580085518831563756, guid: f978cd075181e024289b864203cbedb3, lensSettingPagePrefab: {fileID: 1580085518831563756, guid: f978cd075181e024289b864203cbedb3,
@ -15597,6 +16207,85 @@ MonoBehaviour:
m_FillOrigin: 0 m_FillOrigin: 0
m_UseSpriteMesh: 0 m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1 m_PixelsPerUnitMultiplier: 1
--- !u!1 &8249454294079289629
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1629707109178756068}
- component: {fileID: 2253659600553536467}
- component: {fileID: 2760649281791556771}
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 &1629707109178756068
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8249454294079289629}
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: 6449828758236541207}
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!222 &2253659600553536467
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8249454294079289629}
m_CullTransparentMesh: 1
--- !u!114 &2760649281791556771
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8249454294079289629}
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: 14
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 10
m_MaxSize: 40
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: Button
--- !u!1 &8250217249879649147 --- !u!1 &8250217249879649147
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -15940,7 +16629,7 @@ MonoBehaviour:
m_HorizontalOverflow: 0 m_HorizontalOverflow: 0
m_VerticalOverflow: 0 m_VerticalOverflow: 0
m_LineSpacing: 1.5 m_LineSpacing: 1.5
m_Text: m_Text: "\u6556\u5FB7\u8428\u6240"
--- !u!1 &8446979383493435888 --- !u!1 &8446979383493435888
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -16723,6 +17412,85 @@ MonoBehaviour:
m_VerticalOverflow: 0 m_VerticalOverflow: 0
m_LineSpacing: 1 m_LineSpacing: 1
m_Text: m_Text:
--- !u!1 &8730720298267373558
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2612579731749496019}
- component: {fileID: 4518180440094572115}
- component: {fileID: 3163527768836703469}
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 &2612579731749496019
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8730720298267373558}
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: 2566096844079809264}
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!222 &4518180440094572115
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8730720298267373558}
m_CullTransparentMesh: 1
--- !u!114 &3163527768836703469
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8730720298267373558}
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: 14
m_FontStyle: 0
m_BestFit: 0
m_MinSize: 10
m_MaxSize: 40
m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: Button
--- !u!1 &8730867197378039218 --- !u!1 &8730867197378039218
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@ -0,0 +1,32 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: "\u83DC\u5355\u6A21\u7CCA"
m_Shader: {fileID: 4800000, guid: 2777693b621900141a534bddd40419ef, type: 3}
m_Parent: {fileID: 2100000, guid: c786c0858e367bb4da40240548178384, type: 2}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs: []
m_Ints: []
m_Floats:
- _BumpAmt: 0
- _Size: 1.5
m_Colors:
- _Color: {r: 1, g: 1, b: 1, a: 0.972549}
m_BuildTextureStacks: []

View File

@ -1,7 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: b7cce7e08800ec54e8011b271e66fedf guid: ad4e927583771f942a15cc89421a14de
TextScriptImporter: NativeFormatImporter:
externalObjects: {} externalObjects: {}
mainObjectFileID: 2100000
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:

View File

@ -0,0 +1,55 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 16995157, guid: a811bde74b26b53498b4f6d872b09b6d, type: 3}
m_Name: DOTweenSettings
m_EditorClassIdentifier:
useSafeMode: 1
safeModeOptions:
logBehaviour: 2
nestedTweenFailureBehaviour: 0
timeScale: 1
unscaledTimeScale: 1
useSmoothDeltaTime: 0
maxSmoothUnscaledTime: 0.15
rewindCallbackMode: 0
showUnityEditorReport: 0
logBehaviour: 0
drawGizmos: 1
defaultRecyclable: 0
defaultAutoPlay: 3
defaultUpdateType: 0
defaultTimeScaleIndependent: 0
defaultEaseType: 1
defaultEaseOvershootOrAmplitude: 1.70158
defaultEasePeriod: 0
defaultAutoKill: 1
defaultLoopType: 0
debugMode: 0
debugStoreTargetId: 1
showPreviewPanel: 1
storeSettingsLocation: 0
modules:
showPanel: 0
audioEnabled: 0
physicsEnabled: 0
physics2DEnabled: 0
spriteEnabled: 1
uiEnabled: 1
uiToolkitEnabled: 1
textMeshProEnabled: 0
tk2DEnabled: 0
deAudioEnabled: 0
deUnityExtendedEnabled: 0
epoOutlineEnabled: 0
createASMDEF: 0
showPlayingTweens: 0
showPausedTweens: 0

View File

@ -1,7 +1,8 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: f69ace246b9638e4396e38db67cd404a guid: 51a410f15d34f2441a8f942260652d08
TextScriptImporter: NativeFormatImporter:
externalObjects: {} externalObjects: {}
mainObjectFileID: 11400000
userData: userData:
assetBundleName: assetBundleName:
assetBundleVariant: assetBundleVariant:

View File

@ -449,7 +449,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 05b49f3efc06bd84b91275be192861eb, type: 3} m_Script: {fileID: 11500000, guid: 05b49f3efc06bd84b91275be192861eb, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
resPosition: 2 resPosition: 1
commonList: commonList:
- common - common
- ui_common - ui_common

View File

@ -13,13 +13,30 @@ namespace Kill.Bluetooth
[Serializable] [Serializable]
public class OTAVersionInfo public class OTAVersionInfo
{ {
public uint FirmwareVersion; // 固件版本 (4字节) public uint FirmwareVersion; // 固件版本 (4字节,按每段2位十进制压缩)
public uint HardwareVersion; // 硬件版本 (4字节) public uint HardwareVersion; // 硬件版本 (4字节,按每段2位十进制压缩)
public uint OTAVersion; // OTA版本 (4字节) public uint OTAVersion; // OTA版本 (4字节,按每段2位十进制压缩)
/// <summary>
/// 将版本号转换为 x.x.x.x 格式字符串
/// 版本号按每段2位十进制压缩存储(如 00.00.01.05 -> 105)
/// </summary>
private static string GetVersionString(uint version)
{
int v1 = (int)(version / 1000000) % 100;
int v2 = (int)(version / 10000) % 100;
int v3 = (int)(version / 100) % 100;
int v4 = (int)(version % 100);
return $"{v1:D2}.{v2:D2}.{v3:D2}.{v4:D2}";
}
public string GetFirmwareVersionString() => GetVersionString(FirmwareVersion);
public string GetHardwareVersionString() => GetVersionString(HardwareVersion);
public string GetOtaVersionString() => GetVersionString(OTAVersion);
public override string ToString() public override string ToString()
{ {
return $"固件版本: {FirmwareVersion}, 硬件版本: {HardwareVersion}, OTA版本: {OTAVersion}"; return $"固件版本: {GetFirmwareVersionString()}, 硬件版本: {GetHardwareVersionString()}, OTA版本: {GetOtaVersionString()}";
} }
} }

View File

@ -1943,14 +1943,15 @@ namespace Kill.Bluetooth.Protocol
/// <summary> /// <summary>
/// 将版本号转换为 x.x.x.x 格式字符串 /// 将版本号转换为 x.x.x.x 格式字符串
/// 版本号按每段2位十进制压缩存储(如 00.00.01.05 -> 105)
/// </summary> /// </summary>
private string GetVersionString(uint version) private string GetVersionString(uint version)
{ {
byte v1 = (byte)((version >> 24) & 0xFF); int v1 = (int)(version / 1000000) % 100;
byte v2 = (byte)((version >> 16) & 0xFF); int v2 = (int)(version / 10000) % 100;
byte v3 = (byte)((version >> 8) & 0xFF); int v3 = (int)(version / 100) % 100;
byte v4 = (byte)(version & 0xFF); int v4 = (int)(version % 100);
return $"{v1}.{v2}.{v3}.{v4}"; return $"{v1:D2}.{v2:D2}.{v3:D2}.{v4:D2}";
} }
public string GetFirmwareVersionString() => GetVersionString(FirmwareVersion); public string GetFirmwareVersionString() => GetVersionString(FirmwareVersion);

View File

@ -0,0 +1,157 @@
using System;
using System.Collections.Generic;
using DG.Tweening;
using UnityEngine;
/// <summary>
/// 可视化UI动画组件:以步骤列表驱动DOTween播放
/// 支持 位移/缩放/旋转/透明度 四类动画,正向/反向/停止
/// 配合 UIAnimatorInspector 可在 Inspector 中可视化编排并预览
/// </summary>
public class UIAnimator : MonoBehaviour
{
public enum UIAnimationType
{
Move, // 位移(相对偏移)
Scale, // 缩放(目标值)
Rotate, // 旋转(目标角度,绕Z轴)
Alpha // 透明度(目标值,需CanvasGroup)
}
[Serializable]
public class UIAnimationStep
{
[Tooltip("动画类型")] public UIAnimationType type = UIAnimationType.Move;
[Tooltip("步骤开始前的延迟(秒)")] public float delay;
[Tooltip("动画时长(秒)")] public float duration = 0.5f;
[Tooltip("缓动曲线")] public Ease ease = Ease.OutQuad;
[Tooltip("位移偏移量(相对当前位置)")] public Vector3 moveOffset = Vector3.zero;
[Tooltip("缩放目标值")] public Vector3 targetScale = Vector3.one;
[Tooltip("旋转目标角度(绕Z轴)")] public float targetRotation;
[Tooltip("透明度目标值(0-1)")] public float targetAlpha = 1f;
}
[Tooltip("动画步骤列表")] public List<UIAnimationStep> steps = new List<UIAnimationStep>();
[Tooltip("启动时自动播放")] public bool playOnAwake;
[Tooltip("无CanvasGroup时自动添加(Alpha动画需要)")] public bool autoAddCanvasGroup = true;
private RectTransform rectTransform;
private CanvasGroup canvasGroup;
private Sequence sequence;
// 初始状态缓存(反向播放与编辑器预览需要)
public Vector3 InitialAnchoredPosition3D { get; private set; }
public Vector3 InitialLocalScale { get; private set; }
public float InitialRotationZ { get; private set; }
public float InitialAlpha { get; private set; }
public RectTransform RectTransform => rectTransform;
public CanvasGroup CanvasGroup => canvasGroup;
/// <summary>动画总时长(所有步骤的 延迟+时长 之和)</summary>
public float TotalDuration
{
get
{
float total = 0;
if (steps != null)
foreach (var step in steps) total += step.delay + step.duration;
return total;
}
}
private void Awake()
{
rectTransform = GetComponent<RectTransform>();
canvasGroup = GetComponent<CanvasGroup>();
if (canvasGroup == null && autoAddCanvasGroup)
canvasGroup = gameObject.AddComponent<CanvasGroup>();
SaveInitialState();
if (playOnAwake) Play();
}
/// <summary>记录当前状态为初始状态(反向播放/预览的基准)</summary>
public void SaveInitialState()
{
if (rectTransform == null) rectTransform = GetComponent<RectTransform>();
if (canvasGroup == null) canvasGroup = GetComponent<CanvasGroup>();
if (rectTransform == null) return;
InitialAnchoredPosition3D = rectTransform.anchoredPosition3D;
InitialLocalScale = rectTransform.localScale;
InitialRotationZ = rectTransform.localEulerAngles.z;
InitialAlpha = canvasGroup != null ? canvasGroup.alpha : 1f;
}
/// <summary>正向播放</summary>
public void Play() => PlaySequence(false);
/// <summary>反向播放(从当前状态回到初始状态)</summary>
public void PlayReverse() => PlaySequence(true);
/// <summary>停止并保持当前状态</summary>
public void Stop()
{
sequence?.Kill();
sequence = null;
}
private void PlaySequence(bool reverse)
{
sequence?.Kill();
sequence = reverse ? CreateReverseSequence() : CreateForwardSequence();
if (sequence == null) return;
sequence.Play();
}
private Sequence CreateForwardSequence()
{
if (rectTransform == null || steps == null || steps.Count == 0) return null;
Sequence seq = DOTween.Sequence();
foreach (var step in steps)
{
Tween t = CreateStepTween(step, false);
if (t == null) continue;
if (step.delay > 0) t.SetDelay(step.delay);
seq.Append(t);
}
return seq;
}
private Sequence CreateReverseSequence()
{
if (rectTransform == null || steps == null || steps.Count == 0) return null;
Sequence seq = DOTween.Sequence();
for (int i = steps.Count - 1; i >= 0; i--)
{
Tween t = CreateStepTween(steps[i], true);
if (t == null) continue;
if (steps[i].delay > 0) t.SetDelay(steps[i].delay);
seq.Append(t);
}
return seq;
}
private Tween CreateStepTween(UIAnimationStep step, bool reverse)
{
switch (step.type)
{
case UIAnimationType.Move:
// 反向时位移取负偏移(回到初始位置)
return rectTransform.DOAnchorPos3D(reverse ? -step.moveOffset : step.moveOffset, step.duration)
.SetRelative().SetEase(step.ease);
case UIAnimationType.Scale:
return rectTransform.DOScale(reverse ? InitialLocalScale : step.targetScale, step.duration).SetEase(step.ease);
case UIAnimationType.Rotate:
return rectTransform.DOLocalRotate(
new Vector3(0, 0, reverse ? InitialRotationZ : step.targetRotation), step.duration).SetEase(step.ease);
case UIAnimationType.Alpha:
if (canvasGroup == null)
{
Debug.LogWarning("[UIAnimator] Alpha动画需要CanvasGroup,请手动添加或开启autoAddCanvasGroup", this);
return null;
}
return canvasGroup.DOFade(reverse ? InitialAlpha : step.targetAlpha, step.duration).SetEase(step.ease);
}
return null;
}
}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: 1ad21c51b7dd87e4f87bf4232cc27c1e guid: f8717e0ed7e8e204da8aff7575d2dcf5
MonoImporter: MonoImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 2 serializedVersion: 2

View File

@ -4499,7 +4499,7 @@ namespace Kill.UI.Pages
{ {
if (info != null) if (info != null)
{ {
UpdateStatus($"OTA版本: 固件={info.FirmwareVersion}, 硬件={info.HardwareVersion}"); UpdateStatus($"OTA版本: 固件={info.GetFirmwareVersionString()}, 硬件={info.GetHardwareVersionString()}");
Log($"OTA版本信息: {info}"); Log($"OTA版本信息: {info}");
} }
else else
@ -4822,12 +4822,16 @@ namespace Kill.UI.Pages
string[] parts = versionStr.Split('.'); string[] parts = versionStr.Split('.');
if (parts.Length >= 3 && if (parts.Length >= 3 &&
uint.TryParse(parts[0], out uint major) && uint.TryParse(parts[0], out uint v0) &&
uint.TryParse(parts[1], out uint minor) && uint.TryParse(parts[1], out uint v1) &&
uint.TryParse(parts[2], out uint patch)) uint.TryParse(parts[2], out uint v2))
{ {
// 版本号格式:主版本.次版本.修订号 -> 32位整数 // 版本号格式:主版本.次版本.修订号(可含第4段)
return (major << 16) | (minor << 8) | patch; // 按每段2位十进制压缩,与设备端编码一致(如 00.00.01.05 -> 105)
uint v3 = 0;
if (parts.Length >= 4)
uint.TryParse(parts[3], out v3);
return v0 * 1000000 + v1 * 10000 + v2 * 100 + v3;
} }
} }
} }
@ -4876,7 +4880,7 @@ namespace Kill.UI.Pages
{ {
if (OTAInfoText != null) if (OTAInfoText != null)
{ {
OTAInfoText.text = $"=== 设备版本信息 ===\n固件版本: {info.FirmwareVersion}\n硬件版本: {info.HardwareVersion}\nOTA版本: {info.OTAVersion}"; OTAInfoText.text = $"=== 设备版本信息 ===\n固件版本: {info.GetFirmwareVersionString()}\n硬件版本: {info.GetHardwareVersionString()}\nOTA版本: {info.GetOtaVersionString()}";
} }
} }

View File

@ -2,6 +2,7 @@ using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using System.Threading.Tasks;
using Kill.Bluetooth; using Kill.Bluetooth;
using Kill.Core; using Kill.Core;
using Kill.Managers; using Kill.Managers;
@ -16,16 +17,19 @@ using UnityEngine.UI;
public class ConnectDevicePageCtrl : MonoBehaviour public class ConnectDevicePageCtrl : MonoBehaviour
{ {
/// <summary> /// <summary>
/// 0连接 1 失败 2 成功 3 选择wifi /// 0连接 1 失败 2 成功 3 选择wifi 4 指纹初始化
/// </summary> /// </summary>
public GameObject[] sonPages; public GameObject[] sonPages;
public GameObject topBar;
public string blueToothNameKeyWord; public string blueToothNameKeyWord;
private List<BluetoothDevice> deviceList = new List<BluetoothDevice>(); private List<BluetoothDevice> deviceList = new List<BluetoothDevice>();
public Button backButton;
public Button skipButton;
public GameObject titleText;
public GameObject scanningIcon; public GameObject scanningIcon;
/// <summary>设置指纹按钮</summary>
public Button fingerprintSetupButton;
/// <summary>跳过按钮</summary>
public Button fingerprintSkipButton;
/// <summary>引导录入指纹的提示框(用户制作,默认隐藏,设置指纹成功后显示)</summary>
public GameObject fingerInitTip;
void Start() void Start()
{ {
BluetoothManager.Instance.OnDeviceFound += OnDeviceFound; BluetoothManager.Instance.OnDeviceFound += OnDeviceFound;
@ -55,12 +59,6 @@ public class ConnectDevicePageCtrl : MonoBehaviour
} }
OnStopScanClick(); OnStopScanClick();
BluetoothManager.Instance.ChangeAimMac(""); BluetoothManager.Instance.ChangeAimMac("");
topBar.SetActive(true);
titleText.SetActive(false);
backButton.onClick.RemoveAllListeners();
backButton.onClick.AddListener(BackToHomePage);
backButton.gameObject.SetActive(true);
skipButton.gameObject.SetActive(false);
foreach(GameObject g in sonPages) foreach(GameObject g in sonPages)
g.gameObject.SetActive(false); g.gameObject.SetActive(false);
sonPages[0].SetActive(true); sonPages[0].SetActive(true);
@ -124,7 +122,6 @@ public class ConnectDevicePageCtrl : MonoBehaviour
{ {
BluetoothManager.Instance.Disconnect(); BluetoothManager.Instance.Disconnect();
} }
topBar.SetActive(false);
foreach(GameObject g in sonPages) foreach(GameObject g in sonPages)
g.gameObject.SetActive(false); g.gameObject.SetActive(false);
sonPages[1].SetActive(true); sonPages[1].SetActive(true);
@ -145,11 +142,8 @@ public class ConnectDevicePageCtrl : MonoBehaviour
public void ShowWifiPage() public void ShowWifiPage()
{ {
topBar.SetActive(true); //无法返回设备注册流程,清空返回操作
titleText.SetActive(true);
backButton.gameObject.SetActive(false);
UIManager.Instance.ClearBackAction(); UIManager.Instance.ClearBackAction();
skipButton.gameObject.SetActive(true);
foreach(GameObject g in sonPages) foreach(GameObject g in sonPages)
g.gameObject.SetActive(false); g.gameObject.SetActive(false);
sonPages[3].SetActive(true); sonPages[3].SetActive(true);
@ -170,7 +164,7 @@ public class ConnectDevicePageCtrl : MonoBehaviour
wifiNameInput.text = wifiName ?? ""; wifiNameInput.text = wifiName ?? "";
#endif #endif
wifiPasswordInput.text=""; wifiPasswordInput.text="";
UIManager.Instance.ClearBackAction();
} }
@ -211,7 +205,7 @@ public class ConnectDevicePageCtrl : MonoBehaviour
DataManager.Instance.deviceConfig.wifi_ssid = ssid; DataManager.Instance.deviceConfig.wifi_ssid = ssid;
DataManager.Instance.deviceConfig.wifi_password = password; DataManager.Instance.deviceConfig.wifi_password = password;
DataManager.Instance.SyncDeviceConfigToServer(); DataManager.Instance.SyncDeviceConfigToServer();
ShowSuccessPage(); ShowFingerprintPage();
} }
else else
{ {
@ -309,11 +303,10 @@ public class ConnectDevicePageCtrl : MonoBehaviour
#endif #endif
public void ShowSuccessPage() public void ShowSuccessPage()
{ {
topBar.SetActive(false);
foreach(GameObject g in sonPages) foreach(GameObject g in sonPages)
g.gameObject.SetActive(false); g.gameObject.SetActive(false);
sonPages[2].SetActive(true); sonPages[2].SetActive(true);
UIManager.Instance.RegisterBackAction(EnterConnectPage); UIManager.Instance.RegisterBackAction(BackToHomePage);
} }
private void OnDeviceFound(BluetoothDevice device) private void OnDeviceFound(BluetoothDevice device)
{ {
@ -352,7 +345,7 @@ public class ConnectDevicePageCtrl : MonoBehaviour
{ {
yield return new WaitForSeconds(0.5f); yield return new WaitForSeconds(0.5f);
//OnQueryRegistrationClick(); //OnQueryRegistrationClick();
BandDevice(); OnRegisterDeviceClick();
} }
private void OnConnectFailed(string address) private void OnConnectFailed(string address)
@ -467,7 +460,7 @@ public class ConnectDevicePageCtrl : MonoBehaviour
} }
else else
{ {
BandDevice(); OnRegisterDeviceClick();
} }
} }
else else
@ -485,28 +478,183 @@ public class ConnectDevicePageCtrl : MonoBehaviour
{ {
string username = DataManager.Instance.userInfo.id; string username = DataManager.Instance.userInfo.id;
BLECommunicationManager.Instance.RegisterDevice(username, (success, message) => BLECommunicationManager.Instance.RegisterDevice(username, (success, message) =>
{ {
Loom.QueueOnMainThread(() => Loom.QueueOnMainThread(() =>
{
if (success)
{ {
LoadingUI.Hide(); LoadingUI.Hide();
ShowWifiPage(); // 蓝牙注册成功后,再调用服务器绑定接口
DataManager.Instance.SavaSelectedDeviceMac(nowDeviceMac); BandDevice();
// if (success) }
// { else
// ShowWifiPage(); {
// DataManager.Instance.SavaSelectedDeviceMac(nowDeviceMac); // 固件bug规避:恢复出厂后注册状态仍为已注册,0x02注册会失败,
// } // 导致无法设置指纹;改用0x03用户登录流程
// else Debug.Log($"设备注册失败: {message},尝试用户登录(0x03)");
// { TryUserLoginAfterRegisterFailed(username);
// errorTip = "100070"; }
// ShowErrorPage();
// }
}); });
}); });
} }
/// <summary>
/// 注册失败后尝试用户登录(0x03),规避固件恢复出厂后注册状态异常的问题
/// </summary>
private void TryUserLoginAfterRegisterFailed(string username)
{
// 连接设备时的Loading仍在显示,无需重复Show,避免计数不平衡导致Loading不消失
BLECommunicationManager.Instance.UserLogin(username, (response) =>
{
Loom.QueueOnMainThread(() =>
{
if (response.IsSuccess)
{
Debug.Log($"用户登录成功,继续设备配置流程: {username}");
LoadingUI.Hide();
// 登录成功后,再调用服务器绑定接口
BandDevice();
}
else
{
Debug.LogError($"设备注册及用户登录均失败: {response.Status}");
LoadingUI.Hide();
errorTip = "100069";
ShowErrorPage();
}
});
});
}
/// <summary>
/// 显示指纹初始化页面(sonPages[4])
/// 注册设备成功后展示,引导用户设置或跳过指纹
/// </summary>
public void ShowFingerprintPage()
{
// 未配置指纹页则直接进入WiFi配置,避免阻塞流程
if (sonPages == null || sonPages.Length <= 4 || sonPages[4] == null)
{
ShowSuccessPage();
return;
}
foreach (GameObject g in sonPages)
g.gameObject.SetActive(false);
if (fingerInitTip != null) fingerInitTip.SetActive(false);
sonPages[4].SetActive(true);
// 绑定按钮(每次进入页面重新绑定,避免重复订阅)
if (fingerprintSetupButton != null)
{
fingerprintSetupButton.onClick.RemoveAllListeners();
fingerprintSetupButton.onClick.AddListener(OnSetupFingerprintClick);
}
if (fingerprintSkipButton != null)
{
fingerprintSkipButton.onClick.RemoveAllListeners();
fingerprintSkipButton.onClick.AddListener(OnSkipFingerprintClick);
}
// 返回键=返回上一步wifi设置
UIManager.Instance.RegisterBackAction(ShowWifiPage);
}
/// <summary>
/// 设置指纹按钮:开启该用户指纹并发起录入(逻辑与DeviceInfoPage一致)
/// </summary>
public void OnSetupFingerprintClick()
{
string username = DataManager.Instance.userInfo.id;
LoadingUI.Show();
BLECommunicationManager.Instance.SetFingerprintEnable(username, true, (response) =>
{
Loom.QueueOnMainThread(() =>
{
if (!response.IsSuccess)
{
LoadingUI.Hide();
ToastUI.Show("100321");
return;
}
SetFingerprint();
});
});
}
/// <summary>
/// 发起指纹录入(与DeviceInfoPage.SetFingerprint一致,失败自动重试)
/// </summary>
private void SetFingerprint()
{
string username = DataManager.Instance.userInfo.id;
BLECommunicationManager.Instance.StartFingerprintRecord(username, (response) =>
{
Loom.QueueOnMainThread(() =>
{
if (response.IsSuccess)
{
// 弹出提示框,引导用户去设备端录入指纹
if (fingerInitTip != null)
fingerInitTip.SetActive(true);
LoadingUI.Hide();
}
else
{
SetFingerprint();
}
});
});
}
/// <summary>
/// 跳过按钮:关闭该用户指纹,进入WiFi配置(失败最多重试2次)
/// </summary>
public void OnSkipFingerprintClick()
{
string username = DataManager.Instance.userInfo.id;
if (string.IsNullOrEmpty(username))
{
ToastUI.Show("100321");
return;
}
LoadingUI.Show();
TryDisableFingerprint(0);
}
/// <summary>
/// 尝试关闭指纹,失败自动重试最多2次(共3次尝试),之后无论结果如何都进入WiFi配置
/// </summary>
private void TryDisableFingerprint(int attempt)
{
string username = DataManager.Instance.userInfo.id;
BLECommunicationManager.Instance.SetFingerprintEnable(username, false, (response) =>
{
Loom.QueueOnMainThread(() =>
{
if (response.IsSuccess)
{
LoadingUI.Hide();
ShowSuccessPage();
}
else if (attempt < 2)
{
Debug.Log($"指纹关闭失败,准备第{attempt + 1}次重试");
TryDisableFingerprint(attempt + 1);
}
else
{
ToastUI.Show("100321");
LoadingUI.Hide();
ShowSuccessPage();
}
});
});
}
/// <summary> /// <summary>
/// 注销用户 /// 注销用户
/// </summary> /// </summary>
@ -534,7 +682,7 @@ public class ConnectDevicePageCtrl : MonoBehaviour
UIManager.Instance.OpenPage(UIManager.PageName.homePage, null, true); UIManager.Instance.OpenPage(UIManager.PageName.homePage, null, true);
} }
/// <summary> /// <summary>
/// 绑定设备 /// 绑定设备(服务器接口,在蓝牙注册/登录成功后调用)
/// </summary> /// </summary>
public async void BandDevice() public async void BandDevice()
{ {
@ -556,7 +704,8 @@ public class ConnectDevicePageCtrl : MonoBehaviour
onSuccess: (data) => onSuccess: (data) =>
{ {
Debug.Log($"绑定设备成功"); Debug.Log($"绑定设备成功");
OnRegisterDeviceClick(); ShowWifiPage();
DataManager.Instance.SavaSelectedDeviceMac(nowDeviceMac);
} }
, ,
onError: (code,message) => onError: (code,message) =>

View File

@ -238,17 +238,18 @@ namespace Kill.UI.Pages
try try
{ {
string[] parts = version.Split('.'); string[] parts = version.Split('.');
if (parts.Length >= 3 && if (parts.Length >= 3 &&
uint.TryParse(parts[0], out uint major) && uint.TryParse(parts[0], out uint v0) &&
uint.TryParse(parts[1], out uint minor) && uint.TryParse(parts[1], out uint v1) &&
uint.TryParse(parts[2], out uint patch)) uint.TryParse(parts[2], out uint v2))
{ {
// 版本号格式:主版本.次版本.修订号 -> 32位整数 // 版本号格式:主版本.次版本.修订号(可含第4段)
return (major << 16) | (minor << 8) | patch; // 按每段2位十进制压缩,与设备端编码一致(如 00.00.01.05 -> 105)
uint v3 = 0;
if (parts.Length >= 4)
uint.TryParse(parts[3], out v3);
return v0 * 1000000 + v1 * 10000 + v2 * 100 + v3;
} }
} }

View File

@ -86,6 +86,11 @@ namespace Kill.UI.Pages
float waitLockTime=0; float waitLockTime=0;
private bool isLockSending; // 锁定/解锁指令发送中(防连点重入) private bool isLockSending; // 锁定/解锁指令发送中(防连点重入)
/// <summary>
/// 自动锁定时间(秒)
/// <para>默认值:180秒</para>
/// </summary>
public int lockTime=180;
void FixedUpdate() void FixedUpdate()
{ {
if(!LockButtonPlane.activeSelf) if(!LockButtonPlane.activeSelf)
@ -96,7 +101,7 @@ namespace Kill.UI.Pages
{ {
waitLockTime=0; waitLockTime=0;
} }
if(waitLockTime>=60) if(waitLockTime>=lockTime)
LockButtonPlane.SetActive(true); LockButtonPlane.SetActive(true);
} }
void OnApplicationPause(bool pause) void OnApplicationPause(bool pause)

View File

@ -1,24 +1,65 @@
using UnityEngine; using DG.Tweening;
using UnityEngine.UI;
using Kill.Managers; using Kill.Managers;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace Kill.UI.Pages namespace Kill.UI.Pages
{ {
/// <summary> /// <summary>
/// 首页设备列表项 - 显示单个设备信息 /// 首页设备列表项 - 显示单个设备信息
/// 支持左滑手势:左滑时菜单向左滑出并显示高斯模糊覆盖层,
/// 滑动超过菜单宽度1/3松手则完整展开,否则缩回并隐藏模糊层
/// </summary> /// </summary>
public class HomePageDeviceItem : MonoBehaviour public class HomePageDeviceItem : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{ {
public Text deviceNameText; public Text deviceNameText;
public GameObject selectedIndicator; public GameObject selectedIndicator;
/// <summary>菜单(子物体,锚点位于item最右侧),左滑时向左滑出</summary>
public RectTransform menuRect;
/// <summary>高斯模糊覆盖层(子物体,覆盖其他内容),菜单出现时显示,缩回时隐藏</summary>
public GameObject blurOverlay;
// 当前设备信息 // 当前设备信息
public DeviceInfo deviceInfo; public DeviceInfo deviceInfo;
/// <summary>当前展开菜单的item(全局仅允许一个菜单展开)</summary>
private static HomePageDeviceItem openItem;
private float menuWidth;
private float currentOffset;
private float dragStartOffset;
private bool isMenuOpen;
private bool isDragging;
private Vector3 menuInitPos;
private Tweener tweener;
private Button button;
void Awake()
{
button = GetComponent<Button>();
InitSwipe();
}
void OnDisable()
{
// 防止拖拽中被禁用且未恢复的情况
if (button != null) button.interactable = true;
}
void OnDestroy()
{
// 销毁时释放全局展开引用
if (openItem == this)
openItem = null;
}
public void InitDeviceItem(DeviceInfo device) public void InitDeviceItem(DeviceInfo device)
{ {
deviceInfo = device; deviceInfo = device;
deviceNameText.text = device.device_name; deviceNameText.text = device.device_name;
selectedIndicator.SetActive(false); selectedIndicator.SetActive(false);
InitSwipe();
} }
public void SetSelectedState(bool isSelected) public void SetSelectedState(bool isSelected)
@ -27,6 +68,109 @@ namespace Kill.UI.Pages
selectedIndicator.SetActive(isSelected); selectedIndicator.SetActive(isSelected);
} }
/// <summary>
/// 初始化滑动数据:记录菜单初始位置、菜单宽度,重置为收起状态
/// </summary>
private void InitSwipe()
{
tweener?.Kill();
if (menuRect == null) return;
menuWidth = menuRect.sizeDelta.x;
menuInitPos = menuRect.anchoredPosition3D;
isMenuOpen = false;
currentOffset = 0;
ApplyMenuOffset(0);
if (blurOverlay != null) blurOverlay.SetActive(false);
}
public void OnBeginDrag(PointerEventData eventData)
{
if (menuRect == null || menuWidth <= 0) return;
// 拖拽滑动时禁用按钮点击,避免与菜单滑动同时触发
if (button != null) button.interactable = false;
// 其他item的菜单展开时,先收起,保证全局只有一个菜单
if (openItem != null && openItem != this)
openItem.CloseMenu();
isDragging = true;
// 菜单开始出现,显示高斯模糊覆盖层
if (blurOverlay != null) blurOverlay.SetActive(true);
currentOffset = isMenuOpen ? -menuWidth : 0;
dragStartOffset = currentOffset;
ApplyMenuOffset(currentOffset);
}
public void OnDrag(PointerEventData eventData)
{
if (!isDragging) return;
// 累加位移并限制在 [-菜单宽度, 0],只允许左滑露出菜单
currentOffset += eventData.delta.x;
currentOffset = Mathf.Clamp(currentOffset, -menuWidth, 0);
ApplyMenuOffset(currentOffset);
}
public void OnEndDrag(PointerEventData eventData)
{
if (!isDragging) return;
isDragging = false;
// 恢复按钮点击
if (button != null) button.interactable = true;
// 右滑超过菜单宽度的1/5则直接缩回(方便关闭已展开的菜单)
float dragDistance = currentOffset - dragStartOffset;
if (dragDistance > menuWidth / 5f)
{
AnimateTo(0);
return;
}
// 左滑展示超过菜单宽度的1/3则完整滑出,否则缩回
float target = currentOffset < -menuWidth / 3f ? -menuWidth : 0;
AnimateTo(target);
}
/// <summary>
/// 收起菜单(供菜单按钮点击等外部调用)
/// </summary>
public void CloseMenu()
{
if (!isMenuOpen) return;
AnimateTo(0);
}
/// <summary>
/// 将菜单平移到指定偏移
/// </summary>
private void ApplyMenuOffset(float offset)
{
Vector3 pos = menuInitPos;
pos.x += offset;
menuRect.anchoredPosition3D = pos;
}
/// <summary>
/// 平滑动画到目标偏移
/// </summary>
private void AnimateTo(float target)
{
tweener?.Kill();
bool open = target < 0;
if (open)
{
// 已有其他item的菜单展开时,先收起,保证全局只有一个菜单
if (openItem != null && openItem != this)
openItem.CloseMenu();
openItem = this;
}
else if (openItem == this)
{
openItem = null;
}
isMenuOpen = open;
if (!isMenuOpen && blurOverlay != null)
blurOverlay.SetActive(false); // 菜单缩回时隐藏模糊层
tweener = DOTween.To(() => currentOffset, v =>
{
currentOffset = v;
ApplyMenuOffset(v);
}, target, 0.25f).SetEase(Ease.OutCubic);
}
} }
} }

View File

@ -3,7 +3,6 @@
"com.unity.2d.sprite": "1.0.0", "com.unity.2d.sprite": "1.0.0",
"com.unity.assetbundlebrowser": "https://github.com/Unity-Technologies/AssetBundles-Browser.git", "com.unity.assetbundlebrowser": "https://github.com/Unity-Technologies/AssetBundles-Browser.git",
"com.unity.ide.rider": "3.0.36", "com.unity.ide.rider": "3.0.36",
"com.unity.ide.visualstudio": "2.0.22",
"com.unity.ide.vscode": "1.2.5", "com.unity.ide.vscode": "1.2.5",
"com.unity.mobile.android-logcat": "1.4.7", "com.unity.mobile.android-logcat": "1.4.7",
"com.unity.test-framework": "1.1.33", "com.unity.test-framework": "1.1.33",

View File

@ -29,15 +29,6 @@
}, },
"url": "https://packages.unity.cn" "url": "https://packages.unity.cn"
}, },
"com.unity.ide.visualstudio": {
"version": "2.0.22",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.test-framework": "1.1.9"
},
"url": "https://packages.unity.cn"
},
"com.unity.ide.vscode": { "com.unity.ide.vscode": {
"version": "1.2.5", "version": "1.2.5",
"depth": 0, "depth": 0,

View File

@ -145,10 +145,9 @@ PlayerSettings:
loadStoreDebugModeEnabled: 0 loadStoreDebugModeEnabled: 0
visionOSBundleVersion: 1.0 visionOSBundleVersion: 1.0
tvOSBundleVersion: 1.0 tvOSBundleVersion: 1.0
bundleVersion: 1.0.4 bundleVersion: 1.0.5
preloadedAssets: preloadedAssets:
- {fileID: 7756680987677051820, guid: 0488490a53b3eb2409be4727abdf829a, type: 2} - {fileID: 11400000, guid: ea0b832004c179d4aa69068be5863671, type: 2}
- {fileID: 11400000, guid: d990b2e2bc28cca43863c18940a862a3, type: 2}
metroInputSource: 0 metroInputSource: 0
wsaTransparentSwapchain: 0 wsaTransparentSwapchain: 0
m_HolographicPauseOnTrackingLoss: 1 m_HolographicPauseOnTrackingLoss: 1
@ -818,7 +817,24 @@ PlayerSettings:
webGLMemoryGeometricGrowthStep: 0.2 webGLMemoryGeometricGrowthStep: 0.2
webGLMemoryGeometricGrowthCap: 96 webGLMemoryGeometricGrowthCap: 96
webGLPowerPreference: 2 webGLPowerPreference: 2
scriptingDefineSymbols: {} scriptingDefineSymbols:
Android: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
EmbeddedLinux: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
GameCoreScarlett: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
GameCoreXboxOne: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
LinuxHeadlessSimulation: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
Nintendo Switch: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
PS4: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
PS5: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
QNX: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
Stadia: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
Standalone: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
VisionOS: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
WebGL: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
Windows Store Apps: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
XboxOne: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
iPhone: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
tvOS: DOTWEEN;DOTWEEN_NOAUDIO;DOTWEEN_NOPHYSICS;DOTWEEN_NOPHYSICS2D;DOTWEEN_UITOOLKIT
additionalCompilerArguments: {} additionalCompilerArguments: {}
platformArchitecture: {} platformArchitecture: {}
scriptingBackend: scriptingBackend: