Происходит непонятная вещь с переменной: ее значение чередуется из шага в шаг C#

184
30 июня 2022, 20:30

Сначала введу в курс дела. (Значения переменных не имеют смысла, так проще для понимания)

public class Calculateheal : MonoBehaviour  
{
   private int InHome = 5;
   public void SetLocationHome (int IsHome)   //Метод, который используется в классе OnTriggerHome для 
   //установки значения переменной InHome
    {
        InHome = IsHome;      
        Debug.Log(InHome); //стандартная функция Unity, чтобы выводить значения в консоль Unity.
    }
    private void FixedUpdate()  //Стандартная функция, которая срабатывает определенное кол-во раз в сек
    {
        InHome += 1;    //прибавляем просто чтобы значение изменялось
        
        if (InHome > 100) 
        {
            Debug.Log("Warm");
            Debug.Log(InHome);    //выводим в консоль значение    (Тут еще стоит точка останова)
        }
     }
}
public class OnTriggerHome : MonoBehaviour 
{
    public GameObject Hero;  //экземпляр объекта, большой роли в моей проблеме он не играет(наверное)
    private void OnTriggerEnter2D(Collider2D collision)//метод юнити, который срабатывает, когда входят в 
  //область  
    {
        Calculateheal inHome = Hero.GetComponent<Calculateheal>();   //создаем компонент класса
        inHome.SetLocationHome(1); //вызываем функцию, которая устанавливает значение 
    }
    private void OnTriggerExit2D(Collider2D other)//метод юнити, который срабатывает, когда выходят из
  //область  
    {
        Calculateheal inHome = Hero.GetComponent<Calculateheal>();  //создаем компонент класса  
        inHome.SetLocationHome(25);  //вызываем функцию, которая устанавливает значение 
    }                                       
}

Проблема такая: Сначала все идет нормально: переменная InHome увеличивается на 1. Но, когда игрок заходит в область(срабатывает метод OnTriggerEnter2D в классе OnTriggerHome, который вызывает метод SetLocationHome) у переменной InHome появляется второе значение, которое чередуется из шага в шаг(Шаг - это когда 1 раз срабатывает метод FixedUpdate). Поясню. Когда я дебажил код наблюдал такое:

  1. Запускаю, все ок.
  2. Захожу в область(срабатывает метод OnTriggerEnter2D в классе OnTriggerHome, который вызывает метод SetLocationHome)
  3. Переменная InHome увеличивается до 100 и после начинает работать точка останова. Я пропускаю около 30 шагов
  4. И тут происходит странность:

1 шаг: InHome = 126(допустим, не имеет большого смысла)

2 шаг: InHome = 101

3 шаг: InHome = 127

4 шаг: InHome = 102

5 шаг: InHome = 128

6 шаг: InHome = 103

И т.д.

Когда я использовал переменную типа bool, то она чередовала значение между true и false. Если переменную не изменять в методе FixedUpdate, то она чередует значения между изначальным значением(значением, с которым ее создали) и значением, которая она получила в методе SetLocationHome.

Answer 1

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

    private void OnTriggerEnter2D(Collider2D collision)
    {
       if(collision.transform.tag == "My Tag")
        {
        Calculateheal inHome = Hero.GetComponent<Calculateheal>();   
        inHome.SetLocationHome(1); 
        }
    }
READ ALSO
С какой частотой обновляется метод

С какой частотой обновляется метод

С какой частотой будет обновляться метод в юнити, если его не вывести в FixedUpdate() и Update()

157
Как выгрузить изображение из postgres в picturebox c#

Как выгрузить изображение из postgres в picturebox c#

Я пытаюсь получить изображение из postgresql с помощью C #

148
.NET 5 Указание директивы в разных файлах

.NET 5 Указание директивы в разных файлах

Изначально, я шёл сюда за ответом на вопрос "NET 5 не видит SqlConnection"

161
Post запрос на Steam (С#)

Post запрос на Steam (С#)

Хочу написать бота, с разным функционалом, для своих нужд для SteamОдна из функций это спам в этот Топик

243