В чем подвох? А?

Рейтинг: -1Ответов: 1Опубликовано: 21.01.2023

Прохожу сейчас книгу "Разработка игр на unity 2018 за 24 часа". Одно из практических заданий: Сейчас мы создадим интерактивное приложение, в котором используется движение и триггеры. Упражнение требует, чтобы вы творчески подошли к поиску решения (потому что здесь оно не представлено). Если вы оказались в тупике и нуждаетесь в помощи, вы можете обратиться к файлам примеров для часа 9.

  1. Создайте новый проект или сцену. Добавьте на сцену куб и поместите его в позицию с координатами (–1,5, 0, –5). Задайте кубу масштаб (0,1, 2, 2) и присвойте ему имя LTrigger.
  2. Продублируйте куб (щелкнув правой кнопкой мыши по кубу на панели Hierarchy и выбрав команду Duplicate). Назовите новый куб RTrigger и поместите его в позицию с координатами (1,5, 0, –5).
  3. Добавьте на сцену сферу и поместите ее в позицию с координатами (0, 0, –5). Добавьте в сферу компонент Rigidbody и сбросьте флажок Use Gravity.
  4. Создайте скрипт под названием TriggerScript и прикрепите его к объектам LTrigger и RTrigger. Создайте скрипт под названием MotionScript и прикрепите его к сферe
    1. Теперь начинается самое интересное. Вам нужно создать в игре следующие функциональные возможности. Игрок должен иметь возможность перемещать сферу с помощью клавиш со стрелками. Когда сфера входит в один из триггеров, покидает его или остается в нем, в консоль должно выводиться соответствующее сообщение: имя триггера (LTrigger или RTrigger) и тип взаимодействия (вход, выход, нахождение внутри). В этом упражнении есть небольшой подвох, который вам придется преодолеть, чтобы справиться с задачей

Сделал все по инструкции, введите сюда описание изображения

Код:

public class MovementScript : MonoBehaviour
{
    void Update ()
    {
        float mX = Input.GetAxis("Mouse X") / 10f;
        float mY = Input.GetAxis("Mouse Y") / 10f;
        transform.Translate(mX, mY, 0);
    }
}



 public class TriggerScript : MonoBehaviour
{
    private void OnTriggerEnter2D(Collider2D collision)
    {
        print(gameObject.name + " enter");
    }

    private void OnTriggerStay2D(Collider2D collision)
    {
        print(gameObject.name + " stay");
    }

    private void OnTriggerExit2D(Collider2D collision)
    {
        print(gameObject.name + " exit");
    }
}

Так вот, сфера просто проходит через триггеры и им вообще все равно. Я мог бы скипнуть данное упражнения, но ответа в интернете нет, а в решениях к задаче код аналогичный.Это уже дело принципа, может знает кто в чем тут дело?

Ответы

▲ 1

Вот начало решения. Дальше сам пропиши OnTriggerStay и т.д

public class TriggerScript : MonoBehaviour
{
    public string myName;

    // Start is called before the first frame update
    void Start()
    {
        myName = gameObject.name;
    }


    private void OnTriggerEnter(Collider other)
    {
        if (other) { print(myName + " Enter"); }
    }
}