I wrote this line of code inside the coroutine:
float posX = imageRecticle.GetComponent<RectTransform>().anchoredPosition.x;
float posY = imageRecticle.GetComponent<RectTransform>().anchoredPosition.y;
while(true)
{
if (posX <= 250.0f)
{
posX += 300.0f * Time.deltaTime;
imageRecticle.GetComponent<RectTransform>().anchoredPosition = new Vector2(posX, posY);
}
else
imageRecticle.GetComponent<RectTransform>().anchoredPosition = new Vector2(250.0f, posY);
if (posY >= -115.0f)
{
posY -= 300.0f * Time.deltaTime;
imageRecticle.GetComponent<RectTransform>().anchoredPosition = new Vector2(posX, posY);
}
else
imageRecticle.GetComponent<RectTransform>().anchoredPosition = new Vector2(posX, -115.0f);
if (posX >= 250.0f && posY <= -115.0f)
break;
yield return 0;
}
It just moves an UI element (imageRecticle) smoothly, from one Vec2 point to another. While it does work, I cannot write it as its own coroutine, due to sign changes and all. Thus, I tried to rewrite this in a more intuitive way:
Vector2 recticleStartPos = imageRecticle.GetComponent<RectTransform>().anchoredPosition;
Vector2 recticleEndPos = new Vector2(250.0f, -115.0f);
while(imageRecticle.GetComponent<RectTransform>().anchoredPosition != recticleEndPos)
{
imageRecticle.GetComponent<RectTransform>().anchoredPosition = Vector2.MoveTowards(
recticleStartPos,
recticleEndPos,
3.0f * Time.deltaTime);
yield return 0;
}
But this doesn’t work at all and I can’t figure it out why. Strangely, none of the answers about MoveTowards
that I googled, helps me. I also tried using Vector2.Lerp
, but no success either.