Ответы пользователя по тегу C#
  • Что делать если игрок не хочет прыгать Unity2D, C#?

    Griboks
    @Griboks Куратор тега C#
    Советую вам использовать Raycast вместо проверки земли.

    void Jump()
        {
        	if(physics2d.Raycast()) //Тут уточнить в документации
        		rb.AddForce(transform.up * 10, ForceMode2D.Impulse);
        	
        }
    Ответ написан
    Комментировать
  • Как в C# организовать поиск по файлу и присвоение строк полям объекта?

    Griboks
    @Griboks Куратор тега C#
    Советую изучить https://docs.microsoft.com/ru-ru/dotnet/csharp/pro...

    Используйте встроенную сериализацию.
    1. Для этого измените свойства на поля, добавьте атрибут
    [Serializable()]
    public class Book
        {
            public string[] Author_name;
            ...
        }

    2. Создайте конвертер класса в данные.
    var formatter = new SoapFormatter();
    3. Сохраниет экземпляр класса в файл.
    using (var fileStream = File.Create(fileName))  formatter.Serialize(fileStream, book1);


    Ну и аналогично загружаете файл в память и читаете его.
    Если нужно много классов сохранить, то можно использовать много файлов или, например, сериализовать сразу всю базу данных:
    public class Library {
    public Book Books[];
    }


    p.s.
    Ещё существует замечательный методы File.WriteLines, File.WriteAllText,File.ReadLines, File.ReadAllText.
    Ответ написан
    Комментировать
  • Управление экранными кнопками под Android, 2D платформер, как сделать?

    Griboks
    @Griboks Куратор тега C#
    Самый простой способ - использовать стандартную систему ввода.
    Но также это могут быть кнопки в интерфейсе, это может быть сканер прикосновений пальцев, можно просто скачать готовый контроллер из assets store.

    Если кнопки, то как всегда: привязываете действия к событиям через меню в редакторе (или скриптом).
    Если сканер, то прослушиваете события touch events и проверяете условия (если в левом нижнем углу, то прыжок).
    Ответ написан
    Комментировать
  • Как создать систему таймера?

    Griboks
    @Griboks Куратор тега C#
    Не могу согласиться с xmoonlight . Если вас не волнует возможность взломать вашу игру, тогда при каждом использовании (не запуске) проверяете прошедшее время. Таймера не существует, это лишь видимость, фактически вычисляется прошедшее время по требованию.

    Если вы не хотите, чтобы вашу игру взломали, тогда вы отправляете все действия игрока на сервер, а сервер сам всё проверяет (как описано выше), запускает действие и возвращает результат. В таком подходе шифрование не обязательно; клиент игры выступает в роли "экрана" на который сервер стримит изменения интерфейса.

    Пример: вы хотите купить что-то. Вы нажимаете на кнопку, игра сообщает серверу, что вы нажали на кнопку. Сервер проверяет, какую кнопку вы нажали, хватает ли у вас золота, осуществляет покупку, добавляет её в ваш инвентарь и отсылает назад новое количество золота, новое содержимое инвентаря и новые картинки для UI. Физически ресурсы игры хранятся на клиенте, но их отображением управляет сервер.
    Ответ написан
  • Как нарисовать график с заштриховкой на c#?

    Griboks
    @Griboks Куратор тега C#
    Я не разбираюсь в графиках в WPF поэтому советую использовать GDI+ и вручную нарисовать всё, что требуется. Это сделать достаточно легко, используя обычные методы объекта Graphics, созданного на основе, например, Image (Bitmap).
    Ответ написан
    2 комментария
  • Задача на синхронизацию. Почему получается приоритет читателя?

    Griboks
    @Griboks Куратор тега C#
    Почему получается приоритет читателя?

    Как вы это поняли? Что такое приоритет? Что такое справедливое распределение доступа? Причём тут синхронизация?
    Ответ написан
  • Как рассчитать Хеш сумму файла по средствам C#?

    Griboks
    @Griboks Куратор тега C#
    1. Вы можете придумать любую формулу хеша. Идея простая - зафиксировать состояние файла. Этого можно добиться различными стандартными хеш-функциями (есть в оф. примерах), контрольными суммами (тоже есть в оф. примерах). Вы можете подсчитать длину файла, количество 1 в файле, сохранить первые 1000 байт файла. В общем, формулы могут быть любыми.

    2. Затем вам надо сохранить хеш. Ваш друг ломает хеш, а вы хешируете хеш. Затем ваш друг ломает хеш хеша и т. д.

    3. Поэтому, если вы хотите защититься от дурга, храните хеш на сервере, а перед каждым запуском скачивайте его и проверяйте файл.

    4. Но ваш друг поставит прокси и подменит серверный трафик. Поэтому вам необходимо как-то удостовериться, что хеш получен из надёжного источника. Вы покупаете сертификат и шифруете соединение до сервера.

    5. Ну а дальше ваш друг уже начнёт реверс-инженеринг (дизассемблер). И тут вы никак не сможете защититься.
    Ответ написан
    Комментировать
  • CrossPlatformInputManager в unity 2018, проблемы при установке. Почему?

    Griboks
    @Griboks Куратор тега C#
    Возможно, дело в том, что вы обращаетесь к UnityStandardAssets.CrossPlatformInput.CrossPlatformInputManager.GetAxis в коде CrossPlatformInputManager.GetAxis("Horizontal");
    Попробуйте убрать один CrossPlatformInput.
    Ответ написан
    1 комментарий
  • Управление Rotation с помощью джойстика, как?

    Griboks
    @Griboks Куратор тега C#
    Кроме хардкорного варианта можно ещё рассмотреть стандартные Input Axes. Посмотрите оф. примеры, там используется что-то наподобие Input.GetAxis("horizontal"), что работает и на геймпаде, и на клавиатуре.
    Ответ написан
  • Почему они внутри дракона?

    Griboks
    @Griboks Куратор тега C#
    Необходимо добавить проверку на минимальную дистанцию.
    void Update()
        {
           if (trig == false)
            {
                
                Vector3 rotation = player.position-enemy.position;
                enemy.rotation = Quaternion.Slerp(enemy.rotation, Quaternion.LookRotation(rotation), RotateSpeed * Time.deltaTime);
                if(rotation.sqrMagnitude > 1)
                            enemy.transform.position += enemy.forward * SpeedMove * Time.deltaTime;
                enemy.transform.localPosition = new Vector3(transform.position.x, 0f, transform.position.z);
                enemy.transform.localRotation = new Quaternion(0f, transform.rotation.y ,0f, transform.rotation.w); 
            }
        }
    Ответ написан
    1 комментарий
  • Как заспавнить объект в радиусе определённой сферы?

    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;
        }
    }
    Ответ написан
    Комментировать
  • Как правильно реализовать движение персонажа в Unity 2D?

    Griboks
    @Griboks Куратор тега C#
    У вас движение реализовано через координаты, а отталкивание - через силы. Используйте что-то одно.
    Ответ написан
    Комментировать
  • Как в C# запретить подклассам переопределять метод суперкласса?

    Griboks
    @Griboks Куратор тега C#
    чего бы не произошло, если бы у меня на этапе компиляции был механизм, запрещающий переопределять родительский метод Modify.

    У меня при перекрытии методов выскакивает предупреждение в студии. У вас нет?

    Есть sealed для методов, но он тут не подходит. Как же сделать?

    Почему он не подходит? Костыль лучше? Ну... рефлексия даёт большие возможности, нор лучше всё-таки sealed.
    Ответ написан
  • Как определяется 'производительность' яп?

    Griboks
    @Griboks Куратор тега C#
    Обычно, используются бенчмарки - серии специальных тестов. В интернете есть их результаты, реализации для отдельных языков и даже алгоритмы конкретных тестов.

    Например, если мы хотим посмотреть производительность графики, то можем нарисовать миллион летающих шариков и сравнить fps. Или сравнить оптимизацию через запуск специально подготовленного говнокода. Или найти первую 1000 простых чисел. Или провести векторные операции над большой последовательность данных. Или все вместе.
    Ответ написан
    Комментировать
  • C# Web интерфейс для приложения?

    Griboks
    @Griboks Куратор тега C#
    Если вам необходимо окошко с красивым html интерфейсом, то кроме уже высказанных идей, можете использовать специально под это заточенные вещи, например CefSharp (хром).

    А если вам требуется поднять локальный http сервер с ресурсами в памяти, чтобы заходить на него через браузер, то тут вам поможет стандартный http сервер, или даже сокет сервер, ну или просто сырые сокеты.
    Идея простая: вы получаете запрос аля http get myfile.png, а возвращаете File.ReadAllBytes("myfile.png") или предварительно запакованные в память/dll байты.
    Ответ написан
    Комментировать
  • Как лучше именовать делегаты C#?

    Griboks
    @Griboks Куратор тега C#
    В большинстве случаев вам не нужно писать делегаты. Обычно хватает стандартных Action и Func.
    Ответ написан
    Комментировать
  • Чем нынче защищать C# проект?

    Griboks
    @Griboks Куратор тега C#
    Лицензией, как и всегда. Неужели вы думаете, что какие-то там кувырки с кодом защитят его от взлома? Если да, то смотрите в строну риалтайм онлайн сервера подтверждения, как в онлайн играх.
    Ответ написан
    Комментировать
  • API Telegram, getUpdates Почему показывает старые сообщения, мне нужно только новые?

    Griboks
    @Griboks Куратор тега C#
    При обновлении надо задать так называемый offset, который задаёт максимальный возраст сообщений.
    Ответ написан
    Комментировать
  • Как сделать, чтобы персонаж поворачивался в сторону движения в Unity?

    Griboks
    @Griboks Куратор тега C#
    персонаж поворачивался в сторону, в которую идет.

    void FixedUpdate() {
            rb.velocity = new Vector2(Input.GetAxis("Horizontal") * 6f, rb.velocity.y);
            if(rb.velocity>0) RotateRight();
    else RotateLeft();
        }

    как исправить то, что персонаж делает прыжки как в Flappy Bird

    void Update() {
            if (Input.GetKeyDown (KeyCode.Space) && CanJump()) {
                jump();
            }
        }
    Ответ написан
    2 комментария