• Как упростить переменную в C#?

    FoggyFinder
    @FoggyFinder
    Можно вынести в отдельную функцию:

    string CreateASCIIStr(string value) => Encoding.ASCII.GetString(Convert.FromBase64String(value));


    или, в локальную, с использованием LocalData:

    string CreateASCIIStr(string value) =>
                    LocalData + Encoding.ASCII.GetString(Convert.FromBase64String(value));


    Добавлено:

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

    В данном случае у вас есть многократный последовательный вызов двух методов:

    Convert.FromBase64String и Encoding.ASCII.GetString

    для удобства их совмещаем в один вызов и получаем

    Encoding.ASCII.GetString(Convert.FromBase64String(value))

    Пример:

    string LocalData = "0";
    string CreateASCIIStr(string value) =>
        LocalData + Encoding.ASCII.GetString(Convert.FromBase64String(value));
    
    var data = new[] {
        CreateASCIIStr("Тут"),
        CreateASCIIStr("Все"),
        CreateASCIIStr("значения"),
        CreateASCIIStr("будут"),
        CreateASCIIStr("совершенные"),
        CreateASCIIStr("Разные")
    };


    Здесь возвращается массив, но если ваши совершенно разные значения в действительности являются массивом, то и обрабатывать их лучше как массив ;-)
    Ответ написан
    3 комментария
  • Хотим создать игру на Unity под Android?

    alexkomp
    @alexkomp
    Простота — залог надежности.
    специально для этого создали GitHub
    Ответ написан
    2 комментария
  • Как определить что кнопка мыши зажата?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    А как вы гуглите?
    spoiler
    Ради интереса попробовал ввести в гугл запрос:
    unity mouse is pressed
    И всё нашлось.
    У вас какие-то другие поисковые запросы?

    Даже если бы не было функции GetMouseButton, чтобы определить, что кнопка зажата, это было бы легко реализовать самому через функции GetMouseButtonDown и GetMouseButtonUp, плюс переменная, в которой можно хранить текущее состояние.
    Ответ написан
    3 комментария
  • Как запретить движение камеры в unity по оси Х?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Смотря как она у вас движется.

    Если она прикреплена, то нужно просто менять эту координату каждый кадр на то, что вам нужно. Скажем, вычислять, какое должно быть относительное смещение с учетом положения игрока в мире.
    void LateUpdate() {
      float x = ...........; // вычисляете, на что сменить.
      transform.position = new Vector3(x, transform.position.y, transform.position.z);
    }

    Визуализация
    5dc3cf0c6aa57097422622.png


    Если же у вас камера перемещается тупо вручную (в Update), то также вручную НЕ перемещать ее по X. То есть вместо функции от координаты X игрока подставлять transform.position.x (т.е. эту же координату).
    Ответ написан
    3 комментария
  • Как заспавнить объект в радиусе определённой сферы?

    Griboks
    @Griboks Куратор тега C#
    Я где-то слышал, что у юнити есть сайт с документацией. Видимо, его украли, раз вы задаёте этот вопрос. К счастью, у меня сохранилась ссылка: https://docs.unity3d.com/ScriptReference/Random-in...
    using UnityEngine;
    
    public class Example : MonoBehaviour
    {
        void Start()
        {
            // Sets the position to be somewhere inside a sphere
            // with radius 5 and the center at zero.
    
            transform.position = Random.insideUnitSphere * 5;
        }
    }
    Ответ написан
    Комментировать
  • Конвертация RTF в PDF на C#, строго бесплатными компонентами, кому таковые известны?

    mindtester
    @mindtester Автор вопроса, куратор тега C#
    http://iczin.su/hexagram_48
    в итоге интенсивных поисков, приходится признать, что все полностью фришные инструменты, пытаются рендерить в html и лишь затем в pdf

    если по условиям задания, мне разрешат использовать офис upd - все сводится к автоматизации задания печать в pdf принтер. если нет - упростим задачу до рендеринга html, а уж браузеры использовать не запрещено точно ))
    вышло еще проще ))
    internal static bool wordAsConverter(string rtf, string pdf, bool verb = true, bool clean = true)
    {
      $"\t..try convert to pdf...".print();
      var res = false;
      var app = new Application();
      try
      {
        var doc = app.Documents.Open(rtf);
        doc.ExportAsFixedFormat(pdf, WdExportFormat.wdExportFormatPDF);
        doc.Close(false);
        res = true;
        var fn = Path.GetFileName(rtf);
        if (verb) $"\t{fn} converted to pdf".print();
        if (clean)
        {
          File.Delete(rtf);
          if (verb) $"\t{fn} deleted".print();
        }
      }
      catch (Exception e) { e.Message.print(); }
      finally { app.Quit(false); }
      return res;
    }
    // привычка, для уменьшения многословности кода
    internal static void print(this string s) => Console.WriteLine(s);

    всем спасибо за участие!
    Ответ написан
    Комментировать
  • Где ошибка в коде?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    oZGq8xg.png
    Ответ написан
    Комментировать
  • Не стандартные ходы в игре на Unity. Как прописать их логику верно?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Не совсем понятно, в чем проблема. Верная логика та, в которой нет ошибок. А ошибку можно искать, только если точно понятно, что вы хотите сделать, то есть какая цель. Если занудствовать, то можно послать вас вообще в самое начало, и попросить определить цель с точки зрения геймдизайна, то есть какие ощущения вы хотите вызвать у игрока и почему именно таким образом. В любом случае, отталкиваться нужно именно от цели, так что целеполагание очень важно.

    Если у вас затык в выборе между левел-дизайном и процедурной генерацией уровней, то лучше руками, потому что можно творчески подойти к созданию уровней, и тем самым сделать игру интереснее. А в процедурной генерации, хоть она и сложнее, обычно используются кусочки, которые не слишком противоречат логике (т.е. создаются руками), но всё же неизбежно вносят свою долю противоречий. То есть если генерировать, то нужно продумать, как могут интересным образом сочетаться элементы, из которых вы генерируете, и что может пойти не так, чтобы попытаться избежать этого.

    Если вопрос про то, как сделать граф, то как угодно. Например, точки - объекты-элементы массива. И каждый такой объект может содержать несколько индексов других элементов, которые будут означать связь с другими точками в этом же массиве.

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

    Если вопрос про управление на графе, то оно такое же - мышь или палец, то есть клик/тап. Учтите ещё, что на мобильных устройства нет наведения на элемент, так что сейчас у вас игра по сути ограничена только ПК. Стрелки клавиатуры можно сделать просто, но в случае 5-и связей просто не хватит клавиш, то есть время от времени игроку нужна будет мышь. Еще можно цифрами на клавиатуре, тогда сами связи нужно будет визуально нумеровать.

    Если вопрос про то, как боты будут ходить в произвольном графе, то это всевозможные алгоритмы поиска пути, из которых наиболее классическим (и основой для других) является A* (Astar).

    Возвращаясь к геймдизайну, у вас нет отображения выпавшего числа ходов на экране, т.е. его нужно нащупывать. В этом и состоит интерес? Также обратите внимание на сам дайс. Если его нет в игре, то это большое упущение, как мне кажется. Сделайте крутой дайс, чтобы он прям перекатывался по экрану, и чтобы игрок до конца не мог угадать, что же выпадет - возможно, это станет ключевым моментом в вашей игре, а ходы и прочее - лишь дополняющие механики. В общем, всё зависит от цели.
    Ответ написан
    Комментировать
  • Чем плохо использование -preview пакетов в unity?

    freeExec
    @freeExec
    Участник OpenStreetMap
    Частыми изменениями.
    Ответ написан
    Комментировать
  • Проблема с get и set. Почему не работает?

    FoggyFinder
    @FoggyFinder
    Свойства по сути маскируют в себе обычные методы для извлечения/установки полей.
    Представим что есть такой метод:

    public string GetValue()
    {
        return GetValue();
    }


    Здесь содержится только новый рекурсивный вызов. Какой результат будет получен при вызове такого метода? Естественно, StackOverflowException.

    Поэтому каждому свойству должно соответствовать какое-то поле.

    private string _actNumber;
    public string ActNumber {
        get { return _actNumber; }
        set { _actNumber = value; }
    }

    Во многих случаях не требуется какая-то определенная проверочная логика, поэтому в языке предусмотрены специальные конструкции (как, например, авто-свойства)

    public string ActNumber { get; set; }

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

    ----

    По поводу второй части вопроса. Обрабатывать null - результат нужно на самом верхнем (допустимом) уровне.

    В C# для этого есть целый набор null-операторов:

    ?., ??, ??=

    о которых можно прочитать, например, в справке:

    ?? and ??= operators

    Null-conditional operators ?. and ?[]
    Ответ написан
    2 комментария
  • Обязательно ли для смены каждой сцены создавать отдельный скрипт?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    Можно сделать более компактно. Например, добавить слушателю события кнопки параметр (имя сцены). Или сделать разных слушателей но в одном скрипте.
    Ответ написан
    Комментировать
  • Как убрать возможность "флипа" HelthBar'а?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Засунуть его в другую ветку?
    Общий Родитель -> в нём Бар и Перс.
    Координаты меняем общего родителя.
    Флипаем перса.
    Как-то так.
    Ответ написан
    6 комментариев
  • Как сделать нормальный рикошет?

    @Sarcasop Автор вопроса
    Разобрался с вопросом. Если кому интересно решение - все до банального просто, я неправильно прочитал справку, из-за чего в Vector2.Reflect() неправильно написал аргументы.
    transform.Translate(_direction * Time.deltaTime * _speed);
            LayerMask _mask = LayerMask.GetMask("Wall");
            RaycastHit2D hit = Physics2D.Raycast(transform.position, _direction, .5f, _mask);
            if (hit && isActive)
            {
                _direction = Vector2.Reflect(_direction, hit.normal).normalized;  
            }
    Ответ написан
    Комментировать
  • Как пофиксить это? unity 2019.2.10f1?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Видимо, здесь точка с запятой в середине строки:
    shopBttnsText[index].text = "BUY UPGRADE \n"; + shopCosts[index] + "$" ;
    Ответ написан
    Комментировать
  • Как подружить множество сцен и боковую панель?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Есть такая штука, как префаб.
    Попробуйте загуглить: unity prefab
    Ответ написан
    2 комментария
  • Почему я не могу создать анимацию в Unity 2D?

    GavriKos
    @GavriKos Куратор тега Unity
    Потому что надо читать что написано. У вас не выбран объект, который вы хотите анимировать.
    Ответ написан
    1 комментарий
  • Unity 2D. Почему мой персонаж не прыгает? По x ходит, а вверх не прыгает. Просто игнорирует пробел. Почему?

    GavriKos
    @GavriKos Куратор тега Unity
    Ну например потому что isGrounded ==false? Такие вопросы решаются отладчиком.
    Ответ написан
    3 комментария
  • Почему не работает переход к другой сцене?

    @Develoder
    Моя игра https://ur-l.ru/sioKg
    Ты указанную сцену закинул в Scenes in Biuld?

    Для начало хотелось бы прочитать лог ошибки!!!
    Ответ написан
    4 комментария
  • Не могу запомнить?

    GavriKos
    @GavriKos Куратор тега Unity
    А не надо запоминать. Надо понимать. И уметь пользоваться IDE и документацией.
    Ответ написан
    Комментировать
  • Не могу запомнить?

    @Develoder
    Моя игра https://ur-l.ru/sioKg
    В том и дело что ты новичок, новичкам Всегда трудно.

    Можно вспомнить как любой из нас начинал учить таблицу умножение в школе, сначала сложно очень, учим и не можем выучить, путаемся забываем, но это сначала, а сейчас спроси у себя 5 на 9 и ты сразу скажешь 45.

    Так что дело в опите и практике, чем больше практикуешься тем лучше запоминается, главное не останавливаться со временем все получится!

    "Сначала всем сложно"
    Ответ написан
    Комментировать