@ElMigele
студент

Как прописать взаимодействие игрока с объектом?

В игре есть объект (рычаг) и нужно прописать взаимодействие с ним игрока.
Принцип следующий:
Игрок подходит к рычагу, нажимает клавишу взаимодействия и рычаг должен что-то сделать (например открыть дверь).
Код программы взаимодействия с рычагом
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class LeverScript : MonoBehaviour
{
    // Объект на который влияет рычаг
    public GameObject GO;

    public void OnTriggerStay2D(Collider2D coll)
    {
        if (coll.gameObject.tag == "Player")
            {
            if (Input.GetKey(KeyCode.E))
                {
                   // Проверка на наличие Объекта
                    if (GO != null) ChangeGOStat(GO);
                }
            }
        }
    // Функция по изменению статуса объекта на противоположный
    public void ChangeGOStat(GameObject GO)
    {
        GO.gameObject.SetActive(!(GO.gameObject.activeSelf));
    }
}


Проблема - после того как скрипт был заложен в рычаг, в игре при взаимодействии с ним ничего не происходит. Как можно это исправить?
  • Вопрос задан
  • 1097 просмотров
Решения вопроса 2
arusef
@arusef
Novice .NET dev
1. Проверьте, стоит ли у объекта вашего игрока тег "Player".
2. Привязали ли вы в инспекторе (или где-то ещё) объект рычага к GO.
3. Проверьте, является ли коллайдер у рычага триггером, и может ли игрок с ним взаимодействовать.
4. GameObject.activeSelf может иногда возвращать не то значение, если активность объекта установлена не вами, а кем-то в иерархии. Проверьте, нет ли у вас такого, что в SetActive всё время передается false, например.
Для того, чтобы просмотреть значения в ходе исполнения программы, можете воспользоваться выводом отладочной информации Debug.Log
Ответ написан
Комментировать
@ElMigele Автор вопроса
студент
1. Тэг у игрока поставлен "Player";
2. Объект привязан к GO в инспекторе;
3. Коллайдер рычага является тригером и игрок с ним взаимодействует;
4. GameObject.activeSelf меняет свое состояние.

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

Войдите, чтобы написать ответ

Похожие вопросы