[С#] Передать значение в другой класс...

программирование C#

(Среда Unity3d)

Есть Class1 c методом

public void UpdateData(int x)
{
GlCoordW = x;
}

В классе2 делаю следующее:

HealthBar _Class1 = new Class1 ();
_Class1.UpdateData(5);

Программа не ругается, ну и действий нет...
Помогите, плиз. Спасибо.

Примечание:
Игорь, тут ещё страннее =/
В лог значение доходит, Более того! При ~примерно таком методе


public int GlCoordW = 0;

public void UpdateData(int x)
{
GlCoordW = x;
Debug.Log(GlCoordW);
}

В Лог GlCoordW приходит изменённое, а на деле остаётся == 0... это нормально?

Примечание:
Это очень странно... в приделах одного класса этот "элемент" имеет два значения! Бредово звучит, но походе это баг Unity (последняя верся). Ибо меняю через утилиты и вывожу на экран - одно значение, а меняю через метод и в лог - другое, причем совершенно не связанные...

Примечание:
Игорь, программист я - самоучка (экономист по образованию), но несколько лет писал на python, при этом один и поэтому никогда не заморачивался об этике "правильных" обозначений. Просто так привык и так удобно. По вопросу: в лог записывает переданное значение, а во ВСЕХ остальных функциях, обновляющихся ежесекундно, остаётся старое значение.

Вот для этого создал отдельные два класса:

*******************************************************************************************
Class1.cs

using UnityEngine;
using System.Collections;

public class Class1 : MonoBehaviour {

public int screen = 1;

void Start ()
{
print("void Start");
Class2 j = new Class2();
j.UpdateData(screen);
}
}
*******************************************************************************************

*******************************************************************************************
Class2.cs

using UnityEngine;
using System.Collections;

public class Class2 : MonoBehaviour {

public int screen2 = 0;

public void UpdateData(int x)
{
screen2 = x;
print(x);
}

void OnGUI()
{
GUI.Label(new Rect(0, 0, 50, 50), "" + screen2); // вывод на экран (обновляется ежесекундно)
}
}

*******************************************************************************************
Результат тот же: в логах 1, на экране - 0.


PetSerAl, а как изменять/использовать нужный экземпляр? ):

Примечание:
>Для этого Вам надо иметь ссылку на тот экземпляр
Ну это крайне логично - проблема почти решена! Осталось узнать как (:

Примечание:
ГОСПОДИ! понял. Я де создаю в Class1 экземпляр Class2, а нужно брать ссылку на созданный Class2! Всем спасибо. Расходимся.
Ответы:
Добавьте в метод UpdateData вывод в лог:
Debug.Log(x)
а как вы узнали, что "на деле остаётся == 0" ??
Без обид, но при таком качестве кода (да, именование переменных — это показатель) я склонен думать, что проблема все-таки не в Unity. :)
Какие действия вы хотите увидеть? Метод UpdateData выполняется. Если вас интересует значение переменной после выполнения метода, то почему этого нет в коде?
>Примечание №2
А Вы в курсе, что каждый экземпляр класса имеет свою собственную копию всех нестатических полей? Возможно Вы просто смотрите значение у разных экземпляров, вот они и не связаны.
>а как изменять/использовать нужный экземпляр?
Для этого Вам надо иметь ссылку на тот экземпляр, который Вы хотите изменять/использовать.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.