Не передается значение из свойства в дочерний класс

Здравствуйте! Я создал класс Enemies, который наследует класс MonoBehaviour, далее я создал класс Guardians, который наследует класс Enemies. В классе Enemies я создал приватное поле Transform target, в котором у меня хранится позиция моего игрока. Создал свойство Vector3, который возвращает позицию моего игрока. В update класса Enemies, у меня это свойство работает(возвращает позицию игрока), но вот когда я пытаюсь передать его в дочерний класс Guardians, то ничего не передается. Подскажите пожалуйста как это можно исправить. Снизу код класса Enemies и Guardians.

Класс Enemies

public class Enemies : MonoBehaviour
{
    public float speed;
    public float rayDistance;
    public Transform right, left;  
    private Transform target;


    private void Start()
    {
        target = GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>();
        Physics2D.queriesStartInColliders = false;
    }
    private void Update()
    {
        Debug.Log(DistanceToPlayer + "расстояние до игрока");
        Debug.Log(Target + "игрок");
    }
    public float DistanceToPlayer
    {
        get
        {
           return Vector2.Distance(transform.position, target.position);
        }
    }
    public Vector3 Target
    {
        get
        {
            return target.position;
        }
    }
}

дочерний класс Guardians

public class Guardians : Enemies
{
    private Rigidbody2D rb;
    private bool movingRight = true;    
    void Start()
    {
        Physics2D.queriesStartInColliders = false;
        rb = GetComponent<Rigidbody2D>();
    }
    
    void Update()
    {
        Debug.Log(Target);
    }
    private void Angry()
    {
        transform.position = Vector2.MoveTowards(transform.position,Target, speed * Time.deltaTime * 1.5f);
    }
}

Выдает ошибку.
image

Но в классе Enemies все выводится.
image
image

Если ошибка про то, что

null во втором классе, то видимо дело в том, что там не выполняется код из Start первого класса.
Можно вызвать его через base.Start(), только скорее всего надо сделать его virtual, и public или protected, как тут.


Если объект этого класса не является коллекцией врагов, то это неправильное имя. Лучше Enemy, Guardian.

Спасибо!
В классе Guardian немного переделал метод Start и заработало!

 protected new void Start()
    {
        Physics2D.queriesStartInColliders = false;
        rb = GetComponent<Rigidbody2D>();
        base.Start();
    }

Лучше так

protected virtual void Start()
{
    ...
}
protected override void Start()
{
    base.Start();
    ...
}

Так логичнее и избавляет от лишних проблем типа такого:

using System;

public class Base
{
    public void BadStart()
	{
		Console.WriteLine("Hello from Base");
	}
	
    virtual public void GoodStart()
	{
		Console.WriteLine("Hello from Base");
	}
}

public class Derived : Base
{
    new public void BadStart()
	{
		Console.WriteLine("Hello from Derived");
	}
	
    override public void GoodStart()
	{
		Console.WriteLine("Hello from Derived");
	}
}
					
public class Program
{
	public static void Main()
	{
		Base obj = new Derived();
		obj.BadStart(); // Hello from Base
		obj.GoodStart(); // Hello from Derived
	}
}

https://dotnetfiddle.net/ShEMHi

И по ссылке вроде бы писали, что новые версии Юнити выдают предупреждение о способе с new.

Хорошо, спасибо за совет!