Unity Fungus Flowchart не получает сообщение с моим скриптом - PullRequest
1 голос
/ 06 февраля 2020

Я хочу, чтобы мой проигрыватель взаимодействовал с объектом, поэтому я использую Fungus и скрипт, который, когда проигрыватель находится достаточно близко к объекту, и я нажимаю E, посылает сообщение блок-схеме, чтобы активировать блок. Но это не работает.

Сценарий:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class EventTrigger : MonoBehaviour
{
    public bool enter;

    int count = 1;

    // Use this for initialization
    void Start()
    {
        enter = false;
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "Player" || other.gameObject.tag == "NPC")
        {
            enter = true;
            if (enter && Input.GetKeyDown(KeyCode.E))
            {
                Fungus.Flowchart.BroadcastFungusMessage("StartConversation");
            }
        }
        Debug.Log("Entered");
    }
    void OnTriggerExit(Collider other)
    {
        if (other.gameObject.tag == "Player" || other.gameObject.tag == "NPC")
        {
            enter = false;
            count = 1;
        }
        Debug.Log("Exited");
    }
}

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

OnTriggerEnter вызывается один раз, и вы прослушиваете вход только в течение одного кадра. Попробуйте переместить эту часть в Обновление:

if (enter && Input.GetKeyDown(KeyCode.E))
{
    Fungus.Flowchart.BroadcastFungusMessage("StartConversation");
}

или изменить OnTriggerEnter на OnTriggerStay

0 голосов
/ 08 февраля 2020

Я незнаком с Fungus, однако, как уже упоминалось в комментариях, у вас возникли проблемы с вызовом события при столкновении.

Пожалуйста, примите во внимание следующее:

  1. Для вызова OnTriggerXXX коллайдеры должны быть помечены IsTrigger, однако триггерные коллайдеры являются нефизическими, это означает, что если в вашем игровом объекте есть только 1 триггерный коллайдер, другие физические объекты могут проходить через него. их. Чтобы это исправить, вы можете либо добавить второй коллайдер, отметив IsTrigger, либо ИЛИ, вы можете снять отметку IsTrigger и использовать вместо него OnCollisionXXX. Я бы предложил последнее решение.

  2. Убедитесь, что ваши коллайдеры действительно могут столкнуться.

    1. Go для "Правка> Настройки проекта> Физика ", прокрутите вниз, пока не увидите" Матрица столкновений слоев "и убедитесь, что флажок на пересечении слоев ваших объектов установлен.
    2. Убедитесь, что два коллайдера могут фактически сталкиваться во время игры. Это характерно для столкновений персонажей. У ваших персонажей может быть простой физический коллайдер в виде коробки или цилиндра, но у вас есть внутренний коллайдер me sh, который будет триггером на вашем NP C. Таким образом, ваш персонаж игрока никогда не сможет столкнуться с триггером внутри физического коллайдера.
  3. Это может звучать глупо, но убедитесь, что вы добавили свой скрипт для исправления объекта. Я потерял счет того, сколько раз я переживал ненужное разочарование после написания сценария и забывания добавить его в тестовый объект.

Этого должно быть достаточно для обеспечения ваших событий на самом деле называются. Теперь обратите внимание, что, как отмечает Hermesis, вы пытаетесь прочитать ввод в событии с 1 кадром. Вы также используете Input.GetKeyDown(), который также является проверкой 1 кадра, то есть он вернет true в кадре только после изменения состояния ключа.

В вашем коде условие (enter && Input.GetKeyDown(KeyCode.E)) будет иметь значение «истина», только если пользователь нажмет клавишу в том же кадре, где начинается столкновение.

Опять же, как отмечает Hermesis, рассмотрите возможность использования «OnXXXStay» вместо «OnXXXEnter».

Вот несколько советов:

  • Используйте OnXXXEnter, чтобы отобразить сообщение для игрока, чтобы он знал, что он находится в контакте с интерактивным, а также знает, какие клавиши могут делать что.
  • Используйте OnXXXStay, чтобы реагировать на нажатия клавиш только во время столкновения.
  • Используйте OnXXXExit, чтобы удалить сообщение, которое было установлено при столкновении.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...