Синтаксис:
Используется csharp
public class Interaction : MonoBehaviour
{
public Image indicator;
public Text messageText;
RaycastHit hit;
public KeyCode control = KeyCode.E;
public float RayDist = 1.0f;
void Update()
{
if (Physics.Raycast(transform.position, transform.forward, out hit, RayDist))
{
if (hit.collider.tag == "Item")
{
indicator.enabled = true;
messageText.text = hit.collider.GetComponent<Item>().messageText;
if (Input.GetKeyDown(control))
{
hit.collider.GetComponent<Item>().Interaction();
}
}
else
{
indicator.enabled = false;
messageText.text = "";
}
}
}
private void OnDrawGizmos()
{
Gizmos.color = Color.white;
Gizmos.DrawRay(transform.position, transform.forward * RayDist);
}
public void Use()
{
hit.collider.GetComponent<Item>().Interaction();
}
}
{
public Image indicator;
public Text messageText;
RaycastHit hit;
public KeyCode control = KeyCode.E;
public float RayDist = 1.0f;
void Update()
{
if (Physics.Raycast(transform.position, transform.forward, out hit, RayDist))
{
if (hit.collider.tag == "Item")
{
indicator.enabled = true;
messageText.text = hit.collider.GetComponent<Item>().messageText;
if (Input.GetKeyDown(control))
{
hit.collider.GetComponent<Item>().Interaction();
}
}
else
{
indicator.enabled = false;
messageText.text = "";
}
}
}
private void OnDrawGizmos()
{
Gizmos.color = Color.white;
Gizmos.DrawRay(transform.position, transform.forward * RayDist);
}
public void Use()
{
hit.collider.GetComponent<Item>().Interaction();
}
}
Дабы сильно не морочить голову с интеративом, я решил просто продублировать вызов, выполянемый при интерактиве. Это работает, но при каждом нажатии UI кнопки действия в консоли я вижу сообщение:
NullReferenceException: Object reference not set to an instance of an object
Interaction.Use () (at Assets/Scripts/Interaction/Interaction.cs:44)
Строка 44 это как раз строка "hit.collider.GetComponent<Item>().Interaction();". Опять же скажу, что код работает более чем прекрасно, но консоль не даёт покоя.
Я как вариант пробовал вместо:
Синтаксис:
Используется csharp
public void Use()
{
hit.collider.GetComponent<Item>().Interaction();
}
{
hit.collider.GetComponent<Item>().Interaction();
}
Синтаксис:
Используется csharp
public void Use()
{
if (hit.collider.tag == "Item")
{
hit.collider.GetComponent<Item>().Interaction();
}
}
{
if (hit.collider.tag == "Item")
{
hit.collider.GetComponent<Item>().Interaction();
}
}
В целом это не столь критично, столько любопытно понять, почему же происходит этот эфффект памяти или как ещё можно убрать эту ошибку...