Добавлено (30.04.2014, 20:12) --------------------------------------------- Новая версия. Множество аспектов переработано, переосмысленно. Маленький список обновлений: - Обновлён UI. - Обновлены все эффекты. - Игрок перерисован. Имеет силовой щит. Доступны модификации корабля (в виде бонусов). - Добавлен выбор уровня. - Добавлен сумарный и локальный подсчёт очков (звёздочки за каждый уровень). - Добавлен тестовый босс. - Реализована цепочка заданий. И много других приятных (и не очень) мелочей. Жду Ваших комментариев. Спасибо. P.S. Ссылка на скачивание и новые сриншоты в шапке.
Сообщение отредактировал Vigilem - Среда, 30 Апреля 2014, 19:59
Storm54, спасибо. С удовольствием посмотрел на Вашу реализацию. Изначально тоже была идея создания таймера по аналогии со стандартным таймером c#. Однако не хватило опыта, для реализации подписки на событие. Если не против, я вынесу Ваши классы и пример использования в шапку. Авось ещё кому пригодится.
Доброго времени суток, уважаемые форумчане Недавно возникла задача, для реализации который необходим был таймер (если быть точным, то обратный отчёт). У каждой задачи есть решение, и эта из числа подобных задач. Поехали.
UniTimer
UPD: Добавлен вариант реализации таймера (более грамотный). Смотреть внизу поста. Предложил Strom54.
Первый вариант.
Всё просто. Создаём класс. Код ниже:
Код
using UnityEngine; using System.Collections;
/// <summary> /// Обратный отсчёт /// </summary> public class UniTimer { private float seconds; private bool isFinished; private bool isEnabled;
/// <summary> /// Единоразовое срабатывание таймера. Возвращает true только один раз, при условие, что время истекло. /// </summary> /// <returns></returns> public bool ElapsedAndShotdown() { if (isEnabled && isFinished) { isEnabled = false; return true; } else return false; }
/// <summary> /// Если время истекло, то возвращает true. /// </summary> /// <returns></returns> public bool Elapsed() { if (isFinished) return true; else return false; } }
Сохранили класс. Теперь пример использования:
Код
using UnityEngine; using System.Collections;
public class TestScript: MonoBehaviour { private UniTimer timer;
void Start() { Debug.Log("Timer started!"); timer = new UniTimer(5); // таймер на 5 секунд }
void Update() { if (timer != null) { timer.Update(); // Не забываем вызывать. Иначе таймер не будет изменяться.
if (timer.ElapsedAndShotdown()) { Debug.Log("Таймер сработал и отключился. Этот код выполнится единожды"); } } }
}
Второй пример использования:
Код
using UnityEngine; using System.Collections;
public class TestScript: MonoBehaviour { private UniTimer timer;
void Start() { Debug.Log("Timer started!"); timer = new UniTimer(5); // таймер на 5 секунд }
void Update() { if (timer != null) { timer.Update(); // Не забываем вызывать. Иначе таймер не будет изменяться.
if (timer.Elapsed()) { Debug.Log("Время таймера истекло. Выполняется, пока вручную не отключить таймер."); } } }
}
Второй вариант.
Простота использования аналогична стандартному таймеру в C# Сначала я хотел реализовать с использованием отдельных потоков, но из-за этого могли возникнуть проблемы, поэтому пришлось делать другим методом. Создаем объект - пустышку и кидаем на него скрипт TimerManager - этот класс производит обновление всех активных таймеров. Стоит учесть, что скрипт делает объект не-уничтожаемым при переходе на другую сцену, так что на каждой сцене не нужно плодить лишних менеджеров, хотя и ошибок это не вызовет.
Ну а теперь дело за малым:
Код
void Start() { SimpleTimer timer = new SimpleTimer(5);//Создаем объект. Вторым необязательным параметром можно указать, запускать ли таймер сразу при создании объекта. timer.OnTimer += new SimpleTimer.SimpleTimerEvent(TimerActivated); // Подписываемся на событие, которое кинет таймер. timer.Start(); // Запускаем таймер. }
void TimerActivated(SimpleTimer timer) { timer.OnTimer -= new SimpleTimer.SimpleTimerEvent(TimerActivated); // Желательно отписаться от события таймера. Хотя сделать это можно где-нибудь еще, например в OnDestroy
Debug.Log("Timer activated !"); }
Сами классы: TimerManager
Код
using UnityEngine;
public class TimerManager : MonoBehaviour { public static TimerManager mgr;
public delegate void TimerManagerEvent(); public event TimerManagerEvent OnUpdate;
Версия Unity не последняя, так как к обновления отношусь с максимальной осторожностью. Изменение скрипта, как советовали сверху, не дало никаких результатов. Однако частное решение данной проблемы нашёл, может кому-то понадобится. В папке Assets не должно быть файлов с расширение dll, ибо компилятор Unity порой глючит именно из-за них. Как только поймали подобную ошибку, без зазрения совести тыкаем на Assets -> Reimport All. Идём завариваем кофе, приходим - проект работает. Всем спасибо за попытки помочь
Доброго времени суток. Уважаемые, выручайте, столкнулся со следующей проблемой. До недавнего времени было всё отлично, работало как часы. Однако теперь чуть ли не каждый час ловлю ряд ошибок: - ApplicationException: Unable to find a suitable compiler UnityEditor.Scripting.ScriptCompilers.CreateCompilerInstance (MonoIsland island, Boolean buildingForEditor, BuildTarget targetPlatform) (at C:/BuildAgent/work/d3d49558e4d408f4/Editor/Mono/Scripting/ScriptCompilers.cs:99) - Failed to create compiler instance - Compilation failed because the compiler couldn't be executed! После этого, как можно понять из текста ошибок, компилятор Юньки наотрез отказывается работать. Все приатаченные скрипты - "Can't be load...". Помогает только пересоздание проекта. Однако помогает не на долго. Переустановка Юньки - эффекта не дала. Кто сталкивался? Как решали? Заранее благодарю!
Сообщение отредактировал Vigilem - Понедельник, 21 Апреля 2014, 14:39
Debuger, молодой человек, Вы что-то путаете. Руководитель группы разработок является лицом, ответственным за качественное и своевременное исполнение комплексов задач в проектах разработки информационно-программных систем, основанных на применении современных технологий.
Руководитель группы осуществляет руководство небольшими проектами или проектными командами в составе больших проектов. Наибольший акцент в его деятельности ставится, прежде всего, на решение технических задач, нежели собственно управленческих. Непосредственно подготавливает и принимает проектные решения, участвует в их реализации. Руководит частью проектной команды, отвечающей за специфический перечень задач, в которую входят специалисты различного профиля (эксперты, аналитики, проектировщики, программисты).
A team leader or team lead is someone (or in certain cases there may be multiple team leaders) who provides guidance, instruction, direction and leadership to a group of other individuals (the team) for the purpose of achieving a key result or group of aligned results. The team lead reports to a project manager (overseeing several teams). The team leader monitors the quantitative and qualitative result that is to be achieved. The leader works with the team membership
Вы не подумайте, что я пытаюсь Вас оскорбить. Хотелось бы знать, компетентны ли Вы. Описание прочёл, идея интересна. Но, идея - это только первый шаг. Удачи.
Сообщение отредактировал Vigilem - Среда, 05 Февраля 2014, 23:06
ZOMBIKOTruss, если я правильно Вас понял, то Вы имеете в виду разработку под телефоны? Изначально такова идея и была. Тут много мелких объектов, критичных для игрового процесса. А маленькие объекты не приемлемы при разработке под телефоны, ибо "тыкать" не удобно. vinurd, может быть, спасибо. Но осталось много вещей, нарисовать которые сам не могу
Сообщение отредактировал Vigilem - Среда, 05 Февраля 2014, 16:09
Служебное название: Magic; Жанр игры: scroll shooter; На каком движке: Unity; В каком пространстве: 2D; Какие есть похожие игры: любой scroll shooter; ЯП: C#; Платформа: Windows; Сроки разработки: 01.2014 - 2014
Сюжет:
Санитары вселенной - древняя цивилизация, взявшая на себя ответственность за "чистоту" вселенной. Они следят, чтобы никакая разумная жизнь не дошла до критического уровня, когда она будет способна навредить вселенной. Много времени уже прошло, много миров рождалось и умирало, а Санитары несут своё бремя по сей день. Игрок один из представителей этой цивилизации. Совсем недавно он достиг возраста "зрелости", и теперь получил корабль, личного робота помощника и список из 15 планет, развитие цивилизаций на которых нужно остановить. Санитары не могут разрушать планеты явным образом, никто не должен догадаться об их существовании. Игроку предстоит познакомиться с разнообразными способами разрушения цивилизаций, но оставаться при этом незамеченным. Как уничтожить целый мир? Как уничтожить целую цивилизацию? Как остаться при этом незамеченным? Вы узнаете в процессе игры.
Описание игрового процесса:
Игрок управляет космическим кораблём. Находится в постоянном движении вокруг планеты. На планете существует ряд ключевых построек, уничтожив которые, мы сможем прекратить развитие цивилизации на этой планете. С помощью нашего оружия мы должны ловить момент, и изменять направление движения метеоритов, что бы они попали по ключевым постройкам. Метеориты могут повредить обшивку корабля равно как и вражеские снаряды защитников цивилизаций. Сложность заключается в невозможности напрямую повлиять на игровой процесс. Для достижения успеха игроку придётся комбинировать в себе внимательность, скорость, хитрость. Уничтожайте вражеские корабли! Уничтожайте целые миры! Сохраните вселенную! Но будьте осторожны, всё может быть не так, как кажется.
- Обновлён UI. - Обновлены все эффекты. - Игрок перерисован. Имеет силовой щит. Доступны модификации корабля (в виде бонусов). - Добавлен выбор уровня. - Добавлен сумарный и локальный подсчёт очков (звёздочки за каждый уровень). - Добавлен тестовый босс. - Реализована цепочка заданий.
Сообщение отредактировал Vigilem - Суббота, 03 Мая 2014, 12:46
Поиграл две минуты. После поражения думал сыграть ещё раз: нажал на "Play", и сразу же увидел экран "Game over", расстроился, вышел из игры. Наличие сюжета, кроме как на форуме и в меню под кнопкой "About the game" - не увидел. Зачем вообще нужен сюжет? Так же огорчило отсутствие звука. Понравился прогресс загрузки с пузырьками Так и не понял назначение падающих шприцов на экране загрузки.
Визуальное оформление опрятное, своеобразное. Этот момент понравился. Но как на счёт минимального обучения, я, давно уже не ребёнок, долго разбирался: как мне искать ключ. Анимация несвоевременная: после прыжка, лисёнок отталкивается будучи уже в полёте; после смерти, анимация смерти продолжается посте появления на контрольной точке. Непонятно как бороться с врагами. Управление на лестницах весьма неудобное.
Сообщение отредактировал Vigilem - Среда, 05 Февраля 2014, 14:13
Кроме HTML Вам необходимы некоторые познания в CSS, что бы страничка выглядела притягательно, несмотря на свой минималистский стиль. Что бы весь прогресс сохранялся (Если, конечно, это предусмотрено концепцией) Вам необходимы знания php или ASP.NET. Это всё, что необходимо для создания (из технологий). Удачи.
Добрый день, уважаемый пользователь. Пройдитесь по форуму, посмотрите на количество "начатых" проектов MMORPG. Теперь посмотрите долю состоявшихся проектов. Нет, я ни в коем случае не говорю, что у Вас не получится. Вы представляете себе объём работы? Вы представляете себе объём необходимого контента? Вы представляете себе количество времени, которое придётся потратить? У вас есть опыт в менеджменте команд разработчиков? Вы предлагаете людям рискнуть своим свободным временем и силами ради... ради "высокооплачиваемой работы в Вашей будущей компании". Большие игры не делаются без ничего. Вам нужны капитал, опыт, время.