Изменено поле обнаружения объекта в окне инспектора

#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. Отлично! Большое спасибо. Именно то, что я искал.