Missing reference exception unity как исправить

$begingroup$

I have been making a C# script that attacks the player in Unity. However, with the following code I got the following error message:

“The object of type ‘GameObject’ has been destroyed but you are still trying to access it.

Here is my code:

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

public class attackPlayer : MonoBehaviour {

    GameObject Enemy;
    GameObject Player;

    void Start ()
    {
        Enemy =  GameObject.FindWithTag ("Enemy");
        Player = GameObject.FindWithTag ("Player");
    }

    void Update ()
    {
        var heading = Enemy.transform.position.x - Player.transform.position.x;
        if (heading > 0.0f && heading < 5.0f) 
        {
            Explode ();
        }
    }

    void Explode() 
    {
        var exp = GetComponent <ParticleSystem>();
        exp.Play ();

        Destroy (gameObject,exp.main.duration);
        Destroy(Player);
    }

    void OnCollisionEnter2D (Collision2D col)
    {
        if (col.gameObject.tag == "Player") 
        {
            Explode ();
        }
    }
}

asked Mar 30, 2017 at 7:32

Haileapp's user avatar

$endgroup$

$begingroup$

In Explode, you destroy the Player game object. In Update, you calculate the distance between the enemy and the player: var heading = Enemy.transform.position.x - Player.transform.position.x;. This calculation still references the player, which is destroyed in Explode.

I’m not very familiar with Unity techniques on handling this, but I could see that one solution is to set Player = null; after calling Destroy(Player); and checking if Player is not null in Update before doing the calculation.

answered Mar 30, 2017 at 7:50

$endgroup$

2

You must log in to answer this question.

Not the answer you’re looking for? Browse other questions tagged

.

I’m trying to create Arkanoid 3d game using Unity with C#. I’ve created simple Menu (Scene 0), where I can start my game, my main scene where actual game takes place(Scene 1) and Scoreboard (Scene 2), which is shown after losing all 3 balls Player has at start. After pressing any key i go back to Menu and can start game again. And this is where problem begins.

During second game after loosing 1st ball, my game goes crazy. I get loads of “MissingReferenceException”s like one below (but some linked to other objects (like GUIText’s etc):

MissingReferenceException: The object of type 'Player' has been destroyed but
you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.
Player.BallLost () (at Assets/Player/Player.cs:164)
GameEventManager.TriggerBallLost () (at Assets/Menagers/GameEventManager.cs:30)
Ball.Update () (at Assets/Ball/Ball.cs:47)

I noticed loads of MissingReferenceExceptions that are casued by not assigning variables. But this feels kinda diffrent for me since it all works perfectly during “1st play”. What can cause this problem? I cheked in inspector after launching game for the second game and all variables are assigned to objects.

I’m not sure if shoudl insert game code since it has grown rather big and is split into >10 scripts.

Unity пересоздает объекты, но не обновляет ссылки

Здравствуйте.

Беспокоит одна проблема уже давно, но я ее избегал)

Пример:
2 сцены: одна с меню, другая игровая.
Из меню загружаю игровую сцену в single mode, играю, выхожу в меню, захожу снова и ссылки, которые висят в редакторе, все ещё есть, но объекты, к которым они обращаются уже удалены при выгрузки сцены в прошлый раз, соответственно Missing Reference Exception.
Те ссылки, которые кэшируются в Start, пропадают таким же образом, потому что (интересно, почему), Start второй раз не вызвался при второй загрузке сцены.
Может кто-нибудь объясянить, что это за дичь? Не делать же всю сцену неубиваемой и не делать же аддитивной игровую сцену…

Спасибо

recstazy
UNец
 
Сообщения: 6
Зарегистрирован: 16 фев 2019, 17:53

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение TheMamont 21 июл 2019, 08:23

Почитай про DontDestroyOnLoad

TheMamont
UNITрон
 
Сообщения: 198
Зарегистрирован: 21 мар 2019, 09:00

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение recstazy 21 июл 2019, 09:39

