perf
This commit is contained in:
@@ -12,18 +12,15 @@ namespace Ichni.Menu.UI
|
||||
public class SongListControllerUI : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
|
||||
{
|
||||
[Title("核心组件")]
|
||||
[SerializeField] private RectTransform content;
|
||||
[SerializeField] private RectTransform viewport;
|
||||
[SerializeField] public RectTransform content;
|
||||
[SerializeField] public RectTransform viewport;
|
||||
|
||||
[Title("预制体")]
|
||||
[SerializeField]
|
||||
private GameObject songItemPrefab;
|
||||
[Title("【临时】测试用标题列表")]
|
||||
[SerializeField]
|
||||
private List<string> songTitles;
|
||||
|
||||
[Title("对齐与动画")]
|
||||
[SerializeField] private RectTransform centerPoint;
|
||||
[SerializeField] public RectTransform centerPoint;
|
||||
[SerializeField] private float snapSpeed = 5f;
|
||||
[SerializeField] private float decelerationRate = 0.135f;
|
||||
|
||||
@@ -37,7 +34,7 @@ namespace Ichni.Menu.UI
|
||||
[Tooltip("当松手时的速度大于此值,才会被判定为一次“甩动”并产生惯性")]
|
||||
[SerializeField] private float flickThreshold = 50f;
|
||||
|
||||
public SongSelectionTabUI selectedTab;
|
||||
public SongSelectionTab selectedTab;
|
||||
|
||||
// 内部变量
|
||||
private List<RectTransform> songItems = new List<RectTransform>();
|
||||
@@ -110,11 +107,10 @@ namespace Ichni.Menu.UI
|
||||
|
||||
public void GenerateSongTabs()
|
||||
{
|
||||
string chapter = ChapterSelectionManager.instance.currentChapter;
|
||||
ChapterSelectionUnit chapterUnit = ChapterSelectionManager.instance.chapters.Find(c => c.chapterIndex == chapter);
|
||||
ChapterSelectionUnit chapterUnit = ChapterSelectionManager.instance.currentChapter;
|
||||
foreach (SongItemData song in chapterUnit.songs)
|
||||
{
|
||||
SongSelectionTabUI tab = Instantiate(songItemPrefab ,content).GetComponent<SongSelectionTabUI>();
|
||||
SongSelectionTab tab = Instantiate(songItemPrefab ,content).GetComponent<SongSelectionTab>();
|
||||
songItems.Add(tab.GetComponent<RectTransform>());
|
||||
tab.SetUpTab(song);
|
||||
}
|
||||
@@ -131,8 +127,8 @@ namespace Ichni.Menu.UI
|
||||
selectedTab?.SetSelection(false);
|
||||
selectedTab = null; // 清除当前选中的Tab
|
||||
|
||||
DOTween.To(x=>targetX = x, targetX, -1600f, 0.2f).SetEase(Ease.OutQuad).Play();
|
||||
songItems.ForEach(item => item.DOScale(1.2f,0.2f).SetEase(Ease.OutQuad).Play());
|
||||
//DOTween.To(x=>targetX = x, targetX, -1550f, 0.2f).SetEase(Ease.OutQuad).Play();
|
||||
//songItems.ForEach(item => item.DOScale(1.1f,0.2f).SetEase(Ease.OutQuad).Play());
|
||||
}
|
||||
|
||||
public void OnDrag(PointerEventData eventData)
|
||||
@@ -147,8 +143,8 @@ namespace Ichni.Menu.UI
|
||||
public void OnEndDrag(PointerEventData eventData)
|
||||
{
|
||||
isDragging = false;
|
||||
DOTween.To(x => targetX = x, targetX, -1500f, 0.2f).SetEase(Ease.OutQuad).Play();
|
||||
songItems.ForEach(item => item.DOScale(1,0.2f).SetEase(Ease.OutQuad).Play());
|
||||
//DOTween.To(x => targetX = x, targetX, -1500f, 0.2f).SetEase(Ease.OutQuad).Play();
|
||||
//songItems.ForEach(item => item.DOScale(1,0.2f).SetEase(Ease.OutQuad).Play());
|
||||
|
||||
// 【核心修正】在这里根据速度决定下一步做什么
|
||||
if (Mathf.Abs(velocity.y) > flickThreshold)
|
||||
@@ -193,18 +189,10 @@ namespace Ichni.Menu.UI
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerator SnapToTab(SongSelectionTabUI tab)
|
||||
public IEnumerator SnapToTab(SongSelectionTab tab)
|
||||
{
|
||||
selectedTab?.SetSelection(false);
|
||||
selectedTab = null; // 清除当前选中的Tab
|
||||
|
||||
DOTween.To(x=>targetX = x, targetX, -1600f, 0.2f).SetEase(Ease.OutQuad).Play();
|
||||
songItems.ForEach(item => item.DOScale(1.2f,0.2f).SetEase(Ease.OutQuad).Play());
|
||||
|
||||
yield return new WaitForSeconds(0.2f);
|
||||
|
||||
DOTween.To(x => targetX = x, targetX, -1500f, 0.2f).SetEase(Ease.OutQuad).Play();
|
||||
songItems.ForEach(item => item.DOScale(1,0.2f).SetEase(Ease.OutQuad).Play());
|
||||
|
||||
yield return StartCoroutine(SnapToItem(tab.GetComponent<RectTransform>(), false));
|
||||
}
|
||||
@@ -217,7 +205,14 @@ namespace Ichni.Menu.UI
|
||||
}
|
||||
|
||||
Debug.Log("开始对齐到: " + targetItem.name);
|
||||
|
||||
|
||||
selectedTab = targetItem.GetComponent<SongSelectionTab>();
|
||||
selectedTab.SetSelection(true);
|
||||
|
||||
SongItemData connectedSong = selectedTab.connectedSong;
|
||||
MenuManager.instance.songSelectionUIPage.selectedSong = connectedSong;
|
||||
|
||||
|
||||
Vector3 closestItemLocalPos = viewport.InverseTransformPoint(targetItem.position);
|
||||
Vector3 centerPointLocalPos = viewport.InverseTransformPoint(centerPoint.position);
|
||||
float localOffsetY = centerPointLocalPos.y - closestItemLocalPos.y;
|
||||
@@ -249,8 +244,10 @@ namespace Ichni.Menu.UI
|
||||
}
|
||||
|
||||
Debug.Log($"已对齐到: {targetItem.name}");
|
||||
selectedTab = targetItem.GetComponent<SongSelectionTabUI>();
|
||||
selectedTab.SetSelection(true);
|
||||
selectedTab.SetPreview();
|
||||
|
||||
MenuManager.instance.songSelectionUIPage.difficultySelectionContainer.SetUp(connectedSong.difficultyDataList);
|
||||
MenuManager.instance.songSelectionUIPage.songInfoUI.SetIllustration(connectedSong.illustration, connectedSong.illustratorName);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user