- Home /
Moving an UI element from point A to point B
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.
Answer by MafiaMoe · Jul 01, 2018 at 09:11 AM
inside the while loop, try adding:
recticleStartPos = imageRecticle.GetComponent<RectTransform>().anchoredPosition;
or remove that variable entirely to get:
while(imageRecticle.GetComponent<RectTransform>().anchoredPosition != recticleEndPos)
{
imageRecticle.GetComponent<RectTransform>().anchoredPosition = Vector2.MoveTowards(
imageRecticle.GetComponent<RectTransform>().anchoredPosition,
recticleEndPos,
3.0f * Time.deltaTime);
yield return 0;
}
Your answer
Follow this Question
Related Questions
Moving 2D sprite along a path 0 Answers
Vector2.MoveTowards giving me a hard time 1 Answer
How to get click position in Vector 2 ? 1 Answer
3 coroutines to ease in lerp, MoveToward steady pace, and ease out lerp 0 Answers
rotate object by list values 0 Answers