Пятница, 29 Марта 2024, 18:07

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Передача значения переменной в другой скрипт (Передача значения переменной в другой скрипт)
Передача значения переменной в другой скрипт
pixeyeДата: Среда, 15 Июля 2015, 09:03 | Сообщение # 21
Red Winter Software
Сейчас нет на сайте
1. Перписывай свои скрипты. Когда делаешь "по глупости" - рефакторь иначе потом сам запутаешься.
2. Я правильно понимаю что ты хочешь передавать "счет" ( монетки ) - своему герою или контроллеру. В общем, тот, кому ты передаешь существует в одном экземпляре?
Если так то проблема решается синглетоном.
ИЛИ
Системой эвентов.
3. Не используй GetComponent в апдейте, Вообще в твоем случае апдейт не нужен.
4. Комментарии на русском - моветон. Старайся писать на инглише. Возможно завтра ты будешь работать с теми кто русского не знает. Английский - общепринятый язык. Не знаешь английского? Начни с него. Имхо одно из самых полезных знаний для программиста. Хотя бы потому что получишь доступ к информации напрямую, не дожидаясь случая переведут или нет. Я понимаю, ты скажешь, что это делаешь для себя и никто на это смотреть не будет, но надо себя тренировать.

Пример на синглетоне:

Shoot

Bomber


Так как у меня объект на сцене со скриптом shoot был назван GameObject то в дебагере пишется, что счет передался в GameObject. Так как добавил лог не по типу, а по объекту



Настоятельно рекомендую забить на создание игры на пару деньков ( Больше и не потребуется для твоего примера ) и почитать о программировании и попрактиковаться в юнити на очень простых и очевидных примерах. Пример выше - простейший. На эвентах и делегатах гораздо интереснее XDDD

Почему вся эта подготовка и хрень вообще важна если ты можешь УЖЕ сесть и писать гумнокод?

1. Будешь тратить три дня размышлений на что-то более важное и интересное.
2. Большая гибкость. У тебя завтра появятся ачивки и ты захочешь, чтобы N событий срабатывало при добавлении счета. Не через Go.GetComponent же делать.
3. Повышая читабельность кода меньше риск того, что через месяца два работы тебе не захочется все переписать
4. Игру легче поддерживать, расширять.
5. Количество багов снижается.
6. Над не мучаться, а получать удовольствие от процесса. Как его получать если все делается через пятую точку и работает на соплях?

Что тебе понадобится ?
dotnetperls <= твоя C# библия с примерами.
CofeeBreak <= простейшие игры-клоны сделанные на Unity3d. Код там показан и описан.
Пошаговое создание крупной РПГ на unity3d <= Охватывает большинство вопросов которые у тебя вообще могут возникнуть по Unity + есть неплохие решения, паттерны.

Ну и все, что ты найдешь в гугле когда у тебя родятся вопросы после трех ссылок выше, а вопросов у тебя должно стать больше чем ответов. Разработчикам игр говорят думать о продукте ( игре ), не о технологии. Это верно. Для тех, у кого проблем с технологиями нет. Для тебя же важнее думать сейчас не что ты пишешь, а как ты пишешь.


ACTORS - мой фреймворк на Unity
Until We Die - игра над которой работаю



Сообщение отредактировал pixeye - Среда, 15 Июля 2015, 09:30
OneKeyДата: Среда, 15 Июля 2015, 17:37 | Сообщение # 22
участник
Сейчас нет на сайте
pixeye, спасибо гляну и уроки от BZA хоть они уже и устарели. я решил отложить до выходных все, что связано с проектом и переделать систему очков на похожую как PROJECT: SPACE SHOOTER


http://www.falcogames.com/SnowCrushSetup.exe
MANMANAДата: Среда, 15 Июля 2015, 18:16 | Сообщение # 23
почти ветеран
Сейчас нет на сайте
Цитата seaman ()
итата
if(go) это сокращенное от if(go==true)

Это неверно.
Это сокращение от if(go != null)

Хде фаши доказательства? Дайте, пожалуйста, ссылочку на спецификацию.

