Во-первых, вам нужно учесть масштаб изображения (как предложено @derHugo в комментарии)
Но вам также нужно учесть тот факт, что ваш холст также будет применять шкалу к единицам,в зависимости от того, как вы его установили.
Хорошим решением является использование RectTransform.GetWorldCorners
.Это позволит вам узнать мировую координату вашего круга, не прибегая к вычислению масштаба самостоятельно.
Vector3[] v = new Vector3[4];
rt.GetWorldCorners(v);
var radius = v[0].x - v[2].x; // Not sure about the order of the corners, the indices might be wrong
Еще один комментарий: ваш код зависит от частоты кадров: вы добавляете 0,25 градуса каждый кадр.Это означает, что FPS будет влиять на скорость вращения (при 60 кадрах в секунду вы будете вращаться на 0,25 * 60 = 15 градусов в секунду. Но с 30 кадрами в секунду вы будете вращаться на 0,25 * 30 = 7,5 градусов в секунду)
Чтобы быть независимым от частоты кадров, вы можете выполнить простое вычисление, используя Time.deltaTime
(это время, которое требуется последнему кадру для полной визуализации)
Вместо angle += .25f;
Выполните следующее:
var anglePerSeconds = 15; // Choose the angular speed you want
angle += anglePerSeconds * Time.deltaTime;