好的,我得到了一系列卡片,每次用户点击时都会逐一移动到相机中心。
StageContainer
是所有卡的父级。这将是一个移动,使它看起来像卡正在移动。
首先,我这是没有smoothdamp的代码
// Update is called once per frame
void Update () {
if(Input.GetMouseButtonDown(0)){
StartCoroutine ( ProcessFocus() );
frames++;
}
}
IEnumerator ProcessFocus() {
curPos = StageContainer.transform.localPosition;
nextPos = curPos;
nextPosX = nextPos.x - 400;
nextPos.x = nextPosX;
StageContainer.transform.localPosition = nextPos;
yield break;
}
上面的代码让我可以即时更换相机中央的卡片。没有过渡,动画无论如何......关键是它有效。 现在当我改变这个:
StageContainer.transform.localPosition = nextPos;
到此:
float smoothTime = 0.3F;
Vector3 velocity = Vector3.zero;
StageContainer.transform.localPosition = Vector3.SmoothDamp(curPos, nextPos, ref velocity, smoothTime);
我假设它会从当前X点过渡到下一个X点, 但是每当我点击鼠标时,它就会像10~20 X点那样一点一点地移动
我不知道为什么它会那样。请帮忙。
答案 0 :(得分:0)
那是因为您的代码运行一次然后退出协程。要运行协程一段时间,您必须返回some YieldInstruction
个实例。在这种情况下,我怀疑你想要use WaitForEndOfFrame
。
答案 1 :(得分:0)
你的协程需要继续运行,直到你的动作完成。
IEnumerator ProcessFocus() {
curPos = StageContainer.transform.localPosition;
nextPos = curPos;
nextPosX = nextPos.x - 400;
nextPos.x = nextPosX;
float smoothTime = 0.3F;
Vector3 velocity = Vector3.zero;
while(this.transform.position != nextPos) {
StageContainer.transform.localPosition = Vector3.SmoothDamp(curPos, nextPos, ref velocity, smoothTime);
yield return null;
}
}