Добавлено (15 июля 2015, 18:16)
---------------------------------------------
http://answers.unity3d.com/questio....-1.html
Это канеч не спецификация, но SubatomicHero разжевывает, а то какой-то совсем неструктурированный C# получается: хочу так трактую для. boolean, хочу так - для GO, для объекта ( Item'а в понимании ООП) как трактовать будем? true или !=null ?


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею
seamanДата: Среда, 15 Июля 2015, 19:30 | Сообщение # 24
старожил
Сейчас нет на сайте
Поторопился, не подумал. Мы оба не правы.
Что делает иф? Он проверяет истинность выражения внутри скобок. Т.е. выражение внутри иф должно иметь тип bool. Т.к. там стоит GameObject компилятор пытается привести этот GameObject к типу bool и ему это удается! Почему? Потому что в классе UnityEngine.Object есть такое определение:
Код
        public static implicit operator bool(UnityEngine.Object exists)
           {
               return !CompareBaseObjects(exists, null);
           }

Оно позволяет неявно любой GameObject преобразовать в bool.
Попробуй проделать тоже самое с другим классом, который не произведен от UnityEngine.Object. Например:
Код
        public class Probe
           {       
           }
...
           Probe p = new Probe();
           if(p){}
           if(p == true){} // Так никто не пишет - это чушь....

Получишь в if ошибку. Почему? Потому что в классе Probe нет оператора преобразования в bool.
На самом деле if(go) это сокращение от if((bool)go)
____
Однако говорить, что if(go) это сокращенное от if(go==true) это совсем неверно. Продолжи дальше:
if(go==true) это сокращенное от if((go==true)==true)
if((go==true)==true) это сокращенное от if(((go==true)==true)==true)
и так до бесконечности.
Не надо никакого сравнения с true. Определение if просто предполагает проверку на true выражения в скобках.


Сообщение отредактировал seaman - Среда, 15 Июля 2015, 19:31
MANMANAДата: Среда, 15 Июля 2015, 21:38 | Сообщение # 25
почти ветеран
Сейчас нет на сайте
smile да, правильней нам обоим было написать про проверку на истинность
p.s.
bool p=true;
if(p) эквивалентно if(p==true) ?
if(p==true) эквивалентно if((p==true)==true) ? и так до бесконечности? wink


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею
OneKeyДата: Суббота, 18 Июля 2015, 00:08 | Сообщение # 26
участник
Сейчас нет на сайте
Бааа, промучился весь вечер так нечего не смог сделать. Помогите пожалуйста уже устал вариантов 20 перепробовал как сделать выкладываю два основных скрипта. Первый это скрипт сомалета который мы сбиваем и за его сбитие мы должны получать очки, второй скрипт в который я перенес вывод и типо подсчет очко в но не чего не работает выдает такую ошибку после сбития самолета :NullReferenceException: Object reference not set to an instance of an object
bomber.Update () (at Assets/Scripts/bomber.cs:32). Я в принцепе все понял, что он хочет я все исправил и все равно не работает.






http://www.falcogames.com/SnowCrushSetup.exe
seamanДата: Суббота, 18 Июля 2015, 01:11 | Сообщение # 27
старожил
Сейчас нет на сайте
Цитата
Я в принцепе все понял

Похоже что это не так - ничего не понял.
Вот скажите - нафига еще раз получать GameController в строке: GetComponent<GameController>().AddScore(PointsValue); ?
Вы что считаете, что этот скрипт висит на всех объектах? Или Вы не понимаете на каком объекте ищет компонент метод GetComponent?
PS^ для кописатеров: замените
GetComponent<GameController>().AddScore(PointsValue);
на
gameController.AddScore(PointsValue);
OneKeyДата: Суббота, 18 Июля 2015, 12:00 | Сообщение # 28
участник
Сейчас нет на сайте
seaman, ура спасибо ) наконец то заработало


http://www.falcogames.com/SnowCrushSetup.exe
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Передача значения переменной в другой скрипт (Передача значения переменной в другой скрипт)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг