【发布时间】:2021-09-07 08:59:00
【问题描述】:
由于不懂节奏游戏术语,所以无法彻底描述问题。
在图片中
- 白色方块 Note 代表玩家需要按时击中的对象。
- 绿色矩形线表示时间。当音符与线条完美对齐时,就是玩家按下按钮来敲击音符。
现在的问题是,我似乎无法找到一种方法来使 Note 与使用 Mathf.Lerp 的 Line 完美对齐,同时它仍然到达末尾。
void GenerateBeat()
{
if (timeItems.Count == 0)
return;
if (timeItems.Peek() <= currentBeatPosition + BeatLookForwardValue)
{
Debug.Log("Item instantiated, Spawned At : " + currentBeatPosition + " Will reach 0 at : " + timeItems.Peek());
GameObject obj = Instantiate(tempSpawnObject);
obj.transform.SetParent(parentObject.transform);
existingBeats.Add(obj);
existingBeatsTime.Add(currentBeatPosition);
timeItems.Dequeue();
}
}
void MoveBeat()
{
// if (timeItems.Count == 0)
// return;
for (int i = 0; i < existingBeats.Count; i++)
{
NoteBeatline beatline = existingBeats[i].GetComponent<NoteBeatline>();
Vector2 StartingPos = new Vector2(0, 800f);
Vector2 EndPos = new Vector2(0, 0);
float offset = (endTime[i] - existingBeatsTime[i]) / 3;
float time = Mathf.InverseLerp(existingBeatsTime[i], endTime[i] + offset, currentBeatPosition);
beatline.Image.rectTransform.anchoredPosition = Vector2.Lerp(StartingPos, EndPos, time);
}
}
[编辑] 抱歉没有说明清楚。
我正在尝试通过向 endTime 添加额外值来同步 Notes,因为 existingBeatsTime(跟踪生成对象的时间)可能会因 BeatLookFOrwardValue 的大小而异。currentBeatPosition 表示节拍时间已经过去了多长时间从歌曲开始,所以我无法操纵价值。
endTime 值始终是一个常数,由我设置 timeItems 中的项目与 endTime 中的项目相同。
深青色的整个背景颜色目前是800个单位 并且绿色水平线的y位置是600 以便Notes可以与绿线完美对齐 当
float time = Mathf.InverseLerp(existingBeatsTime[i], endTime[i] + offset, currentBeatPosition);
是 0.75f。
我在发布这篇文章后做了更多的研究和实验, 发现了
float offset = (endTime[i] - existingBeatsTime[i]) / 3;
不知何故同步笔记,但我不明白如何。
请随时评论我的解释。 这是我第一次在 StackOverflow 上发布问题并向其他人解释我的编码问题。
如果仍然缺乏,我会尽力提供更多信息。
【问题讨论】: