Как настроить триггеры для создания интерактивных объектов в Unity3D? - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь создать сценарий, который при размещении на объекте с коллайдером позволит игроку взаимодействовать с ним.Я хочу использовать триггеры для этого.На данный момент я просто хочу, чтобы он выводил «взаимодействовать» с консолью, как только он достигает определенного диапазона, по какой-то причине он этого не делает.Я даже пытался установить его в player.position =!null и player.position == null, и в обоих случаях он не будет выводиться на консоль.

вот интерактивный код

void update(){

        float distance = Vector3.Distance(player.position, transform.position); 
        if (distance <= radius)
        {
            Debug.Log("INTERACT");
        }

} 
public void OnTriggerStay(Collider other) {
    isFocused = true;
    player = other.GetComponent<Transform>();

}

, а вот код для взаимодействия игрока с коллайдером

public void OnTriggerStay(Collider interactionCollider){
    interactable = interactionCollider.GetComponent<Interactable>();
    if(Input.GetKeyDown("f")){
        if(interactable!=null){
            Debug.Log("yay");
        }
    }
}

«Yay» печатается, когда янажмите f и я в другом коллайдере.

1 Ответ

0 голосов
/ 08 декабря 2018

То, что вы делаете, правильно на 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;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...