Ветеран здесь! * смеется *
Прежде чем мы начнем, я просто хочу упомянуть, что вы используете C #, поэтому попробуйте привыкнуть к CamelCase
для именования методов и классов.
Ваш код не работает, потому что вы проверяете свой Light
компонент на null
. null
будет только тогда, когда ничего не назначено или назначенный объект уничтожен. Если вы хотите проверить состояние компонента, лучше используйте playerLight.enabled
. Добавим некоторые незначительные улучшения в ваш общий код, и теперь он выглядит так:
public class ChasePlayer : MonoBehaviour
{
public Light playerLight;
public float speed;
public Transform target;
private void FollowLight()
{
// Does checking for given statement but is only executed in Debug mode.
// Fairly good for fail-proofing private methods
// Or clarifying, what values should be before invoking the method.
Debug.Assert(playerLight != null);
float walkspeed = speed * Time.deltaTime;
transform.position = Vector3.MoveTowards(transform.position, target.position, walkspeed);
}
private void Update()
{
if(playerLight != null && playerLight.enabled)
FollowLight();
}
}
ПРИМЕЧАНИЕ: не забудьте переименовать файл класса в ChasePlayer
, поскольку у меня есть CamelCased имя класса (Unity требует, чтобы имена файлов и классов совпадали, чтобы иметь возможность назначить компоненты GameObjects в редакторе).