Этот тред был создан для агрегации вопросов-ответов и помощи по движку Unity. Наиболее фундаментальные моменты будем закреплять в теле поста.
Задавайте свои вопросы под этой публикацией. Чем сможем - поможем, Community как никак.
Смотрите также:
Комментарии
mr.Pureshechka, ты меня слишком сильно выручаешь, мне уже аж неудобно) Сейчас скачаю, попробую разобраться. Спасибо большое.
mr.Pureshechka, вроде да) Только сейчас решил одну из проблем с этой системой (точнее проблему, появившуюся из-за моей невнимательности - забыл запечь навигационную карту и сидел час думал, что не так, переделывая одно и то же по нескольку раз).
Какой подход вы используете при работе с новой системой интерфейса?
Мои руки пока что остановились на варианте с промежуточной моделью, которая отвечает за интерфейс. Т.е. у меня есть прототип UI элемента, который содержит в себе скрипт модели данного контрола со всеми связями до элементов на канвасе и ссылку на игровой объект, где в Update меняются значения на интерфейсе в зависимости от значений игрового объекта. Если описать в коде, то получается что-то вроде этого:
public class Character : MonoBehaviour {
// ....
public float Life { get; set; }
public float MaxLife { get; set; }
// ....
}
public class LifeBarUIController : MonoBehaviour {
public Character Target;
public Image lifeBar;
public Text hintText;
public void Update() {
var currentLife = Target != null ? Target.Life : 0.0f;
var percentage = currentLife / Mathf.Max(0.1f, Target.MaxLife);
lifeBar.fillAmount = percentage;
hintText.text = "Life: " + currentLife + " / " + Target.MaxLife;
}
}На сколько такой подход нормальный и юзабельный? Меня смущает то, что данные на интерфейсе обновляются постоянно. Может есть возможность как-то это избежать, при этом не меняя направление взаимодействия? Или может мне все таки стоит пересмотреть свой взгляд полностью на принцип разработки интефрейса?
alexprey, при таком подходе будет каждый кадр перерисовываться интерфейс, а это крайне нежелательно. Лучше поставить event и его слушать. А изменения вносить на экран только при изменении какого-то параметра
mr.Pureshechka, т.е. лучше реализовать события внутри игрового объекта или будет достаточно чекать это в UI модели, заведя теневую копию поля?
alexprey, можно в объекте, можно в интерфейсе. Это всегда зависит от ситуации. Главное, чтобы скрипт делал только то, для чего он написан и не больше
mr.Pureshechka, тоесть такое подход в целом допустим? И сильно не будет аффектить ресурсы при рендере UI?
public class LifeBarUIController : MonoBehaviour {
public Character Target;
public Image lifeBar;
public Text hintText;
private float _shadow_currentLife = 0.0f;
public void Update() {
var currentLife = Target != null ? Target.Life : 0.0f;
if (currentLife != _shadow_currentLife) {
_shadow_currentLife = currentLife;
var percentage = currentLife / Mathf.Max(0.1f, Target.MaxLife);
lifeBar.fillAmount = percentage;
hintText.text = "Life: " + currentLife + " / " + Target.MaxLife;
}
}
}

<a href= http://mosros.flybb.ru/viewtopic.php?f=2&t=635>Процесс получения диплома стоматолога: реально ли это сделать быстро?</a>