Imperative Games
Imperative Games
  • 113
  • 56 402
Unity: Kosmos-6. 19 – Враги I
Добавляем врагов.
00:00 - 1. Вступление
02:35 - 2. Делаем из копии корабля игрока корабль врага
04:36 - 3. ShipLogicEnemyFighter
18:59 - 4. BehaviourRotateAddTorque
22:34 - 5. IBehaviourRotate и BehaviourRotateQuaternion
28:05 - 6. Динамическое добавление требуемой реализации IBehaviourRotate
32:07 - 7. Стрельба
Плейлист: ua-cam.com/video/8TfFSJgeJ-I/v-deo.html
Ассеты: yadi.sk/d/y9O1IQz_5NrBTw?w=1
Композиция "I Am Running Down the Long Hallway of Viewmont Elementary" принадлежит исполнителю Chris Zabriskie. Лицензия: Creative Commons Attribution (creativecommons.org/licenses/...).
Оригинальная версия: chriszabriskie.com/honor/
Исполнитель: chriszabriskie.com/
Переглядів: 171

Відео

Unity: Kosmos-6. 18 - Лучшее оружие IV (Flyweight, Factory, Object Pool)Unity: Kosmos-6. 18 - Лучшее оружие IV (Flyweight, Factory, Object Pool)
Unity: Kosmos-6. 18 - Лучшее оружие IV (Flyweight, Factory, Object Pool)
Переглядів 3975 місяців тому
Реализуем фабрику с Object Pooling'ом, используя ScriptableObject'ы как хранилища внутренних (Intrinsic) данных снарядов 00:00 - 1. Улучшаем/исправляем уже сделанное 07:12 - 2. Про архитектуру 10:00 - 3. Начинаем реализовывать "данные первичны": Flyweight и FlyweightDefinition 15:50 - 4. FactoryFlyweight (и FlyweightDefinition, ProjectileDefinition) 32:48 - 5. Definition в Projectile 39:49 - 6....
Unity: Kosmos-6. 17 - Лучшее оружие III (Flyweight)Unity: Kosmos-6. 17 - Лучшее оружие III (Flyweight)
Unity: Kosmos-6. 17 - Лучшее оружие III (Flyweight)
Переглядів 3465 місяців тому
Добавим внутренние, Intrinsic-данные с помощью ScriptableObject'ов для оружия, снарядов и их движения (WeaponSpawnerDefinition, ProjectileDefinition, ProjectileVelocityDefinition) 00:00 - 1. Вступление 00:25 - 2. Добавляем вспышки при выстрелах и новый вид оружия - пушки 09:24 - 3. Что будет если хранить информация в полях префабов и делать отдельный префаб на каждый тип корабля 12:19 - 4. Реше...
Unity: Kosmos-6. 16 - Лучшее оружие II (Flyweight)Unity: Kosmos-6. 16 - Лучшее оружие II (Flyweight)
Unity: Kosmos-6. 16 - Лучшее оружие II (Flyweight)
Переглядів 2895 місяців тому
Добавим Extrinsic-данные и инициилизируем ими оружие (IWeapon (WeaponSpawner, Laser)) и снаряды (ISpawnable (Projectile)) 00:00 - 1. Разделение состояния на внутреннее и внешнее, aka паттерн Flyweight 02:04 - 2. Определим и созданим внешнее состояние для оружия (DataWeaponExtrinsic) 07:56 - 3. Инициализация оружия 09:38 - 4. Инициализация снарядов Ссылки: metanit.com/sharp/patterns/4.7.php Плей...
Unity: Kosmos-6. 15 - Лучшее оружие IUnity: Kosmos-6. 15 - Лучшее оружие I
Unity: Kosmos-6. 15 - Лучшее оружие I
Переглядів 3225 місяців тому
Исправим лазер и начнём работу над новым видом оружия, написав код с использованием паттерна Flyweight. Для этого импортируем классы WeaponSpawner и Projectile, похожие на обычный код в Unity-проектах, и сделаем код в них лучше. 00:00 - 1. Вступление 01:30 - 2. Дорабатываем Laser 15:22 - 3. Разбираем WeaponSpawner и Projectile Ссылки: metanit.com/sharp/patterns/4.7.php disk.yandex.ru/d/Pn7P4VEe...
Unity: Kosmos-6. 14 - Пользовательский ввод и движение IIUnity: Kosmos-6. 14 - Пользовательский ввод и движение II
Unity: Kosmos-6. 14 - Пользовательский ввод и движение II
Переглядів 2775 місяців тому
Переделаем наш набросок системы движения в полноценное полуреалистичное движение, используя классы ShipMovement, Engine и EngineVisuals. 00:00 - 1. Вступление 03:11 - 2. Создаём интерфейсы и используем их 07:50 - 3. Используем OnEnable и Script Execution Order 10:28 - 4. ShipMovement: вращение 20:48 - 5. ShipMovement: движение 23:16 - 6. Engine: Thrust 25:35 - 7. Engine: EngineVisuals & Visuali...
Unity: Kosmos-6. 13 - Пользовательский ввод и движение IUnity: Kosmos-6. 13 - Пользовательский ввод и движение I
Unity: Kosmos-6. 13 - Пользовательский ввод и движение I
Переглядів 4216 місяців тому
Создадим класс для обработки пользовательского ввода и приготовимся применять его для полу-реалистичного, основанного на физике, движения корабля. 00:00 - 1. Вступление 00:43 - 2. Модифицируем и приводим проект в порядок 03:29 - 3. Начинаем добавлять физику в проект: Rigidbody и BoxCollider 06:37 - 4. Импортируем StarterAssetsInputs 09:49 - 5. Пояснения к StarterAssetsInputs 12:00 - 6. Пишем ко...
Unity Multiplayer. NGO-подготовка - Вводное видео для начинающих Unity-разработчиковUnity Multiplayer. NGO-подготовка - Вводное видео для начинающих Unity-разработчиков
Unity Multiplayer. NGO-подготовка - Вводное видео для начинающих Unity-разработчиков
Переглядів 2639 місяців тому
Разберёмся немного в Unity и UMN, Netcode for GameObjects 00:00 - 1. Вступление 02:14 - 2. NetworkManager: Unity Transport и префаб игрока 04:33 - 3. Добавляем сцену в список сцен для билда 05:41 - 4. NetworkObject (добавляем на префаб игрока) 07:43 - 5. ManagerMatches (пишем методы для старта сетевой игры) 13:45 - 6. Забегая немного вперёд, про NetworkBehaviour, NetworkVariables и RPC Плейлист...
Unity Multiplayer. NGO 11 - Menu & Score, часть 2. ManagerScore и UI в матчеUnity Multiplayer. NGO 11 - Menu & Score, часть 2. ManagerScore и UI в матче
Unity Multiplayer. NGO 11 - Menu & Score, часть 2. ManagerScore и UI в матче
Переглядів 1259 місяців тому
Добавим ManagerScore и, соответственно, функционал UI'ю, отображающему заработанные пользователем очки. 00:00 - 1. Вступление 00:14 - 2. Включаем UI игрока (HUD) когда начинается матч 05:53 - 3. Импортируем SingletonManager и заготовку под ManagerScore 06:50 - 4. ManagerScore, основной код 14:50 - 5. CharacterHealth: даём очки за попадание и убийство 17:33 - 6. Проставляем namespace Triwoinmag ...
Android Native 14 - Room I: создание записей в БДAndroid Native 14 - Room I: создание записей в БД
Android Native 14 - Room I: создание записей в БД
Переглядів 9810 місяців тому
Ориентируясь на codelab "Persist data with Room", добавим в наш проект библиотеку Room и реализуем создание записей в БД. 00:00 - 1. Вступление 01:13 - 2. Коротко про Room и данный codelab 03:51 - 3. Добавление библиотеки в проект 07:16 - 4. Подробнее про Room 09:02 - 5. Создаём модель / Entity 13:17 - 6. Создаём DAO 17:19 - 7. Создаём класс для работы с БД 21:39 - 8. Создаём свой класс, наслед...
Unity Multiplayer. NGO 10 - Menu/UI и подсчёт очков, часть 1. ConnectionManager и ApprovalCheckUnity Multiplayer. NGO 10 - Menu/UI и подсчёт очков, часть 1. ConnectionManager и ApprovalCheck
Unity Multiplayer. NGO 10 - Menu/UI и подсчёт очков, часть 1. ConnectionManager и ApprovalCheck
Переглядів 17110 місяців тому
Чтобы добавить возможность отслеживать игроков и их состояния (те же очки), используем ApprovalCheck при соединении. 00:00 - 1. Вступление 00:55 - 2. Источники 02:29 - 3. ConnectionManager 06:49 - 4. Помещаем данные в ConnectionPayload при старте клиента, забираем в ApprovalCheck на сервере 07:41 - 4.1. Connect-методы 14:53 - 4.2. Метод ApprovalCheck 18:53 - 5. Создадим метод CreateCustomPlayer...
Unity Multiplayer. NGO 9 - Добавляем "крюк-кошку", часть 3. Делаем код сетевым и добавляем инерциюUnity Multiplayer. NGO 9 - Добавляем "крюк-кошку", часть 3. Делаем код сетевым и добавляем инерцию
Unity Multiplayer. NGO 9 - Добавляем "крюк-кошку", часть 3. Делаем код сетевым и добавляем инерцию
Переглядів 14910 місяців тому
00:00 - 1. Вступление 01:01 - 2. Сетевой код в классе AbilityMoveHookshot 04:23 - 3. Создаём Network Prefab 07:27 - 4. Добавляем доп. возможности и рассчитываем инерцию 15:28 - 5. Применяем инерцию Ссылки: docs-multiplayer.unity3d.com/netcode/current/learn/rpcvnetvar/ Плейлист: ua-cam.com/video/GOjEGlZxPEk/v-deo.html Файлы: disk.yandex.ru/d/VEQB_L7h3MuIrg Авторство композиции "Forest Ambience" ...
Android Native 13 - Корутины на примере таймера записиAndroid Native 13 - Корутины на примере таймера записи
Android Native 13 - Корутины на примере таймера записи
Переглядів 8010 місяців тому
00:00 - 1. Вступление 01:11 - 2. Таймер - recordingTimeTextView 04:10 - 3. Немного теории 06:53 - 4. Корутина во фрагменте: пишем базовый вариант 12:37 - 5. Корутина во фрагменте: учитываем разрушение фрагмента 15:17 - 6. Корутина во фрагменте: lifecycle-aware версия 19:45 - 7. Корутина во ViewModel'е Ссылки: metanit.com/kotlin/tutorial/8.1.php dnmtechs.com/best-practice-for-using-coroutine-wit...
Android Native. Интерлюдия - Обновление проекта и библиотекAndroid Native. Интерлюдия - Обновление проекта и библиотек
Android Native. Интерлюдия - Обновление проекта и библиотек
Переглядів 4810 місяців тому
После долгого перерыва, чтобы продолжить работу над проектом, надо его обновить. 00:00 - 1. Вступление 00:21 - 2. Upgrade Assistant 00:42 - 3. Обновляем SDK и библиотеки через Suggenstions 01:20 - 4. Компиляция: Java и Kotlin 01:57 - 5. Kotlin migration: что-то стало deprecated Плейлист: ua-cam.com/video/f1C8ojVwPDE/v-deo.html Файлы: disk.yandex.ru/d/mWkv8fYUhp71Rw Использован музыкальный трек ...
Unity Multiplayer. NGO 8 - Добавляем "крюк-кошку", часть 2. Делаем код крюк-кошки частьюUnity Multiplayer. NGO 8 - Добавляем "крюк-кошку", часть 2. Делаем код крюк-кошки частью
Unity Multiplayer. NGO 8 - Добавляем "крюк-кошку", часть 2. Делаем код крюк-кошки частью
Переглядів 17910 місяців тому
00:00 - 1. PlayerMoveState 03:02 - 2. Создаём методы и пишем тело SwitchHookshot 11:21 - 3. ExecuteHookshot 13:00 - 4. StartHookshot, StopHookshot и делегаты 16:32 - 5. Подписываемся в AbilityMoveHookshot на делегаты 23:11 - 6. Анимации 25:54 - 7. _verticalVelocity Плейлист: ua-cam.com/video/GOjEGlZxPEk/v-deo.html Файлы: disk.yandex.ru/d/VEQB_L7h3MuIrg Unitypackage с визуальной частью: disk.yan...

