Понедельник, 26 Сентября 2022, 07:00

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Записи участника » SmallNibbler [28]
Результаты поиска
SmallNibblerДата: Понедельник, 25 Июля 2016, 18:53 | Сообщение # 1 | Тема: Проверка целостности конструкции
частый гость
Сейчас нет на сайте
Есть конструкция (2D массив) состоящая из блоков, размером например 5Х5. В центре блок-ядро (core), и несколько обычных блоков вокруг него. Мне нужно пустить волну, от ядра, и проверить целостность этой конструкции. А все отстающие от общей конструкции блоки занести в массив. Допустим ядро на координатах 2:2, то есть в центре, и ещё три блок, первый на 2:0, второй на 2:1, и третий на 2:4. Пускаем волну от ядра в четырёх направлениях, получаем второй блок, пускаем ещё раз, далее получаем первый, третий блок волна не заденет никак.
Теперь вопросы:
1.Как мне реализовать этот алгоритм так, что бы блоки не проверялись по два раза, это возможно?
2.Как мне узнать какие блоки остались не задетыми волной?
3.Эту операцию мне нужно будет проводить часто, возможно есть менее затратный способ?

Распишите пожалуйста всё подробно, заранее спасибо!


Сообщение отредактировал SmallNibbler - Понедельник, 25 Июля 2016, 18:53
SmallNibblerДата: Вторник, 22 Марта 2016, 12:23 | Сообщение # 2 | Тема: Стрим аудио с жесткого диска
частый гость
Сейчас нет на сайте
Доброго времени суток, уже третий день ломаю голову, как мне сделать правильную загрузку аудио файлов с жесткого диска и их воспроизведение.
У меня есть три класса:
Первый - базовый:

Второй - Менеджер ресурсов:

Третий - вспомогательный:


Пробовал перестраивать скрипт по всякому, ничего не получается. Мне нужно что бы в одном классе(ResourceManager) находился файл, после этого из другого класса вызывалась функция предзагрузки аудио, и как он загрузиться этот AudioClip отправлялся сначала в ResourceManager, а из него уже в базовый класс, присваивался источнику аудио, и воспроизводился.

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

Помогите, как быть?

Добавлено (22 марта 2016, 12:23)
---------------------------------------------
Я разобрался, всё оказалось гораздо проще:


Просто не додумался что у класса WWW свой поток. Подскажите, такой способ не будет сильно тормозить игру если проигрывать все звуки(выстрелы, шаги, эмбиент и др.) из папки?
SmallNibblerДата: Воскресенье, 20 Марта 2016, 19:27 | Сообщение # 3 | Тема: Загрузка спрайтов из папки
частый гость
Сейчас нет на сайте
Со спрайтами разобрался вот метод который у меня получился:


Теперь у меня ещё большая проблема с аудио клипами, вот код:


Метод LoadAudioClip находится в статическом классе. Проблема в том что я "загружаю" аудио клип и сразу же хочу воспроизвести его в стрим режиме, но аудио клип не успевает прогрузиться и вылетает ошибка:


Я нашел решение в виде использования куротины, но меня оно не устраивает, подскажите есть ли другой способ?
SmallNibblerДата: Воскресенье, 20 Марта 2016, 14:29 | Сообщение # 4 | Тема: Загрузка спрайтов из папки
частый гость
Сейчас нет на сайте
Доброго времени суток, хочу обрести знания в создании поддержки моддов для игры, и одним из немаловажных пунктов есть загрузка, в скомпилированном проекте, спрайтов из папки в корне проекта. Что то вроде UnityEditor.AssetDatabase.LoadAssetAtPath<T>() метода, а то с этим методом проект отказывается компилироваться, что логично.
SmallNibblerДата: Вторник, 20 Октября 2015, 19:10 | Сообщение # 5 | Тема: Вызов метода в редакторе при добавлении компонента
частый гость
Сейчас нет на сайте
Доброго времени суток. Возникла проблема, сейчас опишу её.

Есть объект "Родитель", на который я добавляю компонент, условно назовем его "Создатель", который создает, дочерний к объекту "Родитель", объект, назовем его "Ребенок". "Создатель" так же вешает на объект "Ребенок" - компонент, назовем его "Компонент". ВСЁ ЭТО ПРОИСХОДИТ В РЕДАКТОРЕ!
Проблема в том что не инициализируются данные компонента "Компонент", пока не нажму на объект на котором он висит ("Ребенок") в иерархии.

Вопрос, если я добавляю компонент В РЕДАКТОРЕ посредством вызова AddComponent в другом скрипте, то при добавлении компонента, как мне вызвать метод из этого же компонента?


Сообщение отредактировал SmallNibbler - Вторник, 20 Октября 2015, 19:11
SmallNibblerДата: Воскресенье, 04 Октября 2015, 20:39 | Сообщение # 6 | Тема: Button баг
частый гость
Сейчас нет на сайте
Здравствуйте, моя проблема в том что кнопка работает как то не правильно, она должна выполнять, при нажатии первый раз - одно действие, а при следующем - другое. Но она при первом нажатии выполняет первое действие, при втором нажатии тоже первое действие, при третьем нажатии второе действие, после чего цикл повторяется. С точки зрения логики, мне кажется что, всё правильно, но я не понимаю в чем проблема.
Код:


Просто создайте объект, и поместите в него этот компонент, и ещё какой нибудь, и нажмите кнопку.

Путем комментирования кода, я выяснил что проблема в этом куске кода:
Код
Component[] c = GetComponents<Component> ();
for (int i = 0; i < c.Length; i++)
if (!(c [i] is Transform) && !(c [i] is ComponentsOldManager) && !(c [i] is Entity))  
{
if(boolean) c[i].hideFlags = HideFlags.None; else c[i].hideFlags = HideFlags.HideInInspector;
}

Добавлено (04 октября 2015, 20:39)
---------------------------------------------
Нашел причину, переменная isShowed должна быть в class ComponentsOldManager.

SmallNibblerДата: Пятница, 02 Октября 2015, 15:02 | Сообщение # 7 | Тема: Подскажите где я ошибся
частый гость
Сейчас нет на сайте
Извиняюсь, проблема была мною решена, простите за бессмысленное создание темы.

Здравствуйте, подскажите пожалуйста, где же я ошибся? Ошибка возникает при нажатии на кнопки в инспекторе, только если по условию нужно удалить компоненты.
Вот код:

А это лог ошибки:


Сообщение отредактировал SmallNibbler - Пятница, 02 Октября 2015, 15:09
SmallNibblerДата: Понедельник, 28 Сентября 2015, 20:18 | Сообщение # 8 | Тема: DestroyImmediate ошибка
частый гость
Сейчас нет на сайте
Цитата beril ()
Как вариант можешь свое контекстное меню сделать, перекрыв базовое

Идеально, то что нужно! Спасибо!
SmallNibblerДата: Понедельник, 28 Сентября 2015, 18:12 | Сообщение # 9 | Тема: DestroyImmediate ошибка
частый гость
Сейчас нет на сайте
Цитата beril ()
Посмотри это, может поможет


Да видел эту тему, но тогда не уделил ей должного внимания. Вот этот скрипт работает на ура, только его нужно переписать под компоненты.
Спасибо огромное, с меня причитается плюс.

Код
using UnityEngine;
using System.Collections.Generic;

namespace de.softfun.drawntogether {
     public class EnhancedBehavior : MonoBehaviour {
         private List<GameObject> linkedObjects = new List<GameObject>();

         protected void destroy(params GameObject[] objects) {
             foreach (GameObject o in objects) {
                 try {
                     Destroy(o);
                 } catch {
                     continue;
                 }
             }
         }

         public void LinkObjects(params GameObject[] objects) {
             foreach (GameObject o in objects) {
                 linkedObjects.Add(o);
             }
         }

         void OnDestroy() {
             foreach (GameObject o in linkedObjects) {
                 destroy(o);
             }
         }

         protected T instantiate<T>(T prefab, bool addLink = true) where T : Object {
             T o =  (T)Instantiate(prefab);
             if (addLink && (o is GameObject)) {
                 linkedObjects.add(o);
             }
             return o;
         }

     }
}

Добавлено (28 сентября 2015, 17:13)
---------------------------------------------
А нет, поспешил с выводами, ошибка не исчезла. Она возникает при нажатии кнопки play.
Подскажите boolean переменную которая показывает воспроизведена игра или нет, думаю это исправит проблему.

Добавлено (28 сентября 2015, 17:26)
---------------------------------------------
Попробовал Application.isPlaying не помогает. Насколько я понимаю когда в инспекторе нажимается Remove Component то вызывается метод OnDestroy(), и мне нужно как то при нажатии Remove Component делать DestroyImmediate, но в OnDestroy() не получается, потому что при запуске игры и её остановки вылазят ошибки. Подскажите решение.

Добавлено (28 сентября 2015, 18:12)
---------------------------------------------
Нашел решение:

Код
using UnityEngine;
using System.Collections;
using UnityEditor;

[ExecuteInEditMode]
public class Test : MonoBehaviourEnhanced {

  void Awake ()   
  {
   if(!GetComponent<SpriteRenderer>())gameObject.AddComponent <SpriteRenderer> ();
  }

