// Создание Матч3 Блока void CreateBlock(int x,int y) { Block bl; for (int a = 0; a<1000; a++) { // Цикл перебора удачного шанса выпадения, чтобы редкие блоки не выпадали часто bl = Blocks[Random.Range(0,Blocks.Length)]; // здесь будет полюбому хотя бы один раз инициализирована "bl" if (Random.Range(0.1f,99.9f)<=bl.Chance) {break;} //Шанс выпадения блока от 0% до 100% } Game.Last = Instantiate(bl.gameObject); // создание клетки // КОМПИЛЯТОР РУГАЕТСЯ НА ЭТУ СТРОКУ, хотя из кода видно, // что переменная "bl" в любом случае будет инициализирована в цикле "for" }
компилятор выдаёт ошибку: "Assets/SCRIPTS/Match3/Match3.cs(63,27): error CS0165: Use of unassigned local variable `bl'"
Чтобы ошибки не было, вместо
Код
Block bl;
приходиться писать строку
Код
Block bl = Blocks[Random.Range(0,Blocks.Length)];
считай два раза одну и ту же строку писать, при инициализации переменной и потом в цикле
PS Цикл перебора возможно стоило поменьше сделать где-то на 100 переборов максимум, ибо в самой игре редко получается, когда перебор доходит до 10 пунктов, тут всё зависит от того как много будет блоков с редким шансом выпадения, а их будет не так много.
Сообщение отредактировал alexsilent - Четверг, 16 Июля 2020, 10:07
В конечном итоге пришлось сделать мини функции для: position (3 функции), localPosition (3 функции), localScale (3 функции), localEulerAngles (1 функция на Z ибо 2D игра) и Color (4 функции) Или может стоит забить на эти функции и просто вектор в нужном месте подставлять, чтобы манипуляции провести с одной частью вектора или цвета.
Сообщение отредактировал alexsilent - Четверг, 09 Июля 2020, 15:36
Всё ещё перехожу с JS на C# в Unity. Есть ли возможность как-то сократить эти длинные строки, которые на JS выглядели, намного короче и более читабельнее или это максимум, что можно сделать в C#?!
transform.localPosition = new Vector3(transform.localPosition.x,transform.localPosition.y,initPos.z); transform.localScale = new Vector3(variable,transform.localScale.y,transform.localScale.z);
PS У меня просто глаза разбегаются, когда смотрю на тот же самый код, но намного длинее по символам.
Сообщение отредактировал alexsilent - Воскресенье, 05 Июля 2020, 06:42
drcrack, ну я согласен с тем что я делаю не эффективно и криво) я больше художник, чем программист , и очень долго простые вещи программирую, сейчас буду в третий раз переписывать ядро на юнити, на основе новых знаний.)
>>и заняться изучением основ Есть конечно ещё учебники и уроки, но по учебникам и урокам я вообще не могу учиться, я будто "смотрю в книгу и вижу фигу", ну реально пока я не пойму для чего это мне нужно, то не пойму урок, например в школе нам преподавали синусы, я их вообще не понимал, а через лет 10-15 после школы, когда понял что они нужны для кручения,вращения, волнообразного качания и поворота угла пули/врага для игр, то методом тыка изучил быстро, ибо было понимание зачем я это учу. Также по базовым классам, пока я не попробовал в Game Maker их, то не думал что они такие полезные, до этого я не понимал зачем мне это нужно, и только после захотелось узнать как в юнити с этим работать. Например в юнити есть Entity, многие говорят что это крутая вещь, но если я начну это учить, то я не понимаю зачем мне это нужно и не отнимет ли это просто так время, потому-что это другой альтернативный метод программирования. И ещё разные методы есть, на которые могу потратить много времени, ибо программирование даётся мне только методом тыка/проб и ошибок, пока не пойму зачем это нужно и сам не получу ошибки в коде, то не пойму как оно работает, а теорию читать совсем бесполезно для меня.
Добавлено (01 Июля 2020, 10:50) --------------------------------------------- Вот кстати, если в уроке доходчиво на примерах объясняют зачем нужен этот функционал, то такие уроки я могу ещё осилить, а если ещё и пример очень интересный и очень короткий (чтобы с ходу понять), то вообще круто, но такие учителя/уроки редкость, чаще урок просто выглядит так: "Вот вам базовое знание потому-что это надо знать." Ну как-то так, совсем не понятно, где я буду это применять и буду ли вообще, не очень мотивирует.
Сообщение отредактировал alexsilent - Среда, 01 Июля 2020, 10:53
Vostrugin, Спасибо Большое! Прикрутил словарь) всё работает, кроме [SerializedField], компилятор ругается из-за того что рядом стоит словарь, видимо его нельзя показать, ну неважно, можно и обычным кодом переменные словарю добавлять, как я вначале и планировал.
лол, у меня в первом сообщении есть ответ, просто я вначале не понимал как оно работает, а сейчас перечитал и нашёл
Код
base.Awake();
хотя ещё не тестировал)
Добавлено (30 Июня 2020, 20:22) --------------------------------------------- pixeye, спасибо ещё раз!Мне C# теперь нравится больше JS (Unity Script), хотя бы потому-что даже если там тоже это было, то я раньше не знал, а теперь понимаю как упростить код в юнити. :3
Сообщение отредактировал alexsilent - Вторник, 30 Июня 2020, 20:23
Я конечно ленивый, но если это всё-таки очень важный момент, то стоит изучить.
Добавлено (30 Июня 2020, 19:51) --------------------------------------------- pixeye, попытался создать класс на твоём примере, и получил ошибку, видимо потому-что Dog переписала Animal или другие причины, а как сделать так чтобы переменная trans была установлена в базовом скрипте при пробуждении, чтобы лишний раз её не дёргать из Child скриптов? То есть чтобы 2 Awake сработали, вначале у базы, потом у чайлда.
Код
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Animal : MonoBehaviour { public Transform trans; public virtual void Awake() { print("Awake Base!"); trans = transform; } public virtual void Vocal(){ Debug.Log("Basic Animal Sound"); } }
Код
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class Dog: Animal{ public override void Awake() { print("Awake Child!"); trans.position = new Vector3(0,0,0); } public override void Vocal(){ Debug.Log("Woof"); } }
Добавлено (30 Июня 2020, 20:00) --------------------------------------------- хотя убрав override из Awake Dog, все равно получил ошибку, похоже trans переменная не доступна для Dog или хз:
UnassignedReferenceException: The variable trans of Dog has not been assigned. You probably need to assign the trans variable of the Dog script in the inspector. UnityEngine.Transform.set_position (UnityEngine.Vector3 value) Dog.Awake () (at Assets/BaseClassTest/Dog.cs:8)
Добавлено (30 Июня 2020, 20:14) --------------------------------------------- Ещё попробовал такой вариант с базой, вместо Awake поставить Animal, как было в примере урока юнити с фруктами, но в таком случае с transform вообще нельзя работать, юнити выдаёт ошибку, что Transform тут не место:
Код
public class Animal : MonoBehaviour { public Transform trans; public Animal() { print("Awake Base!"); trans = transform; } public virtual void Vocal(){ Debug.Log("Basic Animal Sound"); } }
Сообщение отредактировал alexsilent - Вторник, 30 Июня 2020, 20:26
В твоём же случае с Dictionary можно не париться. Поехали:
Vostrugin, ого спасибо!! Как просто выглядит код, кроме одного момента protected readonly пошёл гуглить, ибо первый раз встречаю звучит так как будто переменная только для чтения и нельзя изменять словарь, но в то же время мы его можем менять, странно) пошёл искать инфу.
Не очень понимаю как работает Inheritance вообще в Unity, но например в Game Maker я легко разобрался, потому-что там не было лишней писанины и просто нужно галочку поставить в определённом месте.
Вроде всё круто и работает в логах, НО это не объекты юнити, а как бы сами по себе объекты С#, у которых даже простого transform нет. Есть ли где (для новичков) примеры с GameObject и inheritance? Чтобы понять как работать с этим.
Я попробовал загуглить и нашёл разные примеры, или это для профессионалов, или это так и нужно, где даже есть незнакомые понятия virtual и override, стоит ли вообще с этим связываться для новичка, или лучше другие примеры поискать? https://forum.unity.com/threads.....525281
Код
class BaseClass : Monobehaviour { public virtual Start() { Debug.Log("BaseClass.Start()"); } }
class ChildClass : BaseClass { public override Start() { base.Start(); Debug.Log("ChildClass.Start()"); } }
Если честно, я долго делал игры без всяких базовых классов и мне этого хватало, потому не особо хочется сильно глубоко в дебри программирования лезть (и узнавать что такое "virtual", если только это не важное понятие в создании Базовых Классов), просто теперь мне нужна функция, чтобы во всех игровых объектах на уровне был базовый класс с Dictionary, где будут храниться переменные. Что-то типа свои встроенные переменные к которым легко обратиться через String и чтобы это было во всех объектах уровня.
Сообщение отредактировал alexsilent - Вторник, 30 Июня 2020, 18:48
alexsilent, да блин, это шутка про книгу «Спасите котика», которая как раз-таки посвящена написанию сценариев (сюжетов); но до неё (до шутки) и правда сложно додуматься, если не знаком с самой книгой.
Полез гуглить книгу) но я просто выбрал самый примитивный вариант сценария, что первое пришло на ум)
Добавлено (21 Июня 2020, 03:37) --------------------------------------------- Добавил больше экшона, успею или нет, ещё не понятно)
Добавлено (21 Июня 2020, 05:55) --------------------------------------------- и ещё один скриншот:
Добавлено (23 Июня 2020, 14:53) --------------------------------------------- Делаю интерфейс и похоже не успею, но зато поизучал Game Maker.
Добавлено (30 Июня 2020, 11:13) --------------------------------------------- Не успел(( Для создания локаций мне нужно где-то ещё 2-3 дня,а в таком виде, эта игра даже не игра получается.
DivES, блин, придётся вычеркнуть этот сложный момент в сюжете.
Оформил персонажа и сделал пока простой скрипт управления в GMS, я также параллельно конкурсу, ещё и учусь в GMS работать, так что не уверен что вообще смогу доделать, но давно планировал научиться GMS, решил совместить приятное с полезным.
Также персонаж теоретически готов для кастомизации, но не уверен, что смогу сделать разную одежду и другие части для конкурса, это так просто когда-нибудь на будущее, ибо я люблю кастомизацию в играх :
Сообщение отредактировал alexsilent - Четверг, 18 Июня 2020, 17:32
Движок: GMS 1.4.9 Сюжет коротко: Злая космическая королева украла космического котика с планеты Kitty. Главная цель - спасти котика и надрать задницу всем врагам. Общая концепция: Берём стиль Bubba n Stix смешиваем с Comix Zone, добавляем Червяка Джима, Guardian Legend и Ristar и примерная концепция игры готова, если конечно успею)
Первый Экшон:
Готово меню, кнопки наверное пока временные:
Сообщение отредактировал alexsilent - Воскресенье, 21 Июня 2020, 05:57
использую один скрипт в который посылаю какой либо идентификатор
Ordan, а каким образом посылать идентификатор, через SendMessage?! Или есть какие-то другие удобные инструменты, о которых я не знал. Просто ищу какой-нибудь более простой способ решения проблемы.
PS например в Аниматоре есть возможность добавить в дорожку анимации Event, и там видны все функции, которые есть в моём скрипте, можно было бы также без аниматора обойтись, то было бы круто! Но я хз, гуглил по Event-ам разные уроки, но там надо сверху дополнительно программировать прослушку Event-ов, когда в аниматоре Event видит все функции без дополнительных строк кода, а не только те, где я пропишу специальные условия.
Сообщение отредактировал alexsilent - Пятница, 12 Июня 2020, 04:03