КОМЕНТАРІ

  • @TheFenix717
    @TheFenix717 2 місяці тому

    Приветствую тебя, мой дорогой друг! Меня зовут Ильнур (36л). Очень восхищён твоими подробными уроками по Unity, а в частности про Космос-6. Повторил его символ в символ)) Пересматривал ролики по несколько раз. Благодаря тебе, наконец то понял как и для чего нужны интерфейсы, ScriptableObjects и т.д. Сколько смотрел у топовых блогеров эти темы, никто толком от начала и до конца этого не объяснял (либо терминология, либо мелкий непонятный пример). Как жаль, что остановился на самом интересном месте, с нетерпением жду продолжения! П.С. Возможно даже нашёл несколько багов, хотя возможно это фичи)))1. В серии "Лучшее оружие" ты пишешь [SerializeField] public, a не [SerializeField] private. Почему? 2. В этой же серии обещал показать, как реализовать правильное переключение смены орудия. 3. В системах частиц ты добавил в скрипт всего две системы частиц, а их три (одна родительская и две дочерних). Ещё от себя добавлю, если кораблям добавить компонент Trail, то получается очень красивый эффект. Заранее благодарю за столь тяжелый труд, сделаю репост всем своим друзяьм!

    • @ImperativeGames
      @ImperativeGames Місяць тому

      Спасибо на добром слове) 1. Если ты про всякие классы и структуры данных (ProjectileDefinition и т.д.), то поля там public чтобы потребители могли прочитать их. Лишним является [SerializeField], но это неважно потому что public переменные и так сериализуются Unity. Но если уже есть потом легче поменять [SerializeField] на сериализацию Odin (часто используется в коммерческих преоктах), например, так что это скорее плюс что так явно написано. 2. Попозже будет, но, немного подумав, я решил что если просто переключение, то код там будет обычный, а если с группами оружия как в крутых космосимах, то код должен быть связан с системой инвентаря / loadout корабля, а это много кода, так что потом. 3. Одна система частиц включена постоянно чтобы дюзы всё время светились (можно выключить, дело вкуса), 2 и 3 включаются вместе чтобы был красивый эффект. 4. Да, TrailRenderer часто используют, и зачастую получается стильно/красиво, так что имеет смысл пробовать в космических играх. Но это дело вкуса и мне не очень нравится сама идея (ибо нереалистично), плюс экономия длины видео, так что пока без следов.

  • @Mr.Epsilion
    @Mr.Epsilion 3 місяці тому

    Спасибо бро

  • @nickicool
    @nickicool 3 місяці тому

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

  • @nickicool
    @nickicool 3 місяці тому

    А если id задавать enum'ом? Под капотом он int'овый, а в SO отображается выпадающим списком. А вообще, неожиданно отличный канал открыл для себя!

  • @nickicool
    @nickicool 3 місяці тому

    Как раз то, что надо! Я столкнулся с проблемой, что оружию как то нужно передавать данные персонажа (модификатор урона например). Не знал как это лучше сделать, как принято. Теперь все стало более понятно. Спасибо! Зачем каждый раз создавать новый объект DataWeaponExtrinsic() ведь можно его создать раз, а потом просто менять в нем данные? Насколько я понял создание объектов генерирует мусор.

  • @nickicool
    @nickicool 3 місяці тому

    Не смотрел ранние выпуски. Начал с этого, т.к. видно, что вернулся к проекту спустя долгий период (т.е. не забросил), и с намерением переписать код. Сам использую инпут систему новую как и ты - и события и свойства в отдельном классе. Из этого видео для себя вынес идею вынести и инпут камеры (направление взгляда, look direction) так же в инпут класс... т.к. сейчас у меня направление взгляда камеры берется напрямую из компонента камеры... и это мне никогда не нравилось, мешало, как говорится "был запах". Буду дальше "посмотреть" за тобой... за циклом видео. Пока нравится ход мыслей. Было бы интересно узнать твой опыт - как давно, где учился и т.д. Из недостатков - очень мелко. Тяжело читать код.

  • @weisshaarige
    @weisshaarige 4 місяці тому

    Как с вами связаться? Пробовал писать, но вы либо читаете и оставляете в прочитанных,либо начинаете писать и бросаете,либо несколько дней не читаете?

    • @ImperativeGames
      @ImperativeGames 4 місяці тому

      Здравствуйте. Вы можете написать в Телеграм ещё раз, если сразу не получилось связаться. Дело не в том, что я не хочу читать. Проблема в том что в данный момент навалилось очень много дел.

  • @TITbKA
    @TITbKA 4 місяці тому

    Будут ли выходить еще видео? Враги II и тп?

    • @ImperativeGames
      @ImperativeGames 4 місяці тому

      Обязательно. Но я смогу вернуться к этому только через несколько дней.

  • @eassyaj2252
    @eassyaj2252 5 місяців тому

    Мне кажется, что тут небольшая ошибка на 42 строке в ShipMovement нужно не AddForce, а AddTorque

    • @ImperativeGames
      @ImperativeGames 4 місяці тому

      Действительно! Спасибо.

  • @DenchikProduction
    @DenchikProduction 5 місяців тому

    кринж!

  • @Ultrasard
    @Ultrasard 5 місяців тому

    Спасибо за ролики

  • @Ultrasard
    @Ultrasard 5 місяців тому

    Круто, спасибо за урок

  • @allexrushhh6463
    @allexrushhh6463 5 місяців тому

    Я правильно понимаю, что передвижение игрока (синхронизация позиции каждого игрока) сделано в плане передаче по сети как сервер авторити = false, а стрельба, наоборот сервер авторити = true, и потому мы это делаем через ServerRpc и ClientRpc? То есть в этом видео (ссылка с привязкой по времени) показано, что именно передвижение сделано через сервер авторити ua-cam.com/video/lBxVBjUxDxs/v-deo.html

  • @ZmastaZz
    @ZmastaZz 7 місяців тому

    13:03

  • @ZmastaZz
    @ZmastaZz 7 місяців тому

    здравствуйте моглибы сделать видео как включить андроид управление?

  • @ZmastaZz
    @ZmastaZz 7 місяців тому

    канвас симпл дебаг лог не ясно откуда появился в проекте(((

    • @ZmastaZz
      @ZmastaZz 7 місяців тому

      установил канвас дебаг лог всё сломалось и не работает больше((((АААААаааа

    • @ImperativeGames
      @ImperativeGames 7 місяців тому

      В описании видео - Файлы: disk.yandex.ru/d/VEQB_L7h3MuIrg Внутри папка SimpleDebugLog

    • @ImperativeGames
      @ImperativeGames 7 місяців тому

      @@ZmastaZz Очень странно. Разве что у вас нет того, от чего они зависит - TMPro Если что-то не работает и вам нужна помощь - пишите что выдаёт редактор выдаёт в окне Console

    • @ZmastaZz
      @ZmastaZz 7 місяців тому

      @@ImperativeGames большое спасибо за ответ и уроки, думаю самые лучшие ролики по нет коду что мне попадались. Просто пропустил шаг с дебагом,

  • @ZmastaZz
    @ZmastaZz 7 місяців тому

    8:23 TMP importer как его вызвать???есть какието горячие клавиши???

    • @ImperativeGames
      @ImperativeGames 7 місяців тому

      Если у вас есть TextMeshPro (ставится через Window -> PackageManager) вы можете при первом использовании он должен вызвать такое окошко. Если что-то пошло не так, можно импортировать их по отдельности: Window -> TextMeshPro -> Import TMP Essential Resources Window -> TextMeshPro -> Import TMP Examples and Extras

  • @sharkpl9763
    @sharkpl9763 7 місяців тому

    Тритий

  • @jojik681
    @jojik681 7 місяців тому

    Второй

  • @krutoyinfo
    @krutoyinfo 9 місяців тому

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

  • @krutoyinfo
    @krutoyinfo 9 місяців тому

    че за придурошное разрешение???

  • @day9a
    @day9a 9 місяців тому

    Да это ж круто! Какие у нас классные ребята работают!

  • @d4rv1nstandoff26
    @d4rv1nstandoff26 9 місяців тому

    Я и моя команда из нескольких человек делаем масштабную игру в духе сталкера, таркова и метро, ищу энтузиаста, не хотел бы?

  • @alexsklyarov6792
    @alexsklyarov6792 10 місяців тому

    ECS это другое, это парадигма написания кода, а по стандарту в Unity компонентная модель, есть игровой объект и на нем компоненты (трансформ, аниматор, рендерер...)

  • @KingDog25
    @KingDog25 10 місяців тому

    Хоть играми и не занимаюсь, но контент очень полезный.

  • @faust39ru20
    @faust39ru20 11 місяців тому

    Привет. То есть если зайти с другого телефона будет видна та же информация ?

    • @ImperativeGames
      @ImperativeGames 11 місяців тому

      Здравствуйте, да, данные хранятся на сервере. Запрос должен идти по ключу, которым обычно является id пользователя. Тогда каждый может скачивать свои данные.

  • @ImperativeGames
    @ImperativeGames 11 місяців тому

    Обращаю внимание, что для освоения темы надо сделать свою тему для приложения, таким образом кастомизировав его внешний. Конечно, легче всего это сделать, используя конструктор m3.material.io/theme-builder#/custom

    • @shishkadanil3600
      @shishkadanil3600 11 місяців тому

      Здавствуйте. Я Резник Данил, группа ПРИ-331. Не лучше ли будет в RepositoryAffirmation написать так(я так уже сделал, всё работает), чтобы не писать 137 почти одинаковых строк? package com.example.myapplication.data import com.example.myapplication.R import com.example.myapplication.models.Affirmation class RepositoryAffirmations { companion object { fun loadAffirmations(): List<Affirmation> { return (1..137).map { Affirmation(getResourceId(it)) } } private fun getResourceId(index: Int): Int { return when (index) { in 1..137 -> { val resourceName = "affirmation$index" val field = R.string::class.java.getDeclaredField(resourceName) field.getInt(null) } else -> throw IndexOutOfBoundsException("Index should be between 1 and 137") //строка для дебага } } } }

  • @STORM-qw2gq
    @STORM-qw2gq Рік тому

    I am using unity netcode for gameobjects i made a multiplayer game in that RPC calls works on editor but when I build it and try it on my mobile it's not working the RPC calls not working how to fix it? My editor version is 2021.3.21f1

    • @ImperativeGames
      @ImperativeGames Рік тому

      If your mobile device isn't properly connected - you can try using Relay docs-multiplayer.unity3d.com/netcode/current/relay/ docs.unity.com/ugs/en-us/manual/relay/manual/get-started

  • @ImperativeGames
    @ImperativeGames Рік тому

    Ссылка непосредственно на использованный SimpleDebugLog для выведения логов в клиентах (билдах) disk.yandex.ru/d/oc9WVn5ZOGBWPg

  • @doctor_stom3796
    @doctor_stom3796 Рік тому

    Cyпeр!

  • @rybinded
    @rybinded Рік тому

    Отличное видео! Продолжайте в том же духе. У меня вопрос: можно ли как-то применить это в динамической сцене? Ну, например, выстрелил в бетон и в месте попадания образовались трещины. Буду благодарен за ответ.

    • @ImperativeGames
      @ImperativeGames Рік тому

      Здравствуйте, спасибо. Да, конечно. Если модель статична в графическом смысле, это делают через динамически создаваемую декаль. Просто создаётся игровой объект с моделью плоскости, размещается в месте попадания, и его шейдер использует прозрачность и текстуру повреждения. Надо писать C# код, сам по себе несложный. Но чтобы излишне не нагружать процессор, следует использовать Pool Manager.

  • @pmfwopfpowk.wkefpowwjnef1110

    Лайк, подписка

  • @ImperativeGames
    @ImperativeGames Рік тому

    Внимание! Т.к. Kotlin Android Extensions ныне не поддерживается (deprecated), этот шаг нужно пропустить.

  • @Aleksey-Kon
    @Aleksey-Kon Рік тому

    у меня почему-то не работает. я делаю не 3д а 2д, но разница не большая, что со стандартным шейдером, что с таким как в видео. либо спрайт пропадает вообще либо становится бело странным, а не работает как надо

    • @ImperativeGames
      @ImperativeGames Рік тому

      Причин может быть, конечно, множество. Но первым делом надо проверить, используете ли вы Built-in Render Pipeline Project Settings -> Quality -> поле Render Pipeline Asset должно быть пустым

  • @Zolldek
    @Zolldek Рік тому

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

  • @ImperativeGames
    @ImperativeGames Рік тому

    В связи с выходом .NET MAUI выкладываю для удобства и на всякий случай проекты в начальном состоянии. Шаблон AppShells, Xamarin.Forms и он же портированный в MAUI: disk.yandex.ru/d/mpwUTLnugbcyUg

    • @SetAngelGreen
      @SetAngelGreen Рік тому

      День добрый, с выходом MAUI Xamarin становится неактуальным? Есть ли смысл в его изучении или лучше переходить на MAUI или другое?

    • @ImperativeGames
      @ImperativeGames Рік тому

      @@SetAngelGreen Добрый день! 2 аспекта: 1. В целом .NET MAUI это развитие Xamarin.Forms, как следующая версия. Минут за 10 можно перенести код в MAUI проект, и он будет нормально работать (только поменять пространства имён). Ответ на вопрос "Стоит ли изучать предыдущую версию фреймворка?" - "В той части, к. не изменилась". Нового в MAUI процентов 15-20. Но, пожалуй, немногим более половины новых возможностей однозначно лучше старого способа, т.е. не больше 10% всего фреймворка полезно обновилась. 90% знаний X.F столь же актуальны и в MAUI. 2. Наличие учебных материалов. Если вы найдёте хороший курс по .NET MAUI, то, конечно, следуйте ему, но, насколько я знаю, таких пока просто нет. Лучшая информация вроде у James Montemagno www.youtube.com/@JamesMontemagno Но видео по MAUI у него в плейлисте ua-cam.com/video/KmLQLSKqvvI/v-deo.html который, скорее, отдельные темы, а не структурированный курс. Если вам этот плейлист подходит - смотрите его. Есть курсы на Udemy, но "новые курсы по MAUI" - на деле слегка обновлённые (или нет) те же курсы по Xamarin.Forms. Так что я бы скорее посоветовал сперва изучить основы в каком-нибудь курсе/книге Xamarin.Forms, а затем конкретно нужное вам новое из MAUI - у того же James Montemagno.

    • @SetAngelGreen
      @SetAngelGreen Рік тому

      @@ImperativeGames спасибо большое за ответ

  • @ImperativeGames
    @ImperativeGames Рік тому

    На всякий случай использованный код: AndroidManifest: <uses-permission android:name="android.permission.RECORD_AUDIO" /> --- FragmentRecord: package com.android.audiorecordtest import android.Manifest import android.content.Context import android.content.pm.PackageManager import android.media.MediaPlayer import android.media.MediaRecorder import android.os.Bundle import android.support.v4.app.ActivityCompat import android.support.v7.app.AppCompatActivity import android.util.Log import android.view.View.OnClickListener import android.view.ViewGroup import android.widget.Button import android.widget.LinearLayout import java.io.IOException private const val LOG_TAG = "AudioRecordTest" private const val REQUEST_RECORD_AUDIO_PERMISSION = 200 class AudioRecordTest : AppCompatActivity() { private var fileName: String = "" private var recordButton: RecordButton? = null private var recorder: MediaRecorder? = null private var playButton: PlayButton? = null private var player: MediaPlayer? = null // Requesting permission to RECORD_AUDIO private var permissionToRecordAccepted = false private var permissions: Array<String> = arrayOf(Manifest.permission.RECORD_AUDIO) override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<String>, grantResults: IntArray ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) permissionToRecordAccepted = if (requestCode == REQUEST_RECORD_AUDIO_PERMISSION) { grantResults[0] == PackageManager.PERMISSION_GRANTED } else { false } if (!permissionToRecordAccepted) finish() } private fun onRecord(start: Boolean) = if (start) { startRecording() } else { stopRecording() } private fun onPlay(start: Boolean) = if (start) { startPlaying() } else { stopPlaying() } private fun startPlaying() { player = MediaPlayer().apply { try { setDataSource(fileName) prepare() start() } catch (e: IOException) { Log.e(LOG_TAG, "prepare() failed") } } } private fun stopPlaying() { player?.release() player = null } private fun startRecording() { recorder = MediaRecorder().apply { setAudioSource(MediaRecorder.AudioSource.MIC) setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP) setOutputFile(fileName) setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB) try { prepare() } catch (e: IOException) { Log.e(LOG_TAG, "prepare() failed") } start() } } private fun stopRecording() { recorder?.apply { stop() release() } recorder = null } internal inner class RecordButton(ctx: Context) : Button(ctx) { var mStartRecording = true var clicker: OnClickListener = OnClickListener { onRecord(mStartRecording) text = when (mStartRecording) { true -> "Stop recording" false -> "Start recording" } mStartRecording = !mStartRecording } init { text = "Start recording" setOnClickListener(clicker) } } internal inner class PlayButton(ctx: Context) : Button(ctx) { var mStartPlaying = true var clicker: OnClickListener = OnClickListener { onPlay(mStartPlaying) text = when (mStartPlaying) { true -> "Stop playing" false -> "Start playing" } mStartPlaying = !mStartPlaying } init { text = "Start playing" setOnClickListener(clicker) } } override fun onCreate(icicle: Bundle?) { super.onCreate(icicle) // Record to the external cache directory for visibility fileName = "${externalCacheDir.absolutePath}/audiorecordtest.3gp" ActivityCompat.requestPermissions(this, permissions, REQUEST_RECORD_AUDIO_PERMISSION) recordButton = RecordButton(this) playButton = PlayButton(this) val ll = LinearLayout(this).apply { addView(recordButton, LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0f)) addView(playButton, LinearLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0f)) } setContentView(ll) } override fun onStop() { super.onStop() recorder?.release() recorder = null player?.release() player = null } }

  • @SetAngelGreen
    @SetAngelGreen Рік тому

    Добрый день, вопрос не по тебе данного видео, но пишу здесь так как больше шансов что заметите. Можете сделать видео о том, как работать с локальными уведомлениями в Xamarin? Годноты на ру сегменте по этой теме не нашел.

  • @Glebovich
    @Glebovich Рік тому

    Спасибо большое за подробный обзор

  • @onedev02
    @onedev02 Рік тому

    Здравствуйте, у вас очень годные уроки, только не пропадите как многие другие авторы... У вас очень хорошо получается)

  • @ImperativeGames
    @ImperativeGames Рік тому

    Для экономии времени. BottomNavigationView для content_main.xml: <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/navigation_bottom" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/windowBackground" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:menu="@menu/menu_nav_bottom" /> - Ссылка на файлы с анимациями: disk.yandex.ru/d/mWkv8fYUhp71Rw/anim Применение анимаций в nav_graph.xml, внутри action: app:enterAnim="@anim/slide_in_right" app:exitAnim="@anim/slide_out_left" app:popEnterAnim="@anim/slide_in_left" app:popExitAnim="@anim/slide_out_right"

  • @ImperativeGames
    @ImperativeGames Рік тому

    Android Gradle Plugin 7.4.2 Gradle 7.5 id 'org.jetbrains.kotlin.android' version '1.8.0' apply false implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.8.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3' implementation 'androidx.navigation:navigation-ui-ktx:2.5.3' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

  • @АлександрСушанин

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

  • @KipiXxx
    @KipiXxx Рік тому

    Что делать, если в окно активити в конструкторе чёрный и просто видны только рамки телефона?

  • @Uykrop
    @Uykrop Рік тому

    Посмотрел все ролики по Unity: Kosmos-6 на одном дыхании. Ваши ясные объяснения и пошаговое руководство невероятно полезны. Спасибо за ваш неутомимый труд в создании крутого образовательного контента, который помогает начинающим разработчикам, таким как я, достигать своих целей. Продолжайте в том же духе! Жду продолжения)

    • @ImperativeGames
      @ImperativeGames Рік тому

      Спасибо за добрые слова. Я в процессе. На самом деле, есть несколько видео в разной степени готовности для разных плейлистов, в том числе и по Unity. Несколько следующих будут сосредоточены на теме нативного Android'а. Но в течение пары недель сделаю и по Unity.

  • @shdv
    @shdv Рік тому

    Спасибо, хорошее обзорное видео. Черт побери, а я думал, это у меня много вкладок в браузере открыто))

    • @ImperativeGames
      @ImperativeGames Рік тому

      2000 с небольшим - это разве много? ^^ Вообще, это из-за того приходится осваивать много профессий и, следовательно, программ, чтобы разработать immersive sim в одиночку.