Понедельник, 17 Мая 2021, 14:21

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Форум игроделов » Записи участника » Lertmind [593]
Результаты поиска
LertmindДата: Воскресенье, 25 Сентября 2016, 17:46 | Сообщение # 21 | Тема: Создание GameObject ов в editor через скрипт?
заслуженный участник
Сейчас нет на сайте
Вот хорошая статья по расширению меню, можно добавлять через него Unity Editor Extensions – Menu Items. Например, этот код после нажатия Tools/New GameObject добавит новый GO (скрипт надо класть в папку Editor):
Код
using UnityEngine;
using UnityEditor;

public class NewBehaviourScript : MonoBehaviour
{

    [MenuItem("Tools/New GameObject")]
    private static void NewGameObject()
    {
        var go = new GameObject("New GameObject");
        go.transform.position = new Vector3(1, 1, 1);
    }
}


Добавлено (25 сентября 2016, 17:46)
---------------------------------------------
Там же (в меню справа) есть про расширение Инспектора, если хочешь видеть кнопки там.


Сообщение отредактировал Lertmind - Воскресенье, 25 Сентября 2016, 17:46
LertmindДата: Воскресенье, 25 Сентября 2016, 17:26 | Сообщение # 22 | Тема: Сжатие на GMS Networking
заслуженный участник
Сейчас нет на сайте
Ох, я думал ты поймёшь по примеру, что использовать сеть через эту DLL не обязательно, чтобы использовать буферы. Ещё раз внимательно посмотри примеры.
LertmindДата: Воскресенье, 25 Сентября 2016, 02:23 | Сообщение # 23 | Тема: Сжатие на GMS Networking
заслуженный участник
Сейчас нет на сайте
Что значит "отправлять данные в GMS"?
Если ты о сети - нашёл такую библиотеку Http Dll 2, там есть буферы, которые можно сжимать Buffers. По ссылке примеры, можно открывать файлы и сжимать через buffer_zlib_compress.
LertmindДата: Четверг, 22 Сентября 2016, 19:54 | Сообщение # 24 | Тема: C# JSON парсинг
заслуженный участник
Сейчас нет на сайте
Во-первых, в JSON переменные в кавычках. Класс надо помечать атрибутом [System.Serializable]. Писать new GGData(); необязательно, если только делать JsonUtility.FromJson. Только что проверил:
// datafile.json
Код
{
    "type": "type1",
    "data": {
        "token": "token1"
    }
}


Код
using System.IO;

using UnityEngine;

[System.Serializable]
public class GGMessage {
    public string type;
    public GGData data = new GGData();
}

[System.Serializable]
public class GGData {
    public string token;
    public string user_id;
    public string channel_id;
    public string errorMsg;
    public int error_num;
    public string channel_name;
    public string user_name;
}

public class SerializationControl1 : MonoBehaviour
{
    string filePath;

    void Start()
    {
        print(Application.persistentDataPath);
        filePath = Path.Combine(Application.persistentDataPath, "datafile.json");
    }
    
    void Update()
    {
        if (Input.GetMouseButtonDown(1))
        {
            string str = File.ReadAllText(filePath);
            GGMessage obj = JsonUtility.FromJson<GGMessage>(str);
            print(obj.data.token);
        }
    }
}


По нажатию правой кнопки выводит token1.
LertmindДата: Среда, 21 Сентября 2016, 17:35 | Сообщение # 25 | Тема: Вопрос-[ответ] по Unity
заслуженный участник
Сейчас нет на сайте
uslucifer, ещё у меня код не оптимальный: добавляются элементы следующего уровня вложенности до проверки текущего. Не буду переписывать, выложил для примера, так как лучше адаптировать код для конкретных случаев, например поиска только на одном уровне вложенности или на одном объекте.
LertmindДата: Вторник, 20 Сентября 2016, 22:16 | Сообщение # 26 | Тема: Вопрос-[ответ] по Unity
заслуженный участник
Сейчас нет на сайте
uslucifer, есть другой способ, не знаю единственный ли. С помощью SceneManager.GetActiveScene().GetRootGameObjects() получаем все GameObject в корне, включая неактивные, а потом проходим по всем потомкам. Этот код находит любой GameObject на сцене:
Код
using UnityEngine;
using UnityEngine.SceneManagement;

using System.Collections;
using System.Collections.Generic;
using System.Linq;

public class SceneHelper : MonoBehaviour
{
    void Start()
    {
        var go = SceneHelper.FindAny("Sphere");
        print(go);
    }
    
    public static GameObject FindAny(string name)
    {
        GameObject[] rootGO = SceneManager.GetActiveScene().GetRootGameObjects();
        Queue<Transform> queue = new Queue<Transform>(rootGO.Select(x => x.transform));

        while (queue.Count > 0)
        {
            Transform current = queue.Dequeue();
            if (current.name == name)
            {
                return current.gameObject;
            }

            for (int i = 0; i < current.childCount; i++)
            {
                queue.Enqueue(current.GetChild(i));
            }
        }
        return null;
    }
}

Насколько это медленно, надеюсь не стоит говорить.


Сообщение отредактировал Lertmind - Вторник, 20 Сентября 2016, 22:33
LertmindДата: Вторник, 20 Сентября 2016, 18:53 | Сообщение # 27 | Тема: return value 3221225477
заслуженный участник
Сейчас нет на сайте
Saitei, я этого не отрицал, но перейти всё равно советую.
Gudleifr, про умные указатели и избавления от new и delete. nullptr - тоже важен. Там ещё были всякие удобства типа списка инициализации и enum class. Я знаю C++ плохо, так что не стоит воспринимать серьёзно :)
LertmindДата: Вторник, 20 Сентября 2016, 17:27 | Сообщение # 28 | Тема: return value 3221225477
заслуженный участник
Сейчас нет на сайте
Gudleifr, уже есть книги, где включён новый стандарт. При правильном использовании ногу будет сложнее прострелить.
LertmindДата: Вторник, 20 Сентября 2016, 05:16 | Сообщение # 29 | Тема: return value 3221225477
заслуженный участник
Сейчас нет на сайте
Мог бы просто открыть интернет и найти код.
Ты обращался к нулевому указателю first; не обнулял newtask->nextTask (как упомянуто выше); логика вывода неверная. Исправленный класс taskList:

Способ добавления элементов неверный, у тебя будут указатели header и description у всех элементов указывать на одни и те же массивы, например такой код:
Код
    taskList li;
    char arr[200] = {0};
    char arr2[200] = {0};
    
    strcpy(arr, "Header1");
    strcpy(arr2, "Description1");
    li.addTask(arr, arr2);
    
    strcpy(arr, "Header2");
    strcpy(arr2, "Description2");
    li.addTask(arr, arr2);
    
    li.dispTask();

выведет:
Код
Header2:                    
Description2                    
Task id: 2                    
Header2:                    
Description2                    
Task id: 2

И ты наверно заметил, что Task id одинаковые, это потому что статические переменные общие для всех экземпляров класса.
Ещё на каждый new должен быть delete.
Советую перейти на современный С++.


Сообщение отредактировал Lertmind - Вторник, 20 Сентября 2016, 05:41
LertmindДата: Понедельник, 19 Сентября 2016, 22:31 | Сообщение # 30 | Тема: Не запускается приложение на юнити
заслуженный участник
Сейчас нет на сайте
dreenline, Исуси. Сколько раз уже спрашивали про Android. Попробуй понизить настройки качества. Возможно памяти не хватает. Поковыряй другие настройки. В конце, когда ничего не получится читай логи и дебаж, как написано в официальном руководстве.

Сообщение отредактировал Lertmind - Понедельник, 19 Сентября 2016, 22:31
LertmindДата: Понедельник, 19 Сентября 2016, 15:51 | Сообщение # 31 | Тема: Bloom эффект только для одного объекта.
заслуженный участник
Сейчас нет на сайте
URGINSAN, ты пробовал? Я сейчас пытался: если камера с одним объектом имеет Depth выше (т. е. рисуется позже) и на ней Bloom, то применяется ко всей сцене, а если наоборот, то любой объект на фоне, который не на слое для блум-камеры, убирает эффект у этого объекта. Пробовал стандартные Bloom и отсюда https://bitbucket.org/Unity-Technologies/cinematic-image-effects/.

Maxplant, ты понимаешь, что если объект будет тёмный - он не будет светиться? Если тебе нужно свечение (glow) не как bloom, то попробуй MK Glow https://www.assetstore.unity3d.com/en/#!/content/28044, там можно применять к отдельным объектам.


Сообщение отредактировал Lertmind - Понедельник, 19 Сентября 2016, 15:52
LertmindДата: Понедельник, 19 Сентября 2016, 00:24 | Сообщение # 32 | Тема: как сделать 2d свет?
заслуженный участник
Сейчас нет на сайте
В гугле полно статей. Недавно отвечал http://gcup.ru/forum/59-8269-720732-16-1473969277. Твоя идея не самая лучшая и медленная, но реализуемая. До того, как в бесплатной версии Unity стало доступно Render To Texture, я писал простой код для тумана войны, который рисует попиксельно круг на текстуру лежащую сверху.
Чтобы можно было считать текстуру, в настройках импорта ставишь Read/Write Enabled.
Если я правильно понял, ты хочешь наложить на один спрайт на другой. Для этого надо провести элементарные действия:
* Узнать координаты углов у спрайтов
* Рассчитать позиции углов накладываемого спрайта относительно тёмного спрайта (x и y от 0 до 1)
* Ну а чтобы получить координаты в текстуре тёмного спрайта - умножаешь эти координаты на размеры текстуры ((int)(localPos.x*texture.width), (int)(localPos.y*texture.height))
* И рисуешь с помощью SetPixel или другого способа.