Еще раз) не прибегая к неубиваемости (Don’t destroy on load) всех объектов в сцене, связанных ссылками редактора (получится костыль, если половина сцены не будет удаляться, который потребует другой костыль определяющий, что уже есть в сцене, а что нет, это называется говнокод).

Почему ссылки в сцене слетают при переинстанциироввнии объектов при повторной загрузке сцены, если в самой сцене указано, на какие объекты ссылки должны указывать?
почему они указывают на объекты, которые были в сцене еще при прошлой загрузке, если сцена была выгружена и загружена снова?
Почему Start не вызыввется второй раз?

P.s. Пример: пропадает ссылка на UI.ViewPort, на который ссылается ScrollView, это нативный ui юнити и он отваливается. Предложите не удалять его при переходе обратно в меню из игровой сцены?

recstazy
UNец
 
Сообщения: 6
Зарегистрирован: 16 фев 2019, 17:53

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение TheMamont 21 июл 2019, 10:40

recstazy писал(а):Еще раз) не прибегая к неубиваемости (Don’t destroy on load) всех объектов в сцене, связанных ссылками редактора (получится костыль, если половина сцены не будет удаляться, который потребует другой костыль определяющий, что уже есть в сцене, а что нет, это называется говнокод).

Почему ссылки в сцене слетают при переинстанциироввнии объектов при повторной загрузке сцены, если в самой сцене указано, на какие объекты ссылки должны указывать?
почему они указывают на объекты, которые были в сцене еще при прошлой загрузке, если сцена была выгружена и загружена снова?
Почему Start не вызыввется второй раз?

P.s. Пример: пропадает ссылка на UI.ViewPort, на который ссылается ScrollView, это нативный ui юнити и он отваливается. Предложите не удалять его при переходе обратно в меню из игровой сцены?

Попробуй сделать префабы всех своих объектов. А если уже в префабах то попробуй давать ссылки на префабы, а не объекты со сцены.

TheMamont
UNITрон
 
Сообщения: 198
Зарегистрирован: 21 мар 2019, 09:00

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение recstazy 23 июл 2019, 05:18

Все еще звучит, как костыль) хорошо, спасибо)

recstazy
UNец
 
Сообщения: 6
Зарегистрирован: 16 фев 2019, 17:53

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение TheMamont 23 июл 2019, 15:08

recstazy писал(а):Все еще звучит, как костыль) хорошо, спасибо)

Отпишись потом,как оно.

TheMamont
UNITрон
 
Сообщения: 198
Зарегистрирован: 21 мар 2019, 09:00

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение AngryCat 23 июл 2019, 17:27

recstazy писал(а):Все еще звучит, как костыль) хорошо, спасибо)

то что ты делаешь это костыль. А это адекватный способ.

Здесь могла бы быть ваша реклама.

Аватара пользователя
AngryCat
Старожил
 
Сообщения: 713
Зарегистрирован: 20 июл 2018, 22:29
Skype: Дискорд – Флеш#4099

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение recstazy 03 авг 2019, 17:28

В общем, я уже сделал специальный контейнер со ссылками на все объекты, к которым нужны ссылки через редактор. Я сделал, чтобы при передаче ссылки он проверял на null и искал объект поновой через GameObject.Find(), но после перезагрузки сцены, он почему-то думает, что объект всё еще существует (ссылка не null) и не ищет его заново, однако при обращении к полученной “проверенной” моим референс менеджером ссылке (проверка производится прямо при передаче ссылки), я получаю Missing reference exception, ругается что объект удален, а я ссылку к нему дергаю.
Кэширую ссылку через OnEnable, чтобы оно вызывалось во второй раз после перезагрузки сцены.

Бомбит так, что стул прожгло уже.

По поводу костыля:
хорошо, давайте представим, что я пытаюсь делать это через инстанциирование из префаба:
-объект находится в канвасе, это ведь нативный scrollView
-объект, который хочет с ним взаимодействовать – просто в иерархии вне канваса.
-мне что создать префаб, который содержит в себе практически все объекты на сцене, или что?

