Проверил вашим методом - выходит, что еще до вызова скрипта Node, где фигурирует эта переменная, она действительно равна Null. Можете помочь, как это исправить? Что присвоить, если это нужно??
(p.s. в приложенном фото место ошибки, а переменная lastNode объявлена выше так - Transform lastNode; )
// Ошибка:
NullReferenceException: Object reference not set to an instance of an object Node.Init (UnityEngine.Transform tr) (at Assets/Node.cs:12)
HeadMovement.OnTriggerEnter2D (UnityEngine.Collider2D col) (at Assets/HeadMovement.cs:76)
// Первый скрипт
using UnityEngine;
public class Node : MonoBehaviour
{
Transform parentNode;
Vector3 destinationPoint;
bool inited;
public void Init(Transform tr)
{
parentNode = tr;
destinationPoint = tr.position; // Строка с ошибкой
GetComponent().color = new Color(1.0f, 0.0f, 0.0f);
inited = true;
}
// Update is called once per frame
void FixedUpdate()
{
if (inited)
{
transform.position = transform.position + (destinationPoint - transform.position) * 5f * Time.fixedDeltaTime;
if ((transform.position - destinationPoint).sqrMagnitude < 0.1f)
destinationPoint = parentNode.position;
}
}
}
// Ниже часть скрипта, из которого и было обращение к скрипту выше (скрипт HeadMovement - весь не поместился)
void OnTriggerEnter2D(Collider2D col)
{
if (col.gameObject.CompareTag("Food"))
{
if (lastNode == transform)
col.gameObject.tag = "Head";
else
StartCoroutine(SetTagWithDelay(col.transform));
col.transform.GetComponent().Init(lastNode); // Строчка из ошибки
lastNode = col.transform;
}
if (col.gameObject.tag == "Food")
{
mass += massCoin;
randVec.Set(Random.Range(-99.5f, 99.5f), Random.Range(-99.5f, 99.5f));
col.gameObject.transform.position = randVec;
camSize += 0.005f;
}
}
IEnumerator SetTagWithDelay(Transform tr)
{
yield return new WaitForSeconds(0.5f);
tr.gameObject.tag = "Tale";
yield return null;
}
}