Скрипт Unity 3D C # — мой личный участник, кажется, просто чередует 0 с правильным значением

#c# #android #unity3d

#c# #Android #unity-game-engine

Вопрос:

У меня есть скрипт в моем приложении Unity (называется cubemove.cs).

У него есть закрытый член:

 private float z_ref;
  
  • Внутри моего void Awake() у меня есть строка для инициализации: z_ref = (float) 0.0;

В моем приложении установлена кнопка для запуска следующей функции onclick из cubemove.cs

 public void zeroZ()
{
    z_ref = (float) 45.0;
}
  
  • Мой void Update() содержит Debug.Log("z_ref: " z_ref.ToString());

Когда я запускаю приложение и просматриваю выходные данные отладки, сначала это только печать z_ref: 0 . Это ожидаемо, поскольку именно для этого я инициализировал значение. Затем, когда я нажимаю кнопку в приложении (что приводит к выполнению zeroZ ()), я ожидаю, что теперь он напечатает 45. Вместо этого он чередуется между 45 и 0.

Вот изображение вывода отладки после нажатия кнопки

  • До нажатия кнопки все было равно 0.

В моей исходной программе на самом деле было больше кода, когда я впервые столкнулся с этой проблемой со случайным изменением моего z_ref (оно не было исправлено на 45, zeroZ () была более сложной функцией и т.д.). Однако даже после того, как я изменил свой файл cubemove.cs на следующий приведенный ниже код, я все еще вижу точно такое же поведение z_ref, чередующееся между 0 и значением, которым оно должно быть.

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


public class cubemove : MonoBehaviour
{ 
    private float z_ref;

    void Awake()
    {
        z_ref = (float) 0.0;
    }
    void Start()
    {
    }
    void Update()
    {
        Debug.Log("z_ref: "   z_ref.ToString());
    }
    public void zeroZ()
    {
        z_ref = (float) 45.0;
    }
}
  

После zeroZ() вызова не должно быть причин, по которым z_ref должен отображаться как любое значение, отличное от 45. Что именно здесь происходит?

В случае, если это актуально, моей целью сборки является Android (изображение для вывода отладки из logcat).

Комментарии:

1. Есть ли у вас какие-либо другие объекты с этим скриптом на нем?

2. Я предполагаю, что есть 2 экземпляра cubemove .

3. @HeejaeKim, вероятно, прав. Запишите идентификатор экземпляра или хэш-код, чтобы проверить, тот ли это сценарий.

4. Да, на самом деле было два экземпляра cubemove , глупый я. Проблема решена.

Ответ №1:

Как указано в комментарии, проблема была связана с несколькими экземплярами cubemove (это было связано с более чем одним gameobject, но я тогда не понял).