скрин:

https://drive.google.com/file/d/1NBAK5J … sp=sharing

recstazy
UNец
 
Сообщения: 6
Зарегистрирован: 16 фев 2019, 17:53

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение recstazy 05 авг 2019, 06:09

Сделал вчера, чтобы ссылки на объекты не ккшировались в классах, а через свойство дёргались из референс менеджера. Заработало. Но утром пришла в голову идея фикс. Есть подозрение, что ссылки Теряются только между объектами, у которых нет общего парента. Надо попробовать все объекты в иерархии повесить на один пустой рут. Как проверю – отпишу)

recstazy
UNец
 
Сообщения: 6
Зарегистрирован: 16 фев 2019, 17:53

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение recstazy 23 авг 2020, 21:09

Дело было давно и я забыл тогда отписать. Ответ был простым: я рукожоп. Мы юзали у себя UniRX и я просто не знал, что надо отписываться от потоков и диспозить их. Объекты в памяти оставались и сборщик их не собирал. Впредь перед тем, как материть юнити, я ищу проблему в своем коде. Простите и спасибо за попытки помочь.

recstazy
UNец
 
Сообщения: 6
Зарегистрирован: 16 фев 2019, 17:53

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение Razor89 15 июн 2021, 21:34

Шел 2к21 год, проблема все еще актуальна!
После перезагрузки сцены, а именно использование метода UnloadSceneAsync а следом за ним LoadSceneAsync с параметром additive, ссылки на обьекты чудесным образом пропадают в префабах сцены где они были кешированы вручную(в моем случае визуально их видно, а при попытке доступа к ним редактор пишет фигу), а именно я сделал массив List, напихал туда 10 префабов GameObject*а вручную, ссылки на которые пропадают после перезагрузки сцены. Если попробовать вызвать List.Count, вернет кол-во из массива в памяти сцены который был до перезагрузки самой сцены, то есть оно ссылается на массив в памяти, которого фактический уже не должно быть. Чтоб закрепить: если выдеррнуть из массива List несколько обьектов (сделать Remove) и потом перезагрузить сцену, оно блин вернет кол-во из того же массива в памяти(который по какой то причине не был уничтожен при UnloadSceneAsync втф), а не из массива который должен был создаться заново вместе с перезагрузкой сцены.(допустим если изначально я запихал туда 11 gameobject, то и после перезагрузки оно должно показывать в List.Count = 11 а не 7, которые оставались до перезагрузки сцены, но оно показывает 7 Карл…а визуально их 11 в редакторе, это никакие не static классы, обычный класс MonoBehaviour который висит на UI и который должен пересоздаваться вместе со сценой каждый раз) Оно продолжает ссылаться на уже несуществующий массив в памяти. Полный бред. Соответственно ничего в таких условиях правильно работать не будет. Как с этим бороться я понятия не имею. Кроме тупых костылей, которые будут только мешать в проекте.
ps Ах да, в моем случае это все тоже происходит внутри объекта канваса, то есть в его дочернем обьекте, не знаю, может быть это важно. Еще ошибок никаких не пишет, но если попытаться взять Last обьект из массива, ничего не произойдет.
Версия этого недоразумения 2020.3.11f1 а еще на этой чудесной версии, если изменить скрипт, но не выключить play mode, то получите зависание которое может длится до 5-10 минут, то есть можно сразу ребутать юнити и заново запускать. По крайне мере у меня так происходит, которая самая что ни на есть актуальная версия для 2к21 года LTS. Лучше нее юнитеки еще не предложили ничего в формате LTS и которая по идее не должна так баговать априори.
Как можно такое в продакшн выпускать, с такими косяками в памяти…это ладно еще у меня проект дорелизный, и в случае чего можно релиз перенести, а если это произойдет в проекте где апдейт уже выкатывать надо со дня на день, там вообще чокнуться можно, либо не называйте версию LTS, на нее уже кучу багов на оф форуме отрепортили, такого давно не было в истории юнити. Но, в случае с этим конкретным багом, я подозреваю, что его не фиксили с 2019.

Razor89
UNец
 
Сообщения: 14
Зарегистрирован: 15 июн 2014, 18:08

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение Alkos26Rus 16 июн 2021, 00:16

Какие то прям чудеса происходят. Если что то подобное происходит, нужно отбросить возможность именно твоей ошибки, а то многие так пишут, а потом оказывется что сами накосячили. Создай пустой проект и повтори условия этого бага, если баг в наличии, значит проверь то же самое в другой версии юнити, если в другой версии этот баг пропал, то значит проблема в нынешней версии и остается только ждать обновления с фиксом, либо откатываться на старую версию, если есть бэкапы, вродеж логика простая. Можешь добавит промежуточную сцену, может баг пропадет.

Единица – ноль

Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1549
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение Razor89 16 июн 2021, 01:19

Alkos26Rus писал(а):Какие то прям чудеса происходят. Если что то подобное происходит, нужно отбросить возможность именно твоей ошибки, а то многие так пишут, а потом оказывется что сами накосячили. Создай пустой проект и повтори условия этого бага, если баг в наличии, значит проверь то же самое в другой версии юнити, если в другой версии этот баг пропал, то значит проблема в нынешней версии и остается только ждать обновления с фиксом, либо откатываться на старую версию, если есть бэкапы, вродеж логика простая. Можешь добавит промежуточную сцену, может баг пропадет.

Это конечно все интересно, что вы предлагаете. Только если проект уже настроен под определенную версию, может быть сложно откатываться на какую либо другую версию Unity, даже если там этого бага нет. Если мы говорим не о прототипе а о полноценном большом проекте, такими переносами можно месяцами заниматься в случае с масштабным проектом. Кроме обновленного API, как правило еще много других компонентов проекта приходится настраивать под конкретную версию движка. Между версией с LTS и любой другой версией обычно очень много разного. С ваших слов все просто, но на деле это может быть баг который воспроизводится только в конкретном проекте и появляется в проекте только при определенных условиях. И если попробовать воспроизвести в пустом проекте, вполне возможно будет работать. Не всегда логическую цепочку бага можно так вот просто отследить. Особенно когда мы говорим о работе с памятью. И я написал только с той целью, чтобы это прокомментировали люди которые возможно столкнулись с чем то подобным.
Я не думаю, что есть какая то вероятность моей ошибки, и на это есть весомые аргументы. Потому что скрипт с кешированными префабами находится в одной сцене, и я эту сцену выгружаю и загружаю обратно, после этого баг появляется. Ничего другого в проекте не происходит, что могло бы хоть как то повлиять на этот скрипт извне. Перед тем как писать, я 10 раз перепроверил и задебажил все, что мог. Я по пунктам в дебаге знаю, в какой момент ссылка на массив пропадает. И это действительно чудеса, те, кто в них не верил, рано или поздно с ними сталкиваются :))
И вероятно этот баг связан с канвасом и его дочерними объектами, что-то неведомое происходит иногда с объектами которые являются дочерними какому либо канвасу когда их спавнишь динамический, это я замечал и ранее. Воспроизвести трудно зачастую, но иногда что то случается неведомое. Думаю это все из за работы с памятью, так или иначе. Возможно сборщик мусора как то задействован.

Razor89
UNец
 
Сообщения: 14
Зарегистрирован: 15 июн 2014, 18:08

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение DbIMok 16 июн 2021, 13:48

так если вы уверены, все продебажено и понятно, набросайте простой воспроизводящий примерчик, мы тоже на него посмотрим, возможно что-то подскажем. не хотите нам показывать, отправьте его в багтрекер, чтобы вам сказали, что вы делаете не так, либо что это их ошибка и они ее исправят. а вот, так, на словах описать проблему – хз кто виноват, юнити или ваш код.

Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6341
Зарегистрирован: 31 июл 2009, 14:05

Re: Unity пересоздает объекты, но не обновляет ссылки

Сообщение Razor89 17 июн 2021, 20:54

DbIMok писал(а):так если вы уверены, все продебажено и понятно, набросайте простой воспроизводящий примерчик, мы тоже на него посмотрим, возможно что-то подскажем. не хотите нам показывать, отправьте его в багтрекер, чтобы вам сказали, что вы делаете не так, либо что это их ошибка и они ее исправят. а вот, так, на словах описать проблему – хз кто виноват, юнити или ваш код.

Не получится такой примерчик сделать, как я писал выше, это происходит из за работы с памятью. И чтобы воспроизвести все действия с памятью нужно фактический еще один большой проект делать, у меня нет на это времени. Я попробовал сделать небольшой пример, там все работает, но это не о чем не говорит от слова – совсем. Вы же понимаете, что память на участки делится, и все инструкции распределены на более низком уровне, и четко отследить какое конкретно действие в памяти способствует результату когда кешированная ссылка в юнити теряется и начинает вести на несуществующий массив, чтоб такое воспроизвести в другом проекте и точно отследить саму последовательность действий работы с памятью, нужно выполнить огромное кол-во действий, и это отдельная долгая работа, ну это очень сложно. С моей стороны я сделал все возможное как непосредственный разработчик проекта, и на уровне юнити я знаю в какой момент конкретно в моем проекте ссылки теряются. Так-же зафиксировал, что никаких действий извне не происходит, которые как то влияют на это. Сам факт того, что это происходит зафиксирован. С этим могут не столкнутся подавляющее большинство других разработчиков, потому что скорее всего тут речь идет об определенных условиях, которые в один момент совпадают, что-то происходит, и ссылки теряются на референсы. Вот и все, как я это вижу.
На самом деле у меня нет времени всем этим занматься и что-то тестировать, узнавать. Конкретно в моем случае скорее всего я поменяю реализацию с обычного класса на реализацию со scriptable object, и сделаю все это статичным в памяти насколько возможно, да и все. Но, интересно, вдруг еще у кого то подобное бывало.

Razor89
UNец
 
Сообщения: 14
Зарегистрирован: 15 июн 2014, 18:08


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 33



Value type vs Reference type

In many programming languages, variables have what is called a “data type”. The two primary data types are value types (int, float, bool, char, struct, …) and reference type (instance of classes). While value types contains the value itself, references contains a memory address pointing to a portion of memory allocated to contain a set of values (similar to C/C++).

For example, Vector3 is a value type (a struct containing the coordinates and some functions) while components attached to your GameObject (including your custom scripts inheriting from MonoBehaviour) are reference type.

When can I have a NullReferenceException?

NullReferenceException are thrown when you try to access a reference variable that isn’t referencing any object, hence it is null (memory address is pointing to 0).

Some common places a NullReferenceException will be raised:

Manipulating a GameObject / Component that has not been specified in the inspector

// t is a reference to a Transform.
public Transform t ;

private void Awake()
{
     // If you do not assign something to t
     // (either from the Inspector or using GetComponent), t is null!
     t.Translate();
}

Retrieving a component that isn’t attached to the GameObject and then, trying to manipulate it:

private void Awake ()
{
    // Here, you try to get the Collider component attached to your gameobject
    Collider collider = gameObject.GetComponent<Collider>();

    // But, if you haven't any collider attached to your gameobject,
    // GetComponent won't find it and will return null, and you will get the exception.
    collider.enabled = false ;
}

Accessing a GameObject that doesn’t exist:

private void Start()
{
    // Here, you try to get a gameobject in your scene
    GameObject myGameObject = GameObject.Find("AGameObjectThatDoesntExist");

    // If no object with the EXACT name "AGameObjectThatDoesntExist" exist in your scene,
    // GameObject.Find will return null, and you will get the exception.
    myGameObject.name = "NullReferenceException";
}

Note: Be carefull, GameObject.Find, GameObject.FindWithTag, GameObject.FindObjectOfType only return gameObjects that are enabled in the hierarchy when the function is called.

Trying to use the result of a getter that’s returning null:

var fov = Camera.main.fieldOfView;
// main is null if no enabled cameras in the scene have the "MainCamera" tag.

var selection = EventSystem.current.firstSelectedGameObject;
// current is null if there's no active EventSystem in the scene.

var target = RenderTexture.active.width;
// active is null if the game is currently rendering straight to the window, not to a texture.

Accessing an element of a non-initialized array

private GameObject[] myObjects ; // Uninitialized array

private void Start()
{
    for( int i = 0 ; i < myObjects.Length ; ++i )
        Debug.Log( myObjects[i].name ) ;
}

Less common, but annoying if you don’t know it about C# delegates:

delegate double MathAction(double num);

// Regular method that matches signature:
static double Double(double input)
{
    return input * 2;
}

private void Awake()
{
    MathAction ma ;

    // Because you haven't "assigned" any method to the delegate,
    // you will have a NullReferenceException
    ma(1) ;

    ma = Double ;

    // Here, the delegate "contains" the Double method and
    // won't throw an exception
    ma(1) ;
}

How to fix ?

If you have understood the previous paragraphes, you know how to fix the error: make sure your variable is referencing (pointing to) an instance of a class (or containing at least one function for delegates).

Easier said than done? Yes, indeed. Here are some tips to avoid and identify the problem.

The “dirty” way : The try & catch method :

Collider collider = gameObject.GetComponent<Collider>();

try
{
    collider.enabled = false ;
}       
catch (System.NullReferenceException exception) {
    Debug.LogError("Oops, there is no collider attached", this) ;
}

The “cleaner” way (IMHO) : The check

Collider collider = gameObject.GetComponent<Collider>();

if(collider != null)
{
    // You can safely manipulate the collider here
    collider.enabled = false;
}    
else
{
    Debug.LogError("Oops, there is no collider attached", this) ;
}

When facing an error you can’t solve, it’s always a good idea to find the cause of the problem. If you are “lazy” (or if the problem can be solved easily), use Debug.Log to show on the console information which will help you identify what could cause the problem. A more complex way is to use the Breakpoints and the Debugger of your IDE.

Using Debug.Log is quite useful to determine which function is called first for example. Especially if you have a function responsible for initializing fields. But don’t forget to remove those Debug.Log to avoid cluttering your console (and for performance reasons).

Another advice, don’t hesitate to “cut” your function calls and add Debug.Log to make some checks.

Instead of :

 GameObject.Find("MyObject").GetComponent<MySuperComponent>().value = "foo" ;

Do this to check if every references are set :

GameObject myObject = GameObject.Find("MyObject") ;

Debug.Log( myObject ) ;

MySuperComponent superComponent = myObject.GetComponent<MySuperComponent>() ;

Debug.Log( superComponent ) ;

superComponent.value = "foo" ;

Even better :

GameObject myObject = GameObject.Find("MyObject") ;

if( myObject != null )
{
   MySuperComponent superComponent = myObject.GetComponent<MySuperComponent>() ;
   if( superComponent != null )
   {
       superComponent.value = "foo" ;
   }
   else
   {
        Debug.Log("No SuperComponent found onMyObject!");
   }
}
else
{
   Debug.Log("Can't find MyObject!", this ) ;
}

Sources:

  1. http://answers.unity3d.com/questions/47830/what-is-a-null-reference-exception-in-unity.html
  2. https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it/218510#218510
  3. https://support.unity3d.com/hc/en-us/articles/206369473-NullReferenceException
  4. https://unity3d.com/fr/learn/tutorials/topics/scripting/data-types

I am making a game in unity 3d and I have missing reference exception.The error
don’t appear in my script editor so I don’t know what is this error related to.
Here is the Gamemanager script:

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

public class Gamemanager : MonoBehaviour
{
public List<Character> Characters = new List<Character>();
public List <Item> AllItems = new List<Item> ();
bool ShowCharWheel;
public int SelectedCharacter;
int LastCharacter;
public static Gamemanager Instance;
public bool CanShowSwitch = true;
public Character CurrentCharacter; 

void Awake()
{
    foreach (Character c in Characters)
    {
        c.Instance = Instantiate(c.PlayerPrefab, c.HomeSpawn.position, c.HomeSpawn.rotation) as GameObject;
        c.Instance.GetComponent<PlayerController> ().LocalCharacter = c;
    }
    ChangeCharacterStart(Characters[PlayerPrefs.GetInt("SelectedChar")]);
}
// Use this for initialization
void Start()
{

}
void ChangeCharacterStart(Character c)
{

    LastCharacter = SelectedCharacter;
    SelectedCharacter = Characters.IndexOf(c);
    CurrentCharacter = c;
    Characters [LastCharacter].Instance.GetComponent<PlayerController> ().CanPlay = false;
    Characters[SelectedCharacter].Instance.GetComponent<PlayerController>().CanPlay = true;
    Camera.main.GetComponent<SmoothFollow>().target = Characters[SelectedCharacter].Instance.transform;
    PlayerPrefs.SetInt("SelectedChar", SelectedCharacter);
}
// Update is called once per frame
void Update()
{
    if (CanShowSwitch) {
        if (Input.GetKey (KeyCode.C)) {
            ShowCharWheel = true;

        } else if (Input.GetKey (KeyCode.V)) {
            ShowCharWheel = false;

        }

    }
}

void ChangeCharacter(Character c)
{
    c.Instance.GetComponent<AI> ().DoneHome = false;
    if (Vector3.Distance (Characters [SelectedCharacter].Instance.transform.position, c.Instance.transform.position) > 10) {
        sequencemanager.Instance.StartCoroutine ("DoCharSwitch", c);
        CanShowSwitch = false;
        LastCharacter = SelectedCharacter;
        SelectedCharacter = Characters.IndexOf (c);
        CurrentCharacter = c;
        Characters [LastCharacter].Instance.GetComponent<PlayerController> ().CanPlay = false;
        Characters [SelectedCharacter].Instance.GetComponent<PlayerController> ().CanPlay = true;
        PlayerPrefs.SetInt ("SelectedChar", SelectedCharacter);

    } else {
        LastCharacter = SelectedCharacter;
        SelectedCharacter = Characters.IndexOf(c);
        CurrentCharacter = c;
        Characters [LastCharacter].Instance.GetComponent<PlayerController> ().CanPlay = false;
        Characters [SelectedCharacter].Instance.GetComponent<PlayerController> ().CanPlay = true;
        PlayerPrefs.SetInt ("SelectedChar", SelectedCharacter);
        Camera.main.GetComponent<SmoothFollow> ().target = Characters [SelectedCharacter].Instance.transform;

    }


}


void OnGUI()
{
    if (ShowCharWheel)
    {
        GUILayout.BeginArea(new Rect(Screen.width - 64, Screen.height - 256, 64, 208), GUIContent.none, "box");
        foreach (Character c in Characters)
        {
            if (GUILayout.Button(c.Icon, GUILayout.Width(64), GUILayout.Height(64)))
            {
                ChangeCharacterStart(c);
            }
        }
    GUILayout.EndArea();
    }
}
    }

  [System.Serializable]
  public class Character
  {
public string Name;
public Texture2D Icon;
public GameObject PlayerPrefab;
public GameObject Instance;
public Transform HomeSpawn;
   }

[System.Serializable]
 public class Item
{
public string Name;
public Texture2D Icon;
public ItemInstance InstancePrefab;
 }

The error is on line

c.Instance = Instantiate(c.PlayerPrefab, c.HomeSpawn.position, c.HomeSpawn.rotation) as GameObject;

This is my editor image with error.The main problem is when I start the game it destroy the gamemanager script.
And another important thing.I migrated this project.I had to reinstall windows.Before that the error didn’t appeared.And now it do.And I am sure I took the whole pro

Добавить комментарий