#c# #unity3d
#c# #unity3d
Вопрос:
Как мне написать логику в скрипте, чтобы определить, было ли изменено поле объекта в окне инспектора? Я использую скрипт, который выполняется как в редакторе, так и в режиме воспроизведения, и я изменяю OffsetPosition
его в окне инспектора. Затем позиция смещения копируется в мой GameObject. Я хочу, чтобы функция определяла, был ли изменен GameObject в окне инспектора.
public GameObject Offset;
public Vector3 OffsetPosition;
public bool GameObject_NotChanged;
void Update () {
if(GameObject_NotChanged == true)
{
Offset.transform.position = OffsetPosition;
}
}
void GameObject_Changed()
{
GameObject_NotChanged = false;
}
Ответ №1:
Вы могли бы использовать OnValidate
Эта функция вызывается при загрузке скрипта или изменении значения в Инспекторе (вызывается только в редакторе).
вот так
public GameObject Offset;
public Vector3 OffsetPosition;
private GameObject _lastOffset;
private Vector3 _lastOffsetPosition;
private void OnValidate()
{
if((Offset != _lastOffset || _lastOffsetPosition != OffsetPosition))
{
if(Offset)
{
Offset.transform.position = OffsetPosition;
}
_lastOffsetPosition = OffsetPosition;
_lastObject = Offset;
}
}
Комментарии:
1. Привет, спасибо. Но как мне повторно добавить
Offset.transform.position = OffsetPosition;
с новым смещением GameObject?2. @Amar.linsila извините, я не совсем понимаю вопрос .. вы имели в виду также переназначение, если вы измените
OffsetPosition
? -> Просто обновил ответ, чтобы сделать это также3. Отлично! Большое спасибо. Именно то, что я искал.