Parcourir la source

提交一个lerp的slider

wartheking il y a 8 mois
Parent
commit
2e230c14b3
3 fichiers modifiés avec 77 ajouts et 17 suppressions
  1. 48 0
      Assets/LerpSlider.cs
  2. 11 0
      Assets/LerpSlider.cs.meta
  3. 18 17
      Assets/Prefabs/WaterRangeCtrl.prefab

+ 48 - 0
Assets/LerpSlider.cs

@@ -0,0 +1,48 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.EventSystems;
+using UnityEngine.UI;
+public class LerpSlider : UnityEngine.UI.Slider, IPointerDownHandler
+{
+    private float lerpDuration = 0.08f; // 过渡时间
+
+    private float targetValue;
+    private bool isLerping;
+
+
+
+    protected override void Update()
+    {
+        base.Update();
+        if (isLerping)
+        {
+            // 平滑过渡到目标值
+            value = Mathf.Lerp(value, targetValue, Time.deltaTime / lerpDuration);
+
+            // 检查是否接近目标值,结束过渡
+            if (Mathf.Abs(value - targetValue) < 0.01f)
+            {
+                value = targetValue;
+                isLerping = false;
+            }
+        }
+    }
+
+    public void OnPointerDown(PointerEventData eventData)
+    {
+        // 计算点击位置的值
+        RectTransformUtility.ScreenPointToLocalPointInRectangle(
+            GetComponent<RectTransform>(), eventData.position, eventData.pressEventCamera, out var localPoint);
+
+        // 计算滑块的点击位置对应的值
+        float normalizedValue = Mathf.InverseLerp(
+            GetComponent<RectTransform>().rect.xMin,
+            GetComponent<RectTransform>().rect.xMax,
+            localPoint.x
+        );
+
+        targetValue = Mathf.Clamp01(normalizedValue); // 确保值在0到1之间
+        isLerping = true;
+    }
+}

+ 11 - 0
Assets/LerpSlider.cs.meta

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

+ 18 - 17
Assets/Prefabs/WaterRangeCtrl.prefab

@@ -404,8 +404,8 @@ GameObject:
   serializedVersion: 6
   serializedVersion: 6
   m_Component:
   m_Component:
   - component: {fileID: 8253048676979172416}
   - component: {fileID: 8253048676979172416}
-  - component: {fileID: 8253048676979172478}
   - component: {fileID: 8253048676979172417}
   - component: {fileID: 8253048676979172417}
+  - component: {fileID: 7964902893140175114}
   m_Layer: 5
   m_Layer: 5
   m_Name: WaterRangeSilder
   m_Name: WaterRangeSilder
   m_TagString: Untagged
   m_TagString: Untagged
@@ -436,7 +436,21 @@ RectTransform:
   m_AnchoredPosition: {x: 960, y: -995}
   m_AnchoredPosition: {x: 960, y: -995}
   m_SizeDelta: {x: 612, y: 12}
   m_SizeDelta: {x: 612, y: 12}
   m_Pivot: {x: 0.5, y: 0.5}
   m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &8253048676979172478
+--- !u!114 &8253048676979172417
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 8253048676979172419}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Padding: {x: -3.5, y: -3.5, z: -3.5, w: -3.5}
+  m_Softness: {x: 1, y: 1}
+--- !u!114 &7964902893140175114
 MonoBehaviour:
 MonoBehaviour:
   m_ObjectHideFlags: 0
   m_ObjectHideFlags: 0
   m_CorrespondingSourceObject: {fileID: 0}
   m_CorrespondingSourceObject: {fileID: 0}
@@ -445,7 +459,7 @@ MonoBehaviour:
   m_GameObject: {fileID: 8253048676979172419}
   m_GameObject: {fileID: 8253048676979172419}
   m_Enabled: 1
   m_Enabled: 1
   m_EditorHideFlags: 0
   m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 67db9e8f0e2ae9c40bc1e2b64352a6b4, type: 3}
+  m_Script: {fileID: 11500000, guid: 7e03082bc236b4b46b1363761152150b, type: 3}
   m_Name: 
   m_Name: 
   m_EditorClassIdentifier: 
   m_EditorClassIdentifier: 
   m_Navigation:
   m_Navigation:
@@ -487,20 +501,7 @@ MonoBehaviour:
   m_OnValueChanged:
   m_OnValueChanged:
     m_PersistentCalls:
     m_PersistentCalls:
       m_Calls: []
       m_Calls: []
---- !u!114 &8253048676979172417
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 8253048676979172419}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Padding: {x: -3.5, y: -3.5, z: -3.5, w: -3.5}
-  m_Softness: {x: 1, y: 1}
+  lerpDuration: 2
 --- !u!1 &8253048677225292345
 --- !u!1 &8253048677225292345
 GameObject:
 GameObject:
   m_ObjectHideFlags: 0
   m_ObjectHideFlags: 0