Unity3D/C# — добавить переменную в игровой объект

Как я могу добавить переменную в GameObject? GameObjects имеет ряд переменных (имя, преобразование, ...), доступ к которым и изменение которых можно получить из любого скрипта. Как я могу добавить переменную, такую ​​как, например, «цвет» или «тип», к которой можно было бы получить доступ или изменить ее из других сценариев. Спасибо.


person cubecube    schedule 24.11.2015    source источник
comment
просто сделайте свои переменные общедоступными и добавьте к ним ссылку на ваш игровой объект.   -  person Burak Karasoy    schedule 25.11.2015
comment
не могли бы вы привести пример? Я не уверен, что понимаю (я новичок в С#). Спасибо.   -  person cubecube    schedule 25.11.2015
comment
добавляю пример...   -  person Burak Karasoy    schedule 25.11.2015


Ответы (3)


Если бы GameObject не был запечатанным классом, то наследование могло бы стать решением вашей проблемы. В этой идеальной ситуации вы можете попробовать следующее.

public class ExtraGameObject : GameObject
{
    // Logically you could make use of an enum for the 
    // color but I picked the string to write this example faster.
    public string Color { get; set; }
}

Решением вашей проблемы может быть объявление вашего класса, как показано ниже:

public class ExtraGameObject
{
    public string Color { get; set; }

    public GameObject GameObject { get; set; }
}

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

person Christos    schedule 24.11.2015
comment
спасибо, попытка объявить класс, наследуемый от GameObject, выдает ошибку: error CS0509: ExtraGameObject': cannot derive from sealed type UnityEngine.GameObject'. Я думаю, как Сет говорит, что переменная не может быть добавлена ​​к GameObject. - person cubecube; 25.11.2015
comment
@cubecube Я не знал об этом :( Я думаю, что мой обновленный пост может дать вам решение. - person Christos; 25.11.2015
comment
Спасибо, Христос, я на самом деле пытаюсь найти другой способ добиться того, что мне нужно (я новичок в С#). Я не уверен, понятно ли это: если я создаю экземпляр GameObject и присоединяю к нему скрипт (с помощью AddComponent), как я могу прочитать переменные этого прикрепленного скрипта из другого скрипта? - person cubecube; 25.11.2015

Как и каждый объект в С#, наследование класса GameObject Класс объекта. Если вы щелкните правой кнопкой мыши на GameObject и выберите «Перейти к определению», вы увидите это ниже. введите здесь описание изображения

Чтобы получить доступ к переменным одного объекта, вам нужна ссылка (не учитывая статические переменные). Поэтому, если вы хотите изменить переменные одного GameObject с другого, вам нужна ссылка. введите здесь описание изображения В инспекторе Unity вы можете присваивать значения публичным переменным скрипта. Ниже вы можете увидеть конец стрелки Obj. Теперь назначьте куб (это GameObject ) объекту Obj. введите здесь описание изображения После перетаскивания

введите здесь описание изображения

Теперь вы можете получить доступ к каждому подкомпоненту объекта куба. В красном прямоугольнике я добрался до компонента Transform и изменил его положение. введите здесь описание изображения

Надеюсь, я правильно понял ваш вопрос. ГЛ.

person Burak Karasoy    schedule 24.11.2015
comment
Спасибо, Бурак, за отличный ответ! Я зашел так далеко и понимаю этот принцип, который вы объясняете. (я надеюсь, что это поможет другим людям, читающим эту ветку :)) мой вопрос заключается в том, как я могу добавить новую переменную в GameObject. GameObject имеет набор компонентов, таких как Transform, Name и другие. Теперь мне было интересно, можно ли добавить такой компонент, как цвет, дату или что-то еще. Но судя по другим людям, которые ответили, что это сложно. Сет Беллоу разместил ссылку, но для меня сейчас это слишком сложно. - person cubecube; 25.11.2015
comment
Спасибо. Я искал в Интернете ваш вопрос после прочтения вашего комментария. Интересный вопрос. Сначала я просмотрел Интернет о добавлении специального компонента, но не смог найти многого, так что, вероятно, даже если он существует, он не является общей темой. В unity3d я унаследовал класс от компонента и программно добавил его к одному из моих игровых объектов. Но это воспринималось как сценарий. Буду искать дальше, я думаю, что речь идет о базе структуры Unity. - person Burak Karasoy; 25.11.2015
comment
Бурак, спасибо за поиск, я тоже искал некоторое время, но не нашел многого, поэтому я разместил этот вопрос. Я задал производные вопросы с некоторым кодом, который может быть альтернативным способом получить то, что я хочу, пожалуйста, посмотрите: stackoverflow.com/questions/33906741/ - person cubecube; 25.11.2015

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

https://msdn.microsoft.com/library/ms173149(v=vs.100).aspx

person Seth Kitchen    schedule 24.11.2015
comment
спасибо, Сет, я слишком новичок, чтобы добавлять переменные в готовый тип данных, я думаю. Мне нужно время, чтобы понять, но я постараюсь :) спасибо - person cubecube; 25.11.2015