Добавлено (19 сентября 2016, 00:24)
---------------------------------------------
P.S. Хотя будут проблемы, если размеры текстур разные.

LertmindДата: Воскресенье, 18 Сентября 2016, 17:17 | Сообщение # 33 | Тема: Помощь с выбором названия студии. Можете предложить своё
заслуженный участник
Сейчас нет на сайте
White Ash Studio - женское бельё
Cryostasis - есть такая игра
Forbidden Games - женские духи
Octobyte Games - уже есть, а от слова Studio ничего не изменится
Byteplay - есть такой Python-модуль и компания BYTEPLAY LIMITED
Bunch Studio - цветочный магазин

Так что, Byteplay сойдёт.

Добавлено (18 сентября 2016, 17:17)
---------------------------------------------
Хотел пошутить про "Кирпич" со слоганом "Вы отложите парочку", но такое упоминание уже есть.

LertmindДата: Суббота, 17 Сентября 2016, 03:14 | Сообщение # 34 | Тема: [2D] Tower Defense + Match X (добавили видео геймплея)
заслуженный участник
Сейчас нет на сайте
Я понял почему не видел экрана победы, из-за захвата клеток через ману. Думал, что выигрыша просто не предусмотрено.
Для записи лучше использовать что-то получше, ShareX - хорошая программа, правда для записи с экрана она использует ffmpeg, путь до которого надо указать в настройках. Вот пример записи: https://youtu.be/UwSRSqJLSxA, я ещё увеличил размер экрана, чтобы в FullHD можно было видеть чёткие пиксели.
LertmindДата: Пятница, 16 Сентября 2016, 20:18 | Сообщение # 35 | Тема: Вопрос-[ответ] по Unity
заслуженный участник
Сейчас нет на сайте
alexeishaiduk, я привёл исправленный код... Зачем ты говоришь о GetInt и SetInt? Можно конечно истину и ложь хранить как 1 и 0, но это ничего не меняет.
LertmindДата: Пятница, 16 Сентября 2016, 19:10 | Сообщение # 36 | Тема: Синхронизация фонарика
заслуженный участник
Сейчас нет на сайте
Цитата dzrone3488 ()
Да и что плохого если я попробую чтонть выучить на четвёрке?
Твоё дело, только никто не использует устаревшие технологии в новых проектах и когда разберёшься и обновишь компьютер в новых версия Unity выпилят поддержку.
LertmindДата: Пятница, 16 Сентября 2016, 18:37 | Сообщение # 37 | Тема: Синхронизация фонарика
заслуженный участник
Сейчас нет на сайте
А теперь забудь всё что изучил и перейди к Unity 5 и новой сетевой системе. :)
LertmindДата: Пятница, 16 Сентября 2016, 18:35 | Сообщение # 38 | Тема: ВК слил музыку, пока
заслуженный участник
Сейчас нет на сайте
Цитата sfabrikan ()
last.fm не катит?
Нет, копирастия, треки не послушать.

Добавлено (16 сентября 2016, 18:35)
---------------------------------------------

Цитата BESS55555 ()
http://retrowave.ru/
Хорошая ссылка, сам бывало слушал по похожим тегам на Bandcamp: https://bandcamp.com/tag/synth-pop.
LertmindДата: Пятница, 16 Сентября 2016, 18:06 | Сообщение # 39 | Тема: Тестирование Unity WebGL - полный провал.
заслуженный участник
Сейчас нет на сайте
Прискорбно, только для мобилок это особо не нужно.
LertmindДата: Пятница, 16 Сентября 2016, 14:58 | Сообщение # 40 | Тема: Вопрос-[ответ] по Unity
заслуженный участник
Сейчас нет на сайте
alexeishaiduk, косяк в GetString - SetString:
Код
if (PlayerPrefs.GetString("Music") != "no")
{
    PlayerPrefs.SetString("Music", "no");
    m_on.SetActive(false);
    m_off.SetActive(true);
}
else
{
    PlayerPrefs.SetString("Music", "yes");
    m_off.SetActive(false);
    m_on.SetActive(true);
}
Ошибки не было, потому что GetString может принимать второй необязательный аргумент.


Сообщение отредактировал Lertmind - Пятница, 16 Сентября 2016, 14:59
Форум игроделов » Записи участника » Lertmind [593]
Поиск:

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