#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