Это больше вопрос вкуса, я видел оба варианта, сам тоже использую SerializeField, но чаще склоняюсь к пропертям, а не методам, но, опять-таки, всё зависит от проекта. Ещё видел часто подход вида:
[SerializeField]
private int _field;
public int field { get { return _field; } set { _field = value; } }
Если говорить про абстрактный код в вакууме, то лучше данные наружу отдавать вообще через интерфейсы, но это не всегда целесообразно, особенно в контексте юнити. А так вообще да, с любым публичным полем есть риск, что его снаружи кто-то дёрнет и что-то заломает, поэтому лучше видимость переменных ограничивать по максимуму.