То, что вы делаете, правильно на 99%.Тем не менее, я бы порекомендовал иметь сценарий триггера взаимодействия на вашем интерактивном объекте вместо проигрывателя. Это позволит вам иметь несколько взаимодействий, все с разными кодами ввода, а не только на проигрывателе 1.
Если вы проверяетена определенном расстоянии более очевидно использовать функции входа и выхода для коллайдеров / триггеров.Затем в вашем Update () вам нужно только проверить, находится ли игрок в коллайдере / триггере, с помощью простого логического сравнения.
В вашем коллайдере / триггере для входа и выхода эффективнее использовать переменные объекта, которыебыл отправлен в качестве параметра.Это позволяет легко выбирать то, что сравнивается, и не требует ненужного вызова функции, GetComponent <> ();
Некоторые примеры кода ниже для справки.
//Flag used to tell if the object can be interacted with or not.
public bool isInteractable = false;
void Update()
{
//Checks if the player is in the collider and also if the key is pressed.
if(isInteractable && Input.GetKeyDown(KeyCode.F))
{
//personalized code can go in here when activated.
Debug.Log("Interact");
}
}
/// <summary>
/// Is called when there is an object that enters the collider's borders.
/// </summary>
/// <param name="other"></param>
private void OnTriggerEnter(Collider other)
{
//Compares the tag of the object entering this collider.
if(other.tag == "Player")
{
//turns on interactivity
isInteractable = true;
}
}
/// <summary>
/// Is called when there is an object that leaves the collider's borders.
/// </summary>
/// <param name="other"></param>
private void OnTriggerExit(Collider other)
{
//compares the tag of the object exiting this collider.
if(other.tag == "Player")
{
//turns off interactivity
isInteractable = false;
}
}