Страница 1 из 1
null странно
Добавлено:
28 ноя 2021, 13:18
_user_
Всем привет! Такой вот баг произошел.
Есть некий класс Figure:
Используется csharp
class Figure : MonoBehaviour
{
private readonly byte index;
private readonly Transform position;
public Figure(in byte index, in Transform position) //конструктор класса
{
this.index = index;
this.position = position;
}
}
И есть другой класс, который содержит Figure:
Используется csharp
class otherClass : MonoBehaviour
{
private Figure[] figures;
public void InitializeFigures(in byte count, in Transform thisTransform)
{
figures = new Figure[count];
for (byte i = 0; i < count; i++)
{
Debug.Log("1) figures[i] = " + figures[i]); //Вывод - "1) figures[i] = "
figures[i] = new Figure(i, transform);
Debug.Log("2) figures[i] = " + figures[i]); //Вывод - "2) figures[i] = null" //Почему null
}
}
}
Почему во втором выводе может быть null, если я создаю новый экземпляр класса Figure?
Re: null странно
Добавлено:
28 ноя 2021, 14:16
samana
Используется csharp
figures[i] = new Figure(i, transform);
Но у класса otherClass нет свойства transform, там вообще должно выводится исключение.
Может вы мели ввиду?
Используется csharp
figures[i] = new Figure(i, thisTransform);
Re: null странно
Добавлено:
28 ноя 2021, 14:31
_user_
Только класс otherClass висит на игровом объекте, что означает, что у него есть transform (компонент Transform на этом же объекте). Только всё таки почем null?
Re: null странно
Добавлено:
28 ноя 2021, 14:33
_user_
_user_ писал(а):Только класс otherClass висит на игровом объекте, что означает, что у него есть transform (компонент Transform на этом же объекте). Только всё таки почем null?
По факту вот так будет выглядеть:
Используется csharp
class otherClass : MonoBehaviour
{
private Transform transform;
private Figure[] figures;
private void Start()
{
transform = gameObject.GetComponent<Transform>();
}
public void InitializeFigures(in byte count, in Transform thisTransform)
{
figures = new Figure[count];
for (byte i = 0; i < count; i++)
{
Debug.Log("1) figures[i] = " + figures[i]); //Вывод - "1) figures[i] = "
figures[i] = new Figure(i, transform);
Debug.Log("2) figures[i] = " + figures[i]); //Вывод - "2) figures[i] = null" //Почему null
}
}
}
Re: null странно
Добавлено:
28 ноя 2021, 17:48
Xtir
Как он может висеть на объекте, если он даже не наследуются от MonoBehaviour?
Re: null странно
Добавлено:
28 ноя 2021, 18:08
_user_
Это я как пример писал, с реального шаблона. Сейчас исправлю.
Re: null странно
Добавлено:
28 ноя 2021, 20:26
samana
Запустил ваш код
Используется csharp
using UnityEngine;
public class otherClass : MonoBehaviour
{
void Start()
{
InitializeFigures(3, transform);
}
private Figure[] figures;
public void InitializeFigures(in byte count, in Transform thisTransform)
{
figures = new Figure[count];
for (byte i = 0; i < count; i++)
{
Debug.Log("1) figures[i] = " + figures[i]);
figures[i] = new Figure(i, transform);
Debug.Log("2) figures[i] = " + figures[i]); //figures[i] = Figure"
}
}
}
public class Figure
{
private readonly byte index;
private readonly Transform position;
public Figure(in byte index, in Transform position) //конструктор класса
{
this.index = index;
this.position = position;
}
}
Никаких null-ов нет, всё работает нормально.
И ещё какая-то подозрительная фишка с модификатором in для параметров метода. Вы точно знаете, что он делает и что в этом есть необходимость?
Re: null странно
Добавлено:
29 ноя 2021, 17:40
_user_
samana писал(а):Запустил ваш код
Используется csharp
using UnityEngine;
public class otherClass : MonoBehaviour
{
void Start()
{
InitializeFigures(3, transform);
}
private Figure[] figures;
public void InitializeFigures(in byte count, in Transform thisTransform)
{
figures = new Figure[count];
for (byte i = 0; i < count; i++)
{
Debug.Log("1) figures[i] = " + figures[i]);
figures[i] = new Figure(i, transform);
Debug.Log("2) figures[i] = " + figures[i]); //figures[i] = Figure"
}
}
}
public class Figure
{
private readonly byte index;
private readonly Transform position;
public Figure(in byte index, in Transform position) //конструктор класса
{
this.index = index;
this.position = position;
}
}
Никаких null-ов нет, всё работает нормально.
И ещё какая-то подозрительная фишка с модификатором in для параметров метода. Вы точно знаете, что он делает и что в этом есть необходимость?
Значит у меня сборщик мусора гребёт? модификатор in - ссылка на данные, не копируя эти данные в промежуточную переменную. Вот если что урок -
https://www.youtube.com/watch?v=4Z6e-qw ... N&index=61Только проблема в том, что даже без in код не рабортает(возвращается null).
Re: null странно
Добавлено:
29 ноя 2021, 18:34
1max1
Здесь либо код неполный, либо ты неверно понимаешь консольный вывод.
Re: null странно
Добавлено:
29 ноя 2021, 18:38
_user_
Конечно код не полный, я вытащил только ту часть, в которой должна быть ошибка. Ладно, попробую всё переписать, что получится, напишу.
Re: null странно
Добавлено:
29 ноя 2021, 18:52
_user_
Нашел решение!!!
Оказалось, что:
Используется csharp
class otherClass : MonoBehaviour
{
****
figures[i] = <span style="text-decoration: underline">new</span> Figure(i, transform); //new - подчёркивалось в visual studio, код - UNT0010
****
}
посмотрел этот код в гугле, класс Figure не может наследоваться от MonoBehaviour в этом случае.
Спасибо всем!
Re: null странно
Добавлено:
30 ноя 2021, 00:21
1max1
Вообще-то может, но создавать MonoBehaviour через new не надо.