Четверг, 18 Апреля 2024, 05:19

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Форум игроделов » Записи участника » shizofren [1367]
Результаты поиска
shizofrenДата: Воскресенье, 16 Июля 2017, 09:52 | Сообщение # 41 | Тема: Сохранение Json в Player Prefs.
Starting MS-DOS...
Сейчас нет на сайте
Flypi, во всем скрипте я не вижу, чтобы вызвался метод "SetPlayerData". Возможно, ты прислал старый скрипт.

Моя команда
shizofrenДата: Суббота, 15 Июля 2017, 16:23 | Сообщение # 42 | Тема: Сохранение Json в Player Prefs.
Starting MS-DOS...
Сейчас нет на сайте
Flypi, нужен весь скрипт.

Моя команда
shizofrenДата: Четверг, 13 Июля 2017, 22:58 | Сообщение # 43 | Тема: Сохранение Json в Player Prefs.
Starting MS-DOS...
Сейчас нет на сайте
Flypi, кинь весь скрипт.

Моя команда
shizofrenДата: Среда, 12 Июля 2017, 21:28 | Сообщение # 44 | Тема: Сохранение Json в Player Prefs.
Starting MS-DOS...
Сейчас нет на сайте
Flypi, наведи на красное подчёркивание, должно всплыть сообщение об ошибке, сделай скриншот и выложи сюда.

Моя команда
shizofrenДата: Воскресенье, 09 Июля 2017, 19:03 | Сообщение # 45 | Тема: Сохранение Json в Player Prefs.
Starting MS-DOS...
Сейчас нет на сайте
Flypi, а игрок имеет поля, которые называются "money, Level, xP"? И какой тип данных у каждого из этих полей?

Моя команда

Сообщение отредактировал shizofren - Воскресенье, 09 Июля 2017, 19:23
shizofrenДата: Воскресенье, 09 Июля 2017, 14:11 | Сообщение # 46 | Тема: Как правильно заполнить текстовый массив из скрипта?
Starting MS-DOS...
Сейчас нет на сайте
ReWire,
Код


string[] words = new string[] { "word1", "word2", "word3" };



Моя команда
shizofrenДата: Воскресенье, 09 Июля 2017, 10:01 | Сообщение # 47 | Тема: Сохранение Json в Player Prefs.
Starting MS-DOS...
Сейчас нет на сайте
Flypi, хорошо, давай разбираться. Какие поля игрока тебе нужно сохранить?

Моя команда
shizofrenДата: Суббота, 08 Июля 2017, 23:12 | Сообщение # 48 | Тема: Сохранение Json в Player Prefs.
Starting MS-DOS...
Сейчас нет на сайте
Flypi, конечно, потому что я написал это всё как пример. Для того, чтобы это реально работало, нужно сохранять именно те поля игрока, которые нужны.

Моя команда
shizofrenДата: Суббота, 08 Июля 2017, 09:33 | Сообщение # 49 | Тема: Сохранение Json в Player Prefs.
Starting MS-DOS...
Сейчас нет на сайте
Flypi, в вашем случае не нужно ничего сохранять в файл. Для сохранения данных дял перехода между сценами используются static поля, они сохраняют значение, так как не привязаны к экземпляру своего не-статического класса. То есть, можно создать класс для сохранения данных при переходе:

Код


public static class PlayerDataIntermediateSaver
{
    public static int Health { get; private set; }
    public static int Level { get; private set; }
    public static int XP { get; private set; }

    public static void SetPlayerData(int health, int level, int xP)
    {
        Health = health;
        Level = level;
        XP = xP;
    }
}



Вот так выглядит переход:

Код


    PlayerDataIntermediateSaver.SetPlayerData(health, level, xP);
    SceneManager.LoadScene(1);



А после загрузки сцены поля PlayerDataIntermediateSaver.Health и т. д. будут иметь значения, записанные до загрузки.


Моя команда
shizofrenДата: Суббота, 08 Июля 2017, 09:16 | Сообщение # 50 | Тема: Эвент на нажатие кнопки мыши
Starting MS-DOS...
Сейчас нет на сайте
Kot-Matroskin, привет, вот изящное решение (в foreach нет ничего плохого), которое отлавливает инпут с любого отлавливаемого устройства (мышь включительно), возвращает всё в KeyCode, не использует ничего устаревшего и имеет удобную работу с полученным результатом:

Код

