- 113
- 56 402
Imperative Games
Приєднався 3 вер 2010
6fddf998-70a5-4ea4-97c0-f558e3cad750
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/
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)
Переглядів 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)
Переглядів 3465 місяців тому
Добавим внутренние, Intrinsic-данные с помощью ScriptableObject'ов для оружия, снарядов и их движения (WeaponSpawnerDefinition, ProjectileDefinition, ProjectileVelocityDefinition) 00:00 - 1. Вступление 00:25 - 2. Добавляем вспышки при выстрелах и новый вид оружия - пушки 09:24 - 3. Что будет если хранить информация в полях префабов и делать отдельный префаб на каждый тип корабля 12:19 - 4. Реше...
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 - Лучшее оружие 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 - Пользовательский ввод и движение 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 - Пользовательский ввод и движение 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-разработчиков
Переглядів 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 в матче
Переглядів 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: создание записей в БД
Переглядів 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 и 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. Делаем код сетевым и добавляем инерцию
Переглядів 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 - Корутины на примере таймера записи
Переглядів 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. Интерлюдия - Обновление проекта и библиотек
Переглядів 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. Делаем код крюк-кошки частью
Переглядів 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...
Приветствую тебя, мой дорогой друг! Меня зовут Ильнур (36л). Очень восхищён твоими подробными уроками по Unity, а в частности про Космос-6. Повторил его символ в символ)) Пересматривал ролики по несколько раз. Благодаря тебе, наконец то понял как и для чего нужны интерфейсы, ScriptableObjects и т.д. Сколько смотрел у топовых блогеров эти темы, никто толком от начала и до конца этого не объяснял (либо терминология, либо мелкий непонятный пример). Как жаль, что остановился на самом интересном месте, с нетерпением жду продолжения! П.С. Возможно даже нашёл несколько багов, хотя возможно это фичи)))1. В серии "Лучшее оружие" ты пишешь [SerializeField] public, a не [SerializeField] private. Почему? 2. В этой же серии обещал показать, как реализовать правильное переключение смены орудия. 3. В системах частиц ты добавил в скрипт всего две системы частиц, а их три (одна родительская и две дочерних). Ещё от себя добавлю, если кораблям добавить компонент Trail, то получается очень красивый эффект. Заранее благодарю за столь тяжелый труд, сделаю репост всем своим друзяьм!
Спасибо на добром слове) 1. Если ты про всякие классы и структуры данных (ProjectileDefinition и т.д.), то поля там public чтобы потребители могли прочитать их. Лишним является [SerializeField], но это неважно потому что public переменные и так сериализуются Unity. Но если уже есть потом легче поменять [SerializeField] на сериализацию Odin (часто используется в коммерческих преоктах), например, так что это скорее плюс что так явно написано. 2. Попозже будет, но, немного подумав, я решил что если просто переключение, то код там будет обычный, а если с группами оружия как в крутых космосимах, то код должен быть связан с системой инвентаря / loadout корабля, а это много кода, так что потом. 3. Одна система частиц включена постоянно чтобы дюзы всё время светились (можно выключить, дело вкуса), 2 и 3 включаются вместе чтобы был красивый эффект. 4. Да, TrailRenderer часто используют, и зачастую получается стильно/красиво, так что имеет смысл пробовать в космических играх. Но это дело вкуса и мне не очень нравится сама идея (ибо нереалистично), плюс экономия длины видео, так что пока без следов.
Спасибо бро
Высший пилотаж! Это уровень не для совсем новичков, и это как раз тот уровень, которого крайне мало, особенно в ру сегменте. Спасибо, что делишься опытом!
А если id задавать enum'ом? Под капотом он int'овый, а в SO отображается выпадающим списком. А вообще, неожиданно отличный канал открыл для себя!
Как раз то, что надо! Я столкнулся с проблемой, что оружию как то нужно передавать данные персонажа (модификатор урона например). Не знал как это лучше сделать, как принято. Теперь все стало более понятно. Спасибо! Зачем каждый раз создавать новый объект DataWeaponExtrinsic() ведь можно его создать раз, а потом просто менять в нем данные? Насколько я понял создание объектов генерирует мусор.
Не смотрел ранние выпуски. Начал с этого, т.к. видно, что вернулся к проекту спустя долгий период (т.е. не забросил), и с намерением переписать код. Сам использую инпут систему новую как и ты - и события и свойства в отдельном классе. Из этого видео для себя вынес идею вынести и инпут камеры (направление взгляда, look direction) так же в инпут класс... т.к. сейчас у меня направление взгляда камеры берется напрямую из компонента камеры... и это мне никогда не нравилось, мешало, как говорится "был запах". Буду дальше "посмотреть" за тобой... за циклом видео. Пока нравится ход мыслей. Было бы интересно узнать твой опыт - как давно, где учился и т.д. Из недостатков - очень мелко. Тяжело читать код.
Как с вами связаться? Пробовал писать, но вы либо читаете и оставляете в прочитанных,либо начинаете писать и бросаете,либо несколько дней не читаете?
Здравствуйте. Вы можете написать в Телеграм ещё раз, если сразу не получилось связаться. Дело не в том, что я не хочу читать. Проблема в том что в данный момент навалилось очень много дел.
Будут ли выходить еще видео? Враги II и тп?
Обязательно. Но я смогу вернуться к этому только через несколько дней.
Мне кажется, что тут небольшая ошибка на 42 строке в ShipMovement нужно не AddForce, а AddTorque
Действительно! Спасибо.
кринж!
Спасибо за ролики
Круто, спасибо за урок
Я правильно понимаю, что передвижение игрока (синхронизация позиции каждого игрока) сделано в плане передаче по сети как сервер авторити = false, а стрельба, наоборот сервер авторити = true, и потому мы это делаем через ServerRpc и ClientRpc? То есть в этом видео (ссылка с привязкой по времени) показано, что именно передвижение сделано через сервер авторити ua-cam.com/video/lBxVBjUxDxs/v-deo.html
13:03
здравствуйте моглибы сделать видео как включить андроид управление?
канвас симпл дебаг лог не ясно откуда появился в проекте(((
установил канвас дебаг лог всё сломалось и не работает больше((((АААААаааа
В описании видео - Файлы: disk.yandex.ru/d/VEQB_L7h3MuIrg Внутри папка SimpleDebugLog
@@ZmastaZz Очень странно. Разве что у вас нет того, от чего они зависит - TMPro Если что-то не работает и вам нужна помощь - пишите что выдаёт редактор выдаёт в окне Console
@@ImperativeGames большое спасибо за ответ и уроки, думаю самые лучшие ролики по нет коду что мне попадались. Просто пропустил шаг с дебагом,
8:23 TMP importer как его вызвать???есть какието горячие клавиши???
Если у вас есть TextMeshPro (ставится через Window -> PackageManager) вы можете при первом использовании он должен вызвать такое окошко. Если что-то пошло не так, можно импортировать их по отдельности: Window -> TextMeshPro -> Import TMP Essential Resources Window -> TextMeshPro -> Import TMP Examples and Extras
Тритий
Второй
чето какое-то бессвязное тыкание мышкой туда сюда... поработай над структурой ролика
че за придурошное разрешение???
Да это ж круто! Какие у нас классные ребята работают!
Я и моя команда из нескольких человек делаем масштабную игру в духе сталкера, таркова и метро, ищу энтузиаста, не хотел бы?
ECS это другое, это парадигма написания кода, а по стандарту в Unity компонентная модель, есть игровой объект и на нем компоненты (трансформ, аниматор, рендерер...)
Хоть играми и не занимаюсь, но контент очень полезный.
Привет. То есть если зайти с другого телефона будет видна та же информация ?
Здравствуйте, да, данные хранятся на сервере. Запрос должен идти по ключу, которым обычно является id пользователя. Тогда каждый может скачивать свои данные.
Обращаю внимание, что для освоения темы надо сделать свою тему для приложения, таким образом кастомизировав его внешний. Конечно, легче всего это сделать, используя конструктор m3.material.io/theme-builder#/custom
Здавствуйте. Я Резник Данил, группа ПРИ-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") //строка для дебага } } } }
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
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
Ссылка непосредственно на использованный SimpleDebugLog для выведения логов в клиентах (билдах) disk.yandex.ru/d/oc9WVn5ZOGBWPg
Cyпeр!
Отличное видео! Продолжайте в том же духе. У меня вопрос: можно ли как-то применить это в динамической сцене? Ну, например, выстрелил в бетон и в месте попадания образовались трещины. Буду благодарен за ответ.
Здравствуйте, спасибо. Да, конечно. Если модель статична в графическом смысле, это делают через динамически создаваемую декаль. Просто создаётся игровой объект с моделью плоскости, размещается в месте попадания, и его шейдер использует прозрачность и текстуру повреждения. Надо писать C# код, сам по себе несложный. Но чтобы излишне не нагружать процессор, следует использовать Pool Manager.
Лайк, подписка
Внимание! Т.к. Kotlin Android Extensions ныне не поддерживается (deprecated), этот шаг нужно пропустить.
у меня почему-то не работает. я делаю не 3д а 2д, но разница не большая, что со стандартным шейдером, что с таким как в видео. либо спрайт пропадает вообще либо становится бело странным, а не работает как надо
Причин может быть, конечно, множество. Но первым делом надо проверить, используете ли вы Built-in Render Pipeline Project Settings -> Quality -> поле Render Pipeline Asset должно быть пустым
Хорошо рассказываешь базовые понятия, мне кажется круто выбрано направление, маску легко понять в действии и уже начинается простейшая математика, удачи в продолжениях!
В связи с выходом .NET MAUI выкладываю для удобства и на всякий случай проекты в начальном состоянии. Шаблон AppShells, Xamarin.Forms и он же портированный в MAUI: disk.yandex.ru/d/mpwUTLnugbcyUg
День добрый, с выходом MAUI Xamarin становится неактуальным? Есть ли смысл в его изучении или лучше переходить на MAUI или другое?
@@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.
@@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 } }
Добрый день, вопрос не по тебе данного видео, но пишу здесь так как больше шансов что заметите. Можете сделать видео о том, как работать с локальными уведомлениями в Xamarin? Годноты на ру сегменте по этой теме не нашел.
Спасибо большое за подробный обзор
Здравствуйте, у вас очень годные уроки, только не пропадите как многие другие авторы... У вас очень хорошо получается)
Для экономии времени. 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"
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 лаййков от меня, лучший!
Что делать, если в окно активити в конструкторе чёрный и просто видны только рамки телефона?
Посмотрел все ролики по Unity: Kosmos-6 на одном дыхании. Ваши ясные объяснения и пошаговое руководство невероятно полезны. Спасибо за ваш неутомимый труд в создании крутого образовательного контента, который помогает начинающим разработчикам, таким как я, достигать своих целей. Продолжайте в том же духе! Жду продолжения)
Спасибо за добрые слова. Я в процессе. На самом деле, есть несколько видео в разной степени готовности для разных плейлистов, в том числе и по Unity. Несколько следующих будут сосредоточены на теме нативного Android'а. Но в течение пары недель сделаю и по Unity.
Спасибо, хорошее обзорное видео. Черт побери, а я думал, это у меня много вкладок в браузере открыто))
2000 с небольшим - это разве много? ^^ Вообще, это из-за того приходится осваивать много профессий и, следовательно, программ, чтобы разработать immersive sim в одиночку.