Unity создает закругленный угол на панели radial circle?

#c# #user-interface #unity3d

#c# #пользовательский интерфейс #unity-игровой движок

Вопрос:

Хорошо, я использую этот скрипт и изображение, успешно создающее разматывающийся круг в unity:

// Update вызывается один раз за кадр void Update () {

 circle2.transform.position = new Vector3(Mathf.Sin(currentValue * 6.28f), Mathf.Cos(currentValue * 6.28f), 0f) * 1;

if (currentValue < 100) {
    currentValue  = speed * Time.deltaTime;
    //ProgressIndicator.text = ((int)currentValue).ToString ()   "%";
    //LoadingText.SetActive (true);
}

LoadingBar.fillAmount = currentValue / 100;
  

Я пытаюсь создать что-то вроде кругов Apple Watch, где закруглены торцевые крышки. Чтобы сделать это, они сказали здесь, чтобы расположить круг в конце штриха, используя vector3, который они перечислили:

https://forum.unity.com/threads/ui-rounded-circular-bar.461067/

Это не работает. Как я могу расположить круг там, где находится конец хода разматывания / часть круга?

введите описание изображения здесь

Ответ №1:

Функции Sin и Cos доставляют значения из диапазона <0, 1> . Этого может быть слишком мало для размещения элемента в графическом интерфейсе.

В конце следующего выражения попробуйте заменить одно на несколько больших значений.

 Vector3(Mathf.Sin(currentValue * 6.28f), Mathf.Cos(currentValue * 6.28f), 0f) * /*replace this: */ 1;
  

Ключ в том, чтобы настроить его в соответствии с радиусом вашей окружности.

Ответ №2:

Проблема заключается в использовании

 circle2.transform.position
  

Для объектов пользовательского интерфейса. Это задает положение в глобальных координатах

Для размещения объектов пользовательского интерфейса вы можете использовать это

Ответ №3:

Надеюсь, это поможет и сможет прояснить ситуацию:

  currentLerpTimeScan  = Time.deltaTime;
 if (currentLerpTimeScan > lerpTime)
 {
    currentLerpTimeScan = lerpTime;
 }

 float perc = currentLerpTimeScan / lerpTime;
 perc = Mathf.Sin(perc * Mathf.PI * 0.5f);
 RadialImageScan.fillAmount = Mathf.Lerp(startValueScan, endValueScan, perc);

 currentValue = RadialImageScan.fillAmount;

 ScanCircle.localPosition = 
 (new Vector2(Mathf.Sin(currentValue * 6.28f), 
 Mathf.Cos(currentValue * 6.28f)) * scanMultiplier) * -1; 
 // remove -1 if you wish this depends on ui setup