Перейти к содержимому

Как изменять переменные скрипта в игре unity

  • автор:

Variables and the Inspector

When creating a script, you are essentially creating your own new type of component that can be attached to Game Objects just like any other component.

Just like other Components often have properties that are editable in the inspector, you can allow values in your script to be edited from the Inspector too.

using UnityEngine; using System.Collections; public class MainPlayer : MonoBehaviour < public string myName; // Use this for initialization void Start () < Debug.Log("I am alive and my name is " + myName); >> 

This code creates an editable field in the Inspector labelled “My Name”.

Unity создает метку в окне Inspector путем добавления пробела везде, где в имени переменной встречается заглавная буква. Однако это исключительно в целях отображения, и вы должны всегда в коде использовать имя переменной. Если вы отредактируете значение переменной и затем нажмете Play, вы увидите, что сообщение включает введенный вами текст.

In C#, you must declare a variable as public to see it in the Inspector.

Unity позволяет изменять значение переменных скрипта в запущенной игре. Это очень полезно чтобы увидеть эффекты от изменений сразу же, без остановки и перезапуска. Когда проигрывание оканчивается, значения переменных сбрасываются в то состояние, которое они имели до нажатия кнопки Play. Это гарантирует, что вы свободно можете играть с настройками объектов, не боясь что-то испортить.

Как можно изменить переменную в скрипте?

У меня есть некий скрипт Respawn.cs, у которого есть логическая переменная isActivated. На сцене есть много объектов, у которых есть этот скрипт. Так вот, мне нужно изменить переменную isActivated сразу во всех объектах, то есть чтобы значение переменной поменялось везде, где есть скрипт. Как можно это сделать?

Отслеживать
задан 3 дек 2017 в 9:40
81 2 2 серебряных знака 8 8 бронзовых знаков

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

1 вариант: Воспользоваться методом FindObjectsOfType, чтобы найти все объекты с компонентом Respawn , а потом в цикле у них поменять значение.

2 вариант: Для таких целей придумали события (events). Почитайте о них. Про подписчиков и слушателей. Суть в том, что объект подписывается на некое событие и когда оно происходит, то «услышав» его — объект делает некое действие. Например в какой-то момент вам нужно будет отослать событие ActivateAll и, соответственно, все объекты, кто был подписан на него поменяют сами свои значения у isActivated

Отслеживать
ответ дан 3 дек 2017 в 10:05
Алексей Шиманский Алексей Шиманский
71.9k 12 12 золотых знаков 91 91 серебряный знак 180 180 бронзовых знаков

1) Как уже говорили — использовать события. 2) Использовать public static переменную в скрипте (можно статические переменные вынести в отдельный static класс). MyStatic.myBool=true; И проверку условия в скрипте. Не к данному случаю а вообще про доступ к переменным другого класса: 3) Сделать public свойство (или, что менее предпочтительно, public поле)

 YourScript a; a = GameObject.GetComponent(); a.MyBool=true; 

Отслеживать
ответ дан 3 дек 2017 в 12:15
480 3 3 серебряных знака 7 7 бронзовых знаков

Могу предложить вот такой вариант. Создайте менеджер для всех объектов которые могут респавниться.

В менеджере держите все созданные объекты. Таким образом можно будет предотвратить частый вызов (или вызов в принципе) довольно затратной операции FindObjectsOfType, ну и в будущем работать с общей коллекцией объектов будет проще.

Если вы не совсем понимаете, то менеджер это по сути еще один скрипт, вешайте его на пустой объект (думаю у вас есть такой, для скриптов логики игры). В менеджере держите массив ссылок на объекты со скриптом respawn. При необходимости изменения всего массива, достаточно будет лишь пройтись по этому существующему списку.

Отслеживать
ответ дан 3 дек 2017 в 13:57
Vasiliy Rusin Vasiliy Rusin
1,792 9 9 серебряных знаков 19 19 бронзовых знаков

Допустим,проект называется Game .Скрипт- script .Из другого скрипта можно изменить значение переменной public bool var = false; //public тут очень важен на true при помощи Game.script.var = !var; .Значение этой переменной изменится глобально,т.е., на все объекты где есть скрипт script .

Отслеживать
ответ дан 9 дек 2017 в 15:21
366 1 1 золотой знак 3 3 серебряных знака 15 15 бронзовых знаков

  • c#
  • unity3d
    Важное на Мете
Связанные
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Как получить доступ к переменной другого скрипта

Привет начинающим разработчикам! Очень часто нам приходится из одного скрипта обращаться к тем переменным, которые находятся в другом скрипте(компоненте) нашего объекта. В данной статье мы подробно разберёмся, как обращаться к переменной другого скрипта на примере:

  • Обращаемся из скрипта с названием Player.
  • Обращаемся к переменной text, которая находится в скрипте Money.

Первым делом в скрипте Player нам необходимо создать(объявить) переменную с типом, соответствующему названию скрипта, к переменной которого хотите получить доступ. В нашем случае, этот скрипт называется Money. Поэтому новая переменаня должна иметь тип Money. А саму переменную назовём, например, linkMoney:

private Money linkMoney;

Далее в переменную linkMoney присвоим ссылку на скрипт(компонент) Money:

void Start() < linkMoney = GetComponent(); >

Готово! В переменную linkMoney мы записали ссылку на наш скрипт Money, а это значит, что мы теперь имеем доступ ко ВСЕМ публичным переменным и методам скрипта Money. Теперь можно, например, изменить значение переменной text. Давайте сделаем это.

linkMoney.text = "Привет, я изменил значение переменной text в скрипте Money, из скрипта Player.";

Теперь совместим все наши кусочки кодов, и посмотрим как же выглядит ВЕСЬ код скрипта Player.

using UnityEngine; public class Player : MonoBehaviour < private Money linkMoney; void Start() < linkMoney = GetComponent(); linkMoney.text = "Привет, я изменил значение переменной text в скрипте Money, из скрипта Player."; > >

На этом всё. Если у Вас остались какие-либо вопросы, пишите в комментариях. Если нет, то жду Ваших лайков 🙂

Как изменять переменные скрипта в игре unity

Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Новости:
Автор Тема: Unity3d C#script изменение переменной одного скрипта из другого (Прочитано 25839 раз)
0 Пользователей и 1 Гость смотрят эту тему.
HellRoom Games &copy 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines

Страница сгенерирована за 0.147 секунд. Запросов: 29.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *