У меня есть объект, у которого есть компонент скрипта.Unity3D: Несовместимость переменных скрипта с использованием OnTriggerEnter2D
public class TeleportReference : MonoBehaviour {
private GameObject reference;
void Start() {
reference = null;
}
public void SetReference(GameObject other){
reference = other;
}
public GameObject GetReference(){
return reference;
}
Теперь, если при поиске объекта и проверить переменные сценария
GameObject test = GameObject.FindGameObjectWithTag("Water");
print(test);
print(test.GetComponent<TeleportReference>());
print(test.GetComponent<TeleportReference>().GetReference());
это работает просто отлично и GetReference() возвращает переменную I сохраненную.
Но теперь, если я использую его Whithin OnTriggerEnter2D
private void OnTriggerEnter2D(Collider2D other)
{
if (other.tag == "Water")
{
print(other);
print(other.gameObject);
print(other.GetComponent<TeleportReference>());
print(other.GetComponent<TeleportReference>().GetReference());
}
}
GetReference() возвращает нуль (или другой переменной, которую я использовал при запуске() класса TeleportReference). Все остальные результаты тестирования остаются неизменными.
Может ли кто-нибудь дать подсказку, почему это может случиться? Означает ли это, что GetComponent создал второй экземпляр TeleportReference во втором случае?
Где находится ваш код OnTriggerEnter2D? он прикреплен к объекту с помощью метки «Вода»? он привязан к другому объекту, чем «Вода»? –
Когда коллайдеры входят друг в друга (и если они оба являются триггерами), на каждом из них вызывается 'OnTriggerEnter2D'. Я предлагаю вам 'Debug.Log (other.gameObject.name);' для обеспечения того, чтобы на них вызывали только указанные объекты. Надеюсь, это поможет! – andeart