  void OnDestroy()
  {
   if(Application.isPlaying || Application.isLoadingLevel || EditorApplication.isPlayingOrWillChangePlaymode) return;
    else DestroyImmediate (GetComponent<SpriteRenderer>());
  }
}
SmallNibblerДата: Воскресенье, 27 Сентября 2015, 20:39 | Сообщение # 10 | Тема: DestroyImmediate ошибка
частый гость
Сейчас нет на сайте
Написал добавление используемого компонента, при добавлении компонента использующего компонента в инспектор, и удаление используемого компонента, при удалении использующего компонента. Если не понятно, то вот скрипт:
Код
using UnityEngine;
using System.Collections;

[ExecuteInEditMode]
public class Test : MonoBehaviour {

   void Awake ()   
   {
    gameObject.AddComponent<SpriteRenderer>();
   }

   void OnDestroy()
   {
    DestroyImmediate (GetComponent<SpriteRenderer>());
   }
}


Лог ошибки:
Код
Destroying object multiple times. Don't use DestroyImmediate on the same object in OnDisable or OnDestroy.
UnityEngine.Object:DestroyImmediate(Object)
Test:OnDestroy() (at Assets/Test.cs:14)


Вообще цель этого скрипта, это добавлять компонент SpriteRenderer когда я добавляю скрипт в инспектор, и удалять его когда я удаляю скрипт. Атрибут RequireComponent не предлагать, потому что я использую HideFlags.HideInInspector, по этому когда я удаляю скрипт, компонент остается на объекте и его не как не убрать.

Как мне быть? Заранее спасибо!


Сообщение отредактировал SmallNibbler - Воскресенье, 27 Сентября 2015, 20:40
SmallNibblerДата: Воскресенье, 27 Сентября 2015, 20:21 | Сообщение # 11 | Тема: Создание графики в скрипте
частый гость
Сейчас нет на сайте
Да, я уже сделал так, но плюс все равно вам поставлю. Спасибо.
SmallNibblerДата: Суббота, 26 Сентября 2015, 21:25 | Сообщение # 12 | Тема: Вопрос-[ответ] по Unity
частый гость
Сейчас нет на сайте
Цитата ivan2009 ()
как обратится к компоненту Image кнопки

Вы подключили библиотеку UI? Если нет, то вот так:
Код
using UnityEngine.UI;
SmallNibblerДата: Пятница, 25 Сентября 2015, 17:55 | Сообщение # 13 | Тема: Создание графики в скрипте
частый гость
Сейчас нет на сайте
Доброго времени суток. Меня интересует как создать пиксель, или массив из пикселей, и использовать его как спрайт для объекта?
SmallNibblerДата: Пятница, 11 Сентября 2015, 12:43 | Сообщение # 14 | Тема: Анекдоты
частый гость
Сейчас нет на сайте
Цитата vadim74a ()
Пpиходит как-то Леpмонтов на бал и видит, что на входе швейцаp не пускает сильно пьяного Пушкина. Решил тогда Леpмонтов помочь дpугу и говоpит:
- Ты, бpат Пушкин, жди меня у окна возле убоpной, я пpойду на бал, откpою тебе сие окно, ты пеpелезешь, и мы с тобой отоpвемся!
- Спасибо дpуг, я в долгу не останусь!
Пpоходит Леpмонтов на бал и откpывает окно, как и обещал. Вдpуг объявляют белый вальс, и Леpмонтова пpиглашает Hаташа Ростова. Во вpемя танца Hаташа обнаpуживает, что у паpтнеpа pасстегнута шиpинка, но не знает, как покоppектнее сообщить ему об этом:
- Михаил... у вас... окно откpыто!
- Hу так я же его наpочно и откpыл! Сейчас оттуда вылезет мой кучеpявый дpуг, и мы с ним кpуто отоpвемся!!

Ахах


Сообщение отредактировал SmallNibbler - Пятница, 11 Сентября 2015, 12:45
SmallNibblerДата: Среда, 26 Августа 2015, 17:36 | Сообщение # 15 | Тема: Вопрос-[ответ] по Unity
частый гость
Сейчас нет на сайте
Здравствуйте, 2 часа проломал голову с одной проблемой, но хотелось бы понять из за чего она произошла. Вопрос:
У меня есть префаб в котором есть public поле, я в него через инспектор забиваю GameObject. И во время игры когда я создаю инстанс этого префаба, то это поле оказывается пустым, почему так происходит? (Если что в public GameObject поле я пробывал забивать и инстанс из редактора и префаб, результат один.)
SmallNibblerДата: Понедельник, 24 Августа 2015, 21:25 | Сообщение # 16 | Тема: Замена текстур
частый гость
Сейчас нет на сайте
Мне кажется гораздо проще его красить текстурой.
SmallNibblerДата: Суббота, 22 Августа 2015, 11:23 | Сообщение # 17 | Тема: Не точная анимация
частый гость
Сейчас нет на сайте
Добрый день, у меня возникла проблема, сейчас постараюсь кратко описать. Когда я пытаюсь использовать анимацию с root motion для того чтобы уменьшить персонажа ровно на половину, то в режиме игры scale по y уменьшается правильно ровно до 0.5(как и должно быть), а transform по y для того что бы персонаж оставался на земле уменьшается не до конца остается примерно 0.2 единицы, и это уже довольно критично, и бросается в глаза, подскажите в чем может быть проблема?

Сообщение отредактировал SmallNibbler - Суббота, 22 Августа 2015, 12:30
SmallNibblerДата: Воскресенье, 16 Августа 2015, 14:04 | Сообщение # 18 | Тема: Зашита игры
частый гость
Сейчас нет на сайте
Доброго времени суток. Начал реализовывать защиту игры, сам впервые этим занимаюсь, так что нашел статью на хабре http://habrahabr.ru/post/249681/.
Но автор не привел примера использования его скриптов, пришлось немного поломать голову, но я почти со всем разобрался, кроме одного.
Вот скрипт:
Код
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;

namespace Assets.Scripts.Common
{
     /// <summary>
     /// AES (Advanced Encryption Standard) implementation with 128-bit key (default)
     /// - 128-bit AES is approved  by NIST, but not the 256-bit AES
     /// - 256-bit AES is slower than the 128-bit AES (by about 40%)
     /// - Use it for secure data protection
     /// - Do NOT use it for data protection in RAM (in most common scenarios)
     /// </summary>
     public static class AES
     {
         public static int KeyLength = 128;
         private const string SaltKey = "ShMG8hLyZ7k~Ge5@";
         private const string VIKey = "~6YUi0Sv5@|{aOZO"; // TODO: Generate random VI each encryption and store it with encrypted value

         public static string Encrypt(byte[] value, string password)
         {
             var keyBytes = new Rfc2898DeriveBytes(password, Encoding.UTF8.GetBytes(SaltKey)).GetBytes(KeyLength / 8);
             var symmetricKey = new RijndaelManaged { Mode = CipherMode.CBC, Padding = PaddingMode.Zeros };
             var encryptor = symmetricKey.CreateEncryptor(keyBytes, Encoding.UTF8.GetBytes(VIKey));

             using (var memoryStream = new MemoryStream())
             {
                 using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
                 {
                     cryptoStream.Write(value, 0, value.Length);
                     cryptoStream.FlushFinalBlock();
                     cryptoStream.Close();
                     memoryStream.Close();

                     return Convert.ToBase64String(memoryStream.ToArray());
                 }
             }
         }

         public static string Encrypt(string value, string password)
         {
             return Encrypt(Encoding.UTF8.GetBytes(value), password);
         }

         public static string Decrypt(string value, string password)
         {
             var cipherTextBytes = Convert.FromBase64String(value);
             var keyBytes = new Rfc2898DeriveBytes(password, Encoding.UTF8.GetBytes(SaltKey)).GetBytes(KeyLength / 8);
             var symmetricKey = new RijndaelManaged { Mode = CipherMode.CBC, Padding = PaddingMode.None };
             var decryptor = symmetricKey.CreateDecryptor(keyBytes, Encoding.UTF8.GetBytes(VIKey));

             using (var memoryStream = new MemoryStream(cipherTextBytes))
             {
                 using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
                 {
                     var plainTextBytes = new byte[cipherTextBytes.Length];
                     var decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);

                     memoryStream.Close();
                     cryptoStream.Close();

                     return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount).TrimEnd("\0".ToCharArray());
                 }
             }
         }
     }
}


Метод Encrypt требует два параметра, первый понятно для чего, но не совсем понятно для чего второй. Как я понял это пароль, можете мне разжевать его использование, пожалуйста?
SmallNibblerДата: Воскресенье, 09 Августа 2015, 11:33 | Сообщение # 19 | Тема: [Gamiron №10] Ищу художника/геймдизайнера
частый гость
Сейчас нет на сайте
Программирование на Construct 2? Не не слышал. biggrin
SmallNibblerДата: Суббота, 25 Июля 2015, 10:54 | Сообщение # 20 | Тема: Помогите NullReferenceException
частый гость
Сейчас нет на сайте
Да, всё верно. Просто я думал что если написать при создании объекта так, как написал я, то в переменную заносится ссылка на компонент. Спасибо!
Форум игроделов » Записи участника » SmallNibbler [28]
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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