нигде не присваивается значение, поэтому всегда null

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

нигде не присваивается значение, поэтому всегда null

Сообщение Сергей Костчев 14 авг 2018, 11:33

Здравствуйте,
по книжке хотел пример перетасовки карт освоить. Установил в коде ссылки, в инспектор перенес нужные объекты. Но VS выдает предупреждение, что полю нигде не присваивается значение, и поэтому оно всегда будет null.
Менял и доступ, и тип на GO и новый экземпляр создавал - в итоге одно и то же.
Из-за того, что значение всегда null, не рассчитывается начальная позиция объекта и в результате карты не рассчитываются от первого объекта, как указано в коде.
Подскажите, пожалуйста

Синтаксис:
Используется csharp
public class SceneController : MonoBehaviour {
    public const int gridRows = 2;
    public const int gridCols = 4;
    public const float offsetX = 2f;
    public const float offsetY = 2.5f;

    public MemoryCard originalCard;
    public Sprite[] images;

   void Start()
    {
       
        Vector3 startPos = originalCard.transform.position;

        for (int i = 0; i < gridCols; i++)
        {
            for (int j = 0; j < gridRows; j++)
            {
                MemoryCard card;
                if (i == 0 && j == 0)
                {
                    card = originalCard;
                }
                else
                {
                    card = Instantiate(originalCard) as MemoryCard;
                }

                int id = Random.Range(0, images.Length);
                originalCard.SetCard(id, images[id]);

                <span style="font-weight: bold">float posX = (offsetX * i) + startPos.x; // в итоге этот startPos всегда ноль и получается не такое расположение, которое нужно
                float posY = -(offsetY * j) + startPos.y;</span> // карты накладываются друг на друга с небольшим сдвигом, вместо того, чтобы дистанцироваться друг от друга
                card.transform.position = new Vector3(posX, posY, startPos.z);
            }
        }
    }
}


http://www.imageup.ru/img100/3147063/me ... d.jpg.html
Сергей Костчев
UNIт
 
Сообщения: 53
Зарегистрирован: 25 июл 2018, 16:38

Re: нигде не присваивается значение, поэтому всегда null

Сообщение Bill Gates 14 авг 2018, 12:29

Инстанцировать надо GameObject, а не скрипт, который на нем висит.


Синтаксис:
Используется csharp
card = (Instantiate(originalCard.gameObject) as GameObject).GetComponent<MemoryCard> ();
Bill Gates
UNIт
 
Сообщения: 127
Зарегистрирован: 16 июл 2015, 11:27

Re: нигде не присваивается значение, поэтому всегда null

Сообщение Сергей Костчев 14 авг 2018, 12:59

Ага, предупреждение ушло, но расстановка карт не изменилась. Видимо, я не там копаю...
Сергей Костчев
UNIт
 
Сообщения: 53
Зарегистрирован: 25 июл 2018, 16:38

Re: нигде не присваивается значение, поэтому всегда null

Сообщение Bill Gates 14 авг 2018, 13:22

Сергей Костчев писал(а):Ага, предупреждение ушло, но расстановка карт не изменилась. Видимо, я не там копаю...


Так увеличь оффсет
Bill Gates
UNIт
 
Сообщения: 127
Зарегистрирован: 16 июл 2015, 11:27

Re: нигде не присваивается значение, поэтому всегда null

Сообщение Сергей Костчев 14 авг 2018, 13:37

а до этого, оффсет никак не реагировал.
Теперь все четко работает, спасибо за помощь!

а за понимание ГО я сейчас конкретнее засяду, чтобы впредь скрипты с gameObject не путать
Сергей Костчев
UNIт
 
Сообщения: 53
Зарегистрирован: 25 июл 2018, 16:38


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: GoGo.Ru [Bot], Yandex [Bot] и гости: 16