Это от привычки к тому, что везде можно писать команды. Когда описывается объект - определяются его свойства и методы, а выполняются действия только в методах и конструкторах. Правда на JS можно писать код вне методов, он выполняется на старте (вместо функции Start). В C# этого нельзя сделать. Для этого у каждого компонента имеются функции Awake и Start. Awake выполняется после инициализации компонента, Start - перед первым Update.
Например нужно объекту объявить переменную life и на старте присвоить ей значение:
using UnityEngine;
public class ExampleScript : MonoBehaviour
{
public float life = 0f; // можно только проинициализировать
//life = 100f; - здесь будет ошибка
public void Start()
{
life = 100f; // тут все OK, т.е. выполнение присвоения выполняется в теле метода Start()
}
}
В данном случае переменная life является полем объекта ExampleScript. Поля отличаются от свойств тем, что свойства при назначении значения и при считывании значения могут выполнять какие-то действия.
Например присвоение свойству rotation нового значения:
myLight.transform.rotation = Quaternion.Euler(90, 0, 0);
Вызовет внутри объекта transform пересчет матрицы трансформаций, на основе которой объект будет визуализироваться, т.к. rotation - это свойство.