Как изменять переменные скрипта в игре unity
Перейти к содержимому

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

  • автор:

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

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

  • Обращаемся из скрипта с названием 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 изменение переменной одного скрипта из другого (Прочитано 26204 раз)
0 Пользователей и 1 Гость смотрят эту тему.
HellRoom Games &copy 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines

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

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

using UnityEngine ;
using System.Collections ;

public class 2Script : MonoBehaviour {

public int pere = 0 ;

void Update ( ) {
if ( Input. GetKeyDown ( KeyCode. S ) ) {
1Script Character = GetComponent < 1Script >( ) ;
pere = pere + Character. pere2 ;
}
}

Все билдится, но переменная не изменяется.

MorfixProton UNITрон Сообщения: 197 Зарегистрирован: 18 окт 2015, 11:37

Re: Изменение переменной другого скрипта

samana 01 ноя 2015, 14:41

MorfixProton писал(а): Все билдится

Странно, мне unity не позволяет даже создать скрипт с цифрой вначале имя класса.

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

Re: Изменение переменной другого скрипта

MorfixProton 01 ноя 2015, 14:46

Это условность, разумеется мои скрипты называются по другому. Можно так:

Синтаксис:
Синтаксис: [ Показать ]
Используется csharp

using UnityEngine ;
using System.Collections ;

public class ScriptPervii : MonoBehaviour {

public int pere2 = 10 ;

Синтаксис:
Синтаксис: [ Показать ]
Используется csharp

using UnityEngine ;
using System.Collections ;

public class ScriptVtoroi : MonoBehaviour {

public int pere = 0 ;

void Update ( ) {
if ( Input. GetKeyDown ( KeyCode. S ) ) {
1Script Character = GetComponent < 1Script >( ) ;
pere = pere + Character. pere2 ;
}
}

MorfixProton UNITрон Сообщения: 197 Зарегистрирован: 18 окт 2015, 11:37

Re: Изменение переменной другого скрипта

MorfixProton 01 ноя 2015, 14:47

Вопрос в том, почему не меняется переменная pere не изменяется?
MorfixProton UNITрон Сообщения: 197 Зарегистрирован: 18 окт 2015, 11:37

Re: Изменение переменной другого скрипта

samana 01 ноя 2015, 14:57

MorfixProton писал(а): Вопрос в том, почему не меняется переменная pere не изменяется?

Скопировал ваши последние скрипты, только поменял
Синтаксис:
Синтаксис: [ Показать ]
Используется csharp
1Script Character = GetComponent < 1Script >( ) ;
Синтаксис:
Синтаксис: [ Показать ]
Используется csharp
ScriptPervii Character = GetComponent < ScriptPervii >( ) ;

и всё работает, переменная pere изменяется в инспекторе.

Может вы нажимаете «s» когда окошко Game не в фокусе?

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

Re: Изменение переменной другого скрипта

MorfixProton 01 ноя 2015, 15:09

Ну как так-то?
Вот то, что у меня, и ничего не меняется:

MorfixProton UNITрон Сообщения: 197 Зарегистрирован: 18 окт 2015, 11:37

Re: Изменение переменной другого скрипта

samana 01 ноя 2015, 15:20

MorfixProton писал(а): Ну как так-то?
Вот то, что у меня, и ничего не меняется:

Так у вас скрипты же на разных объектах)
Чтобы добраться до скрипта из другого объекта, сначала надо получить ссылку на этот другой объект и потом уже другойОбъект.GetComponent .

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

Re: Изменение переменной другого скрипта

MorfixProton 01 ноя 2015, 15:25

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

У меня есть некий скрипт 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
Алексей Шиманский Алексей Шиманский
73.5k 12 12 золотых знаков 93 93 серебряных знака 182 182 бронзовых знака

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. При необходимости изменения всего массива, достаточно будет лишь пройтись по этому существующему списку.

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

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