【发布时间】:2021-09-06 22:40:48
【问题描述】:
我有 2 个移动物体,它们在一个方向上基本运动:
if(CircleMovement1.switchMovement1 == false)
{
if(scoreNumber.scoreCounter >= 0 && scoreNumber.scoreCounter < 10){
speed = 0.3f;
rb.velocity = new Vector2(speed * 1.7f, 0);
}
}
成功时,即点击类型的事件,对象必须停止沿该方向移动并返回到相反方向的起始位置,其速度分量比它们在开始方向上移动时的速度分量要大一些。在单击事件时,只需更改“CircleMovement1.switchMovement1”的布尔值,以便对象可以向相反方向移动:
else if(CircleMovement1.switchMovement1 == true)
{
if(scoreNumber.scoreCounter >= 0 && scoreNumber.scoreCounter < 10){
rb.velocity = new Vector2(-speed * 25f, 0);
}}
问题是:一旦对象再次到达起始位置,它们必须停止并再次向前移动,就像 CircleMovement1.switchMovement1 == false 一样,如第一个 sn-p 所示。我不知道如何标记他们到达起点并可以开始向相反方向移动的时刻。我尝试添加碰撞器并检测与起点上的对象的碰撞:
public void OnTriggerEnter2D(Collider2D col){
if (col.gameObject.tag == "mainCol")
{
CircleMovement1.switchMovement1 = false;
}
}
但这并没有很好地转向,因为在更高的速度上,物体有时会穿透起点的对撞机并向后移动超过需要的程度(这是不一致的)。
我尝试像这样跟踪对象的本地位置:
if(this.GetComponent<RectTransform>().localPosition.x == 30) {
CircleMovement1.switchMovement1 = false;
}
但这根本不起作用。
最后,我尝试使用 Lerp 函数将对象移动到这样的起始位置:
circ3.GetComponent<RectTransform>().localPosition = new Vector3(Mathf.Lerp(currPos3.x,-1,1f * Time.deltaTime),2,0);
这可行,但不是我想要的方式。它只是立即在给定的矢量位置生成一个对象,并且与速度运动的外观不同。
如果有人知道如何检测物体到达他们需要的位置的点,请随时提供帮助。
提前致谢。
【问题讨论】: