Необычный Баг. Может кто сталкивался?

Общие вопросы о Unity3D

Re: Необычный Баг. Может кто сталкивался?

Сообщение seaman 15 янв 2021, 16:00

NullReferenceException обычно пишет номер строки где ошибка. Если не пишет - возможно глюк в редакторе, а не в Вашем коде.
Посмотрите подробнее в консоли что выводится.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Необычный Баг. Может кто сталкивался?

Сообщение Jora 15 янв 2021, 16:25

seaman писал(а):NullReferenceException обычно пишет номер строки где ошибка. Если не пишет - возможно глюк в редакторе, а не в Вашем коде.
Посмотрите подробнее в консоли что выводится.


К сожалению, это ни к чему не приведёт. Ошибка действительно указывает номер строки. Та строка пытается сделать GetComponent<Light>() из объекта PointLight(6) - и появляется ошибка, что там нет этого компонента, однако он есть, я это показываю в видео. Да и суть не в этом, поскольку, опять же, глюк появляется только тогда, когда выделен инстанцинируемый префаб. Вот что странно, и ломает психику, однако позволяет работать дальше без каких-либо геморов, просто не выделяя этот префаб более)

Глядя со стороны на свою же проблему, я бы предположил, что у меня работает какой-то скрипт, расширяющий редактор, и он что-то пытается сделать с выделенным префабом, но у меня таких скриптов нет.
Jora
UNец
 
Сообщения: 18
Зарегистрирован: 28 авг 2019, 10:50

Re: Необычный Баг. Может кто сталкивался?

Сообщение Alkos26Rus 15 янв 2021, 16:49

Да, действительно странная ошибка. Так же стоило бы проверить тот обект на наличие компонента Light во время игры(после возникновения ошибки), поставив игру на паузу, может каким то странным образом он удаляется
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1642
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Необычный Баг. Может кто сталкивался?

Сообщение seaman 15 янв 2021, 16:58

Сам ГетКомпонент такой ошибки не дает (обычно :) ). Дает использование результата этого ГетКомпонент.
Типа:
Синтаксис:
Используется csharp
var light = GetComponent<Light>();
light.color = Color.red; <= тут ошибка если нет компонента

Так что или Вы ошиблись строкой, или...
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Необычный Баг. Может кто сталкивался?

Сообщение Jora 15 янв 2021, 17:24

seaman писал(а):Сам ГетКомпонент такой ошибки не дает (обычно :) ). Дает использование результата этого ГетКомпонент.
Типа:
Синтаксис:
Используется csharp
var light = GetComponent<Light>();
light.color = Color.red; <= тут ошибка если нет компонента

Так что или Вы ошиблись строкой, или...


Строка именно та :)) У меня там obj.GetComponent<Light>().enabled=false;
Кстати, эта строка и отключает галочку с Light (на видео это видно, когда я выделяю PointLIght(6)). То есть код залез в компонент и отжал галочку, однако редактор всё равно ругается, что компонента на объекте нет. Психоделика, какая-то. И происходит это только тогда, когда префаб выделен. Будто его выделение ломает какие-то связи между объектами и компонентами.
Jora
UNец
 
Сообщения: 18
Зарегистрирован: 28 авг 2019, 10:50

Re: Необычный Баг. Может кто сталкивался?

Сообщение 1max1 15 янв 2021, 17:40

Чо вы на кофейной гуще гадаете, скинь сюда скрипт, который на префабе висит, возможно там есть какой-то ExecuteAlways атрибут или другие редакторные скрипты с говнокодом.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Необычный Баг. Может кто сталкивался?

Сообщение seaman 15 янв 2021, 17:51

Ну тогда просто, чтобы не мозолило глаза добавьте проверку:
Синтаксис:
Используется csharp
obj.GetComponent<Light>()?.enabled=false;
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Необычный Баг. Может кто сталкивался?

Сообщение Jora 15 янв 2021, 17:52

1max1 писал(а):Чо вы на кофейной гуще гадаете, скинь сюда скрипт, который на префабе висит, возможно там есть какой-то ExecuteAlways атрибут или другие редакторные скрипты с говнокодом.


Ха) Я как раз выше написал, что сам бы подумал о таком. Но нет, там простой скрипт с простой логикой. (не ругайте, за то что копи пасту в циклы не оформил :) )

Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class upgrade_screen2_s : MonoBehaviour
{      
        private GameObject my_camera;
        private pgs pgs1;
        private pgs pgs2;
        private centr_aim_s centr_aim_s;
        private Component[] all_lights;
       
        private Component[] all_weapon_box;
        private GameObject weapon_box;
        private int rel;
        private GameObject[] all_upgrade_lights;
       
        public int thread1;
        public int thread2;
        public int thread3;
        public int thread4;
        public int thread5;
       

        public GameObject[] th1_scaler=new GameObject[20];
        public GameObject[] th2_scaler=new GameObject[20];
        public GameObject[] th3_scaler=new GameObject[20];
        public GameObject[] th4_scaler=new GameObject[20];
        public GameObject[] th5_scaler=new GameObject[20];
       
        private float cache_of_intes1;
        private float cache_of_intes2;
       
        void Awake()
        {
                thread1=PlayerPrefs.GetInt("cw5_soul_eater_lvl");
                thread2=PlayerPrefs.GetInt("cw5_demon_dance_lvl");
                thread3=PlayerPrefs.GetInt("cw5_dominator_lvl");
                thread4=PlayerPrefs.GetInt("cw5_demon_roar_lvl");
                thread5=PlayerPrefs.GetInt("cw5_spirit_alliance_lvl");
                Cursor.visible=true;
                Cursor.lockState=CursorLockMode.None;
//              print("KU!"+Random.value);
        }
       
        void Start ()
        {      
                my_camera=GameObject.Find("weapon_camera");
                my_camera.GetComponent<Camera>().orthographic = true;
                transform.parent=my_camera.transform;
                pgs1=GameObject.Find("ammo1").GetComponent<pgs>();
                pgs2=GameObject.Find("coin_count").GetComponent<pgs>();
                centr_aim_s=GameObject.Find("centr_aim").GetComponent<centr_aim_s>();
                all_lights=GameObject.FindObjectsOfType<Light>();
               
                for(int i=0;i<all_lights.Length;i++)
                {
                        all_lights[i].GetComponent<Light>().enabled = false;
                }
               
                all_upgrade_lights=GameObject.FindGameObjectsWithTag("upgrade_light");
               
                for(int i=0;i<all_upgrade_lights.Length;i++)
                {
                        all_upgrade_lights[i].GetComponent<Light>().enabled=true;
                }
               
               
                my_camera.SendMessage("deactivate_me");
               
                for(int i=1;i<19;i++)
                {
                        th1_scaler[i]=GameObject.Find("th1_scaler"+i.ToString());
                }
               
                for(int i=1;i<19;i++)
                {
                        th2_scaler[i]=GameObject.Find("th2_scaler"+i.ToString());
                }
               
                for(int i=1;i<19;i++)
                {
                        th3_scaler[i]=GameObject.Find("th3_scaler"+i.ToString());
                }
               
                for(int i=1;i<19;i++)
                {
                        th4_scaler[i]=GameObject.Find("th4_scaler"+i.ToString());
                }

                for(int i=1;i<19;i++)
                {
                        th5_scaler[i]=GameObject.Find("th5_scaler"+i.ToString());
                }
               
                cache_of_intes1=RenderSettings.ambientIntensity;
                cache_of_intes2=RenderSettings.reflectionIntensity;
                RenderSettings.ambientIntensity=0;
                RenderSettings.reflectionIntensity=0;
        }
       

        void FixedUpdate ()
        {
                if(thread1<0){thread1=0;}
                if(thread1>18){thread1=18;}

                if(thread2<0){thread2=0;}
                if(thread2>18){thread2=18;}
               
                if(thread3<0){thread3=0;}
                if(thread3>18){thread3=18;}
               
                if(thread4<0){thread4=0;}
                if(thread4>18){thread4=18;}    
               
                if(thread5<0){thread5=0;}
                if(thread5>18){thread5=18;}
               
                for(int i=1;i<19;i++)
                {
                        //print(i);
                        th1_scaler[i].SetActive(false);
                       
                        if(thread1>=i)
                        {
                                th1_scaler[i].SetActive(true);
                        }
                }
               
                for(int i=1;i<19;i++)
                {
                        th2_scaler[i].SetActive(false);
                       
                        if(thread2>=i)
                        {
                                th2_scaler[i].SetActive(true);
                        }
                }
               
                for(int i=1;i<19;i++)
                {
                        th3_scaler[i].SetActive(false);
                       
                        if(thread3>=i)
                        {
                                th3_scaler[i].SetActive(true);
                        }
                }
               
                for(int i=1;i<19;i++)
                {
                        th4_scaler[i].SetActive(false);
                       
                        if(thread4>=i)
                        {
                                th4_scaler[i].SetActive(true);
                        }
                }      
               
                for(int i=1;i<19;i++)
                {
                        th5_scaler[i].SetActive(false);
                       
                        if(thread5>=i)
                        {
                                th5_scaler[i].SetActive(true);
                        }
                }      
               
                weapon_box=GameObject.Find("weapon_box");
                all_weapon_box=weapon_box.GetComponentsInChildren<Transform>();
               
                for(int i=0;i<all_weapon_box.Length;i++)
                {
                        all_weapon_box[i].gameObject.layer=0;
                }

                pgs1.hide=true;
                pgs2.hide=true;
                centr_aim_s.hide=true;
                transform.position=my_camera.transform.position;
                transform.rotation=my_camera.transform.rotation;
                my_camera.GetComponent<Camera>().orthographicSize=1.65f;
                my_camera.GetComponent<Camera>().near=-1.65f;
        }
       
        void Update()
        {
                if(Input.GetKeyDown("space"))
                {
                        my_camera.GetComponent<Camera>().orthographicSize=5;
                       
                        for(int i=0;i<all_lights.Length;i++)
                        {
                                all_lights[i].GetComponent<Light>().enabled = true;
                        }
                       
                        my_camera.GetComponent<Camera>().orthographic = false;
                       
                        for(int i=0;i<all_weapon_box.Length;i++)
                        {
                                all_weapon_box[i].gameObject.layer=9;
                        }
                       
                        my_camera.SendMessage("activate_me");
                        my_camera.GetComponent<Camera>().near=0.01f;
                       
                        RenderSettings.ambientIntensity=cache_of_intes1;
                        RenderSettings.reflectionIntensity=cache_of_intes2;
                       
                        Cursor.lockState=CursorLockMode.Locked;
                        Cursor.visible=false;
                       
                        Destroy(gameObject);
                }
        }
}

 
Jora
UNец
 
Сообщения: 18
Зарегистрирован: 28 авг 2019, 10:50

Re: Необычный Баг. Может кто сталкивался?

Сообщение seaman 15 янв 2021, 20:11

В промежутке времени от старт (как я понимаю - инстантиэйт этого ГО) до нажатия Спейс - один из светильников исчезает.
Отчего исчезает - вопрос.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Необычный Баг. Может кто сталкивался?

Сообщение Jora 15 янв 2021, 22:30

seaman писал(а):В промежутке времени от старт (как я понимаю - инстантиэйт этого ГО) до нажатия Спейс - один из светильников исчезает.
Отчего исчезает - вопрос.


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

Методом тыка я нашёл причину ошибки. Похоже дело даже не в самом префабе... Шок контент, гляньте))

https://youtu.be/_DkvhyyXW0M
Jora
UNец
 
Сообщения: 18
Зарегистрирован: 28 авг 2019, 10:50

Re: Необычный Баг. Может кто сталкивался?

Сообщение 1max1 15 янв 2021, 22:44

Первый раз вижу такое))
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Необычный Баг. Может кто сталкивался?

Сообщение samana 15 янв 2021, 23:43

Jora писал(а):Шок контент, гляньте))

Думаю это диверсия! Я на всякий случай переустановил у себя windows, зашел опять на ваше видео, но ошибка там всё равно показывается.. ~x(
Последний раз редактировалось samana 16 янв 2021, 11:47, всего редактировалось 1 раз.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Необычный Баг. Может кто сталкивался?

Сообщение Jora 16 янв 2021, 11:20

Ребята, новая инфа [nuklear] :D :D

Сейчас создал новый проект, чтобы попытаться воспроизвести ошибку. Как оказалось, это было довольно просто. Достаточно просто сделать FindGameObjectsWithTag. Помните, в видосе я говорю, что пока Превью Окна Префаба свёрнуто - всё хорошо. Но стоит его развернуть - появляются ошибки. :) А теперь шок контент :) :) Как оказалось, FindGameObjectsWithTag достаёт объекты из этого окошка 8() . Называется оно Preview Scene. Гляньте скриншот.

Изображение

В сцене всего 5 объектов под тагом, однако FindGameObjectsWithTag расставляет в паблик массив объекты со странной припиской (Preview Scene). Немудрено, что потом появляются ошибки о том, что на объекте нету компонентов. Скорее всего в Preview Scene многие компоненты отключаются, ибо накой они там нужны. Но какого дьявола происходит эта адская сатана с вытаскиванием объектов из Preview Scene - вот вопрос)) Нашёл в инете инфу, что это какой-то глюк с хешем редактора, некоторым помогло полное удаление всего кеша и настроек юнити. Попытался почистить файлы в %APPDATA%, но ничего не помогло.

В общем вот что нарыл.
Jora
UNец
 
Сообщения: 18
Зарегистрирован: 28 авг 2019, 10:50

Re: Необычный Баг. Может кто сталкивался?

Сообщение samana 16 янв 2021, 11:52

Ничего себе детективчик :-o
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Необычный Баг. Может кто сталкивался?

Сообщение 1max1 16 янв 2021, 11:54

Как вариант, можно перейти на другую версию юньки, скорей всего это действительно баг самой юнити.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Пред.След.

Вернуться в Общие вопросы

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 13