#region Возврат первого отловленного инпута игрока

    /// <summary>
    /// Ссылка на корутину, которая отлавливает инпут.
    /// </summary>
    Coroutine coroutineWaitForInput;

    /// <summary>
    /// Начать отлавливание инпута игрока.
    /// </summary>
    /// <param name="endAction">Событие, которое произойдет, когда инпут будет отловлен. Аргументы: код отловленного инпута.</param>
    public void StartWaitForInput(System.Action<KeyCode> endAction)
    {
        StopWaitForInput();
        coroutineWaitForInput = StartCoroutine(CoroutineWaitForInput(endAction));
    }

    /// <summary>
    /// Корутина отлавливания инпута.
    /// </summary>
    /// <param name="endAction">Событие, которое произойдет, когда инпут будет отловлен. Аргументы: код отловленного инпута.</param>
    IEnumerator CoroutineWaitForInput(System.Action<KeyCode> endAction)
    {
        System.Array allKeyTypes = System.Enum.GetValues(typeof(KeyCode)); //Список всех кодов кнопок
        while (true) //Действие происходит, пока не будет отловлен инпут или не будет остановлено отлавливание вручную
        {
            foreach(object nowKeyCode in allKeyTypes) //Проверяется каждая кнопка
            {
                if (Input.GetKeyDown((KeyCode)nowKeyCode)) //Если игрок нажал текущую проверяемую кнопку - отслеживание заврешается, код кнопки возвращается
                {
                    endAction.Invoke((KeyCode)nowKeyCode);
                    StopWaitForInput();
                }
            }
            yield return null;
        }
    }

    /// <summary>
    /// Завершить отлавливание инпута игрока.
    /// </summary>
    public void StopWaitForInput()
    {
        if(coroutineWaitForInput != null) { StopCoroutine(coroutineWaitForInput); }
        coroutineWaitForInput = null;
    }

    #endregion


А вот скрипт, демонстрирующий его работу, выводом первой нажатой клавиши в консоль: InputChecker.cs.
Если вы не знакомы с концепцией callback-ов, советую почитать. Для того, чтобы работать с полученной клавишей, вам нужно сделать что-то вроде этого:

Код


void Start() //Старт к примеру, можно вызывать в любом подходящем месте
{
    StartWaitForInput(OnKeyCodeGot);
}

void OnKeyCodeGot(KeyCode key)
{
    //Происходит какое-то действие с найденной клавишей
}



Моя команда

Сообщение отредактировал shizofren - Суббота, 08 Июля 2017, 09:16
shizofrenДата: Среда, 05 Июля 2017, 19:33 | Сообщение # 51 | Тема: Стены + камера
Starting MS-DOS...
Сейчас нет на сайте
malis1, вариантов реализовать это много. Но есть один простой - сделать камеру, которая отдалена от игрока на определенное расстояние, на камеру повесить ригидбоди без гравитации, и коллайдер-триггер. Если в триггере есть объект - камера приближается к игроку, если объекта нет - камера отдаляется.

Моя команда

Сообщение отредактировал shizofren - Среда, 05 Июля 2017, 19:33
shizofrenДата: Воскресенье, 02 Июля 2017, 20:25 | Сообщение # 52 | Тема: Команда для разработки игры на интузиазме
Starting MS-DOS...
Сейчас нет на сайте
Цитата
интузиазм

А это наркотик такой, или всё таки что-то легальное? Если вещество, то как эффект, какие приходы, сколько отходняки, где достать?


Моя команда
shizofrenДата: Воскресенье, 02 Июля 2017, 19:05 | Сообщение # 53 | Тема: Террейн
Starting MS-DOS...
Сейчас нет на сайте
Marlon_Wayens, всё зависит от конкретных задач и особенностей игры. Но, так или иначе, худший способ сделать терейн - сделать его стандартными средствами Unity. Как по мне, самый качественный, настраиваемый и гибкий террейн получается, если делать его как обычную 3д-модель. Тем более, для игры с открытым миром, где террейн будет делиться на множество мелких кусочков для подгрузки во время игры. Стандартный террейн юнити вообще для этого не подходит, да и сделать красивый стандартным функционалом очень сложно. Из программ - есть WorldMachine.

Моя команда
shizofrenДата: Воскресенье, 02 Июля 2017, 18:59 | Сообщение # 54 | Тема: Дочерние объекты и как с ними работать...
Starting MS-DOS...
Сейчас нет на сайте
ArtemS, дочерние объекты следуют относительно своим локальным координатам, которые задаются через localPosition, localRotation, localScale. Но, для того, чтобы "пуля летела из носа корабля" не нужно никаких дочерних объектов. Просто в момент создания пули нужно задать позицию и поворот корабля, то есть как-то так:

Код
Transform newAmmo = Instantiate(ammoPrefab);
newAmmo.position = mainShip.position;
newAmmo.rotation = mainShip.rotation;


А чтобы пуля летела вперед, нужно её двигать относительно её вращения. Для 3D это выглядит так:
Код

Vector3 newPos = transform.position + (transform.forward * moveSpeed * Time.fixedDeltaTime);


Для 2D:

Код
Vector2 newPos = (Vector2)(transform.position + (transform.up * moveSpeed * Time.fixedDeltaTime));


Если пуля не использует физику (быть такого не может, но вдруг), то нужно задавать новую позицию через transform.position. Если же пуля использует физику, то задавать полученные координаты newPos нужно через методы MovePosition, которые содержит любой Rigidbody и Rigidbody2D.

А также маленький совет: лучше всего делать коллайдеры пуль триггерами, так удобней всего определять дальнейшее действие в зависимости от объекта, с которым пуля соприкоснулась. Например, не учитывать столкновение с тем кораблем, откуда была выпущена пуля.


Моя команда
shizofrenДата: Суббота, 01 Июля 2017, 12:45 | Сообщение # 55 | Тема: Выравнивание лэйаут-группы.
Starting MS-DOS...
Сейчас нет на сайте
Будут нормально оформлены картинки - будет помощь.

Моя команда
shizofrenДата: Суббота, 01 Июля 2017, 12:41 | Сообщение # 56 | Тема: загрузка нескольки объектов в скрипт.
Starting MS-DOS...
Сейчас нет на сайте
Создается скрипт с переменными, которые имеют атрибуты [SerializeField], допустим этот скрипт будет аудименеджером, а эти переменные хранят ссылки на нужные аудиоклипы. Создается пустой обьект, на который вешается аудиоменеджер. Все необходимые переменные заполняются, этот новый обьект сохраняется как префаб, называется аудиоменеджером. Этот префаб устанавливается на каждой сцене, где нужен. Значения всех полей будут по умолчанию соответствовать значениям полей префаба. Это одна из главных практик юнити для хранения данных, которые используются во множестве мест.

Моя команда
shizofrenДата: Понедельник, 26 Июня 2017, 23:40 | Сообщение # 57 | Тема: Вопросы для собеседования Unity разработчика
Starting MS-DOS...
Сейчас нет на сайте
К тому же, все якобы асинхронные и абстрактные процессы просто и понятно делаются через UnityEvent, тоже очень удобно.

Моя команда
shizofrenДата: Понедельник, 26 Июня 2017, 22:55 | Сообщение # 58 | Тема: Вопросы для собеседования Unity разработчика
Starting MS-DOS...
Сейчас нет на сайте
EchoIT, любая корутина при запуске предоставляет ссылку на себя, с помощью которой она просто и понятно управляется. Если корутина инкапсулирована и работает в рамках одного обьекта - все просто и понятно, объект работает понятно. К тому же, куда проще написать WaitForSeconds, чем писать таймер для апдейта.

Моя команда

Сообщение отредактировал shizofren - Понедельник, 26 Июня 2017, 22:56
shizofrenДата: Понедельник, 26 Июня 2017, 22:51 | Сообщение # 59 | Тема: Вопросы для собеседования Unity разработчика
Starting MS-DOS...
Сейчас нет на сайте
seaman, как минимум это свидетельствует о том, что ты можешь что-то закончить. Обычно начать делать проблем нет, они возникают с тем, когда приходит время показать завершенную работу.

Моя команда
shizofrenДата: Понедельник, 26 Июня 2017, 22:48 | Сообщение # 60 | Тема: Стандартная спрайтовая анимация VS Animated GIF Player.
Starting MS-DOS...
Сейчас нет на сайте
Sargis, и стандартная анимация, и спрайтшиты, и гиф - прошлый век. Есть такая вещь, как Spine - творит чудеса. А вообще, то, что изображено на гифке делается стандартными средствами юнити без особых навыков в самом редакторе.

Моя команда
Форум игроделов » Записи участника » shizofren [1367]
Поиск:

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