[Разработка игр, C#, Unity] Синтезатор на Unity 3D
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Учебные материалы для школы программирования. Часть 13Предыдущие уроки можно найти здесь:
- Spaceship
- Домино
- Flappy Bird
- Гравитационная комната
- Платформер
- Деревья (плагин SpeedTree)
- Моделирование дома в SketchUp
- Дом в лесу
- Эффект дождя. Частицы
- Бильярд
- Жидкий персонаж
- Стики и работа с Event System
При тематическом планировании уроков, мы сталкиваемся с интересной задачкой: в нашей группе учатся и мальчишки и девчонки. У них разные вкусы, разные любимые герои, жанры. И если все занятия будут на тему гонок или Silent Hill - ряды девочек на ваших занятиях, - поредеют. Эту ситуацию мы решаем двумя способами:
- спрашиваем мнение ребят и проводим голосование на уроке. Да-да, только дети смогут сделать вашу программу интересной, поэтому их мнение действительно значимо. Не для галочки. Опрос и обсуждение важно проводить регулярно, ибо все группы разные, темы меняются от возраста к возрасту, меняются в зависимости от того, во что сейчас играют и что смотрят в кино;
- чередуем и комбинируем. Мы стараемся чередовать "спокойные" и "агрессивные" проекты. Например, в этом месяце мы делаем лабиринт ужасов, но после его защиты - приступаем к созданию острова с лесом и домиком. При комбинировании, мы предлагаем всем ребятам уделить внимание визуальной составляющей (раскрасить, добавить элементов, составить композицию и пр.), и девочки с большим энтузиазмом берутся за такую задачу.
Сегодня мы сделаем проект из категории: спокойный, для девчат. Мальчишкам тоже хорошо заходит - особенно момент, когда в конце урока получается звуковая какофония =) Рассмотрим следующие темы:
- выставление вращения объектов в локальной системе координат посредством конверсии из углов Эйлера в кватернионы;
- события объектов OnMouseEnter и OnMouseExit;
- метод POW класса Mathf - возведение в степень;
- парсинг float из имени объекта через системный метод Parse ;
- стек постэффектов от Unity Technologies;
- функция движка RequireComponent.
Особое внимание обратим на:
- изменение скорости воспроизведения и высоты звука через Pitch;
- использование аудиомикшера и постэффектов на мастер-канале микшера, в частности, реверберации и эмуляции комнаты.
Порядок выполненияСоздаётся новый проект, импортируется приложенный ассет, открывается сцена piano (в проекте заранее заготовлена сцена, ключевыми объектами которой являются клавиши, расположенные на сцене в "Пианино/Клавиши").
Клавиши пронумерованы в соответствии с полутонами, начиная с ноты "до" и заканчивается нотой "фа" следующей октавы, т.е. "до", "до диез", "ре", "ре диез", "ми", "фа" и т.д.Клавиши расположены с начала октавы в той же последовательности, что и на реальном пианино.Весь проект умещается в один скрипт. Полный листинг содержит пояснения:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
[RequireComponent(typeof(AudioSource))] // необходимо для того, чтобы скрипт требовал установленный аудиосорс
public class Piano : MonoBehaviour {
public KeyCode Key; // энумератор для выбора клавиши клавиатуры, на которую реагирует скрипт
AudioSource src; // Аудиосорс, приват-переменная
void Start () {
src = GetComponent<AudioSource>(); // получаем аудиосорс
src.pitch = Mathf.Pow(1.059462f, float.Parse(name) - 1f); // высота звука равна 1.059462f в степени (имя_клавиши - 1).
}
void Update () { // Для уменьшения отклика стоит использовать FixedUpdate
if (Input.GetKeyDown(Key)) { // если нажали клавишу.
playNote(); // играем
}
if (Input.GetKeyUp(Key)) { // если отпустили клавишу.
stopNote(); // не играем
}
}
private void OnMouseEnter() { // если мышь над коллайдером клавиши
playNote(); // играем
}
private void OnMouseExit() { // если мышь вышла из коллайдера клавиши
stopNote(); // не играем
}
private void playNote() { // играем
transform.localRotation = Quaternion.Euler(-3, 0, 0); // ставим локальный угол поворота на -3 градуса по Х
src.Play(); // Включаем звук с начала
}
private void stopNote(){ // не играем
transform.localRotation = Quaternion.Euler(0, 0, 0); // ставим локальный угол поворота на 0 градусов по всем осям
src.Stop(); // Останавливаем звук
}
}
Особое внимание стоит уделить строке:
src.pitch = Mathf.Pow(1.059462f, float.Parse(name) - 1f);//высота звука равна 1.059462f в степени (имя_клавиши - 1).
Число 1.059462 высчитано математически и является простой заменой логарифмической функции, делящей одну октаву на 12 полутонов. Таким образом, каждый последующий полутон в 1.059462 раза выше предыдущего по частоте, что при количестве 12 полутонов даёт умножение частоты на 2 с ошибкой в 0.00003 Гц на октаву. С учётом того, что динамический диапазон нашего пианино не превышает полторы октавы, звук практически не искажается.Тем не менее, звуки пианино плохо ложатся в микс, при отпускании клавиши отсутствует затухание, потому было принято решение немного "размазать" всё реверберацией с небольшой задержкой и эмуляцией большой комнаты, которая добавит "хвостов" затухания резко прерывающимся звукам.Создана новая группа аудиомикшера, на мастер-канал которой установлена реверберация со следующими параметрами.
А всем аудиосорсам в качестве output установлен мастер-канал аудиомикшера.Каждой клавише пианино необходимо вручную выставить необходимую клавишу клавиатуры. Так как мы имеем дело с энумератором, необходимо выбрать из представленных вариантов. Клавиши установлены в следующем порядке:
Далее, немного оформляем сцену и добавляем следующие эффекты:
- SSAO - подчеркнёт тени между клавишами, добавит глубины картинке.
- Bloom - высветлит светлые участки ещё сильнее, сделает картинку более приятной на глаз, интенсивность нужно выбрать довольно низкую.
- Антиалиасинг, чтобы убрать пикселизацию.
- Винетка, чтобы затенить края, выделив основной объект.Можно добавить SSR, для легкого отражения на вертикальных плоскостях, что немного улучшит картинку.
Готово!
===========
Источник:
habr.com
===========
Похожие новости:
- [DIY или Сделай сам, Электроника для начинающих] Китайские свинцовые аккумуляторы для фонарей. Обзор и эксплуатация
- [Работа с 3D-графикой, Разработка игр, Дизайн игр, Игры и игровые приставки] От эскиза до релиза: пайплайн регулярного создания контента на примере идеи для оружия от игрока
- [Разработка веб-сайтов, .NET, ASP, C#, Микросервисы] Учим ASP.NET Core новым трюкам на примере Json Rpc 2.0
- [Разработка игр, Тестирование игр] Восстание игроков: некоторое примечание о явлении спорта
- [Разработка игр, Игры и игровые приставки, IT-компании] Патч 1.2 не только исправил часть старых, но и принёс в Cyberpunk 2077 несколько новых багов и критичных проблем
- [Виртуализация, Разработка игр, GPGPU, Тестирование игр] Проброс GeForce GPU в Windows VM теперь официально поддерживается
- [Unity, Unreal Engine, GTD, Учебный процесс в IT, Карьера в IT-индустрии] Как стать разработчиком игр имея за пазухой только здравый смысл?
- [.NET, C#] Страсти по Serilog + .NET Core: Глобальный логгер
- [Разработка игр, C#, Прототипирование, Дизайн игр, Игры и игровые приставки] Tantramantra и магия проектирования
- [Разработка под iOS, Разработка мобильных приложений, Разработка игр] Как меня Apple навечно забанил
Теги для поиска: #_razrabotka_igr (Разработка игр), #_c#, #_unity, #_unity, #_unity3d, #_unity_uroki (unity уроки), #_unity_tutorial (unity туториал), #_shkola_programmirovanija (школа программирования), #_razrabotka_igr (разработка игр), #_uroki_programmirovanija (уроки программирования), #_dlja_nachinajuschih (для начинающих), #_dlja_chajnikov (для чайников), #_razrabotka_igr (
Разработка игр
), #_c#, #_unity
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 13:17
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Учебные материалы для школы программирования. Часть 13Предыдущие уроки можно найти здесь:
Клавиши пронумерованы в соответствии с полутонами, начиная с ноты "до" и заканчивается нотой "фа" следующей октавы, т.е. "до", "до диез", "ре", "ре диез", "ми", "фа" и т.д.Клавиши расположены с начала октавы в той же последовательности, что и на реальном пианино.Весь проект умещается в один скрипт. Полный листинг содержит пояснения: using System.Collections;
using System.Collections.Generic; using UnityEngine; using System; [RequireComponent(typeof(AudioSource))] // необходимо для того, чтобы скрипт требовал установленный аудиосорс public class Piano : MonoBehaviour { public KeyCode Key; // энумератор для выбора клавиши клавиатуры, на которую реагирует скрипт AudioSource src; // Аудиосорс, приват-переменная void Start () { src = GetComponent<AudioSource>(); // получаем аудиосорс src.pitch = Mathf.Pow(1.059462f, float.Parse(name) - 1f); // высота звука равна 1.059462f в степени (имя_клавиши - 1). } void Update () { // Для уменьшения отклика стоит использовать FixedUpdate if (Input.GetKeyDown(Key)) { // если нажали клавишу. playNote(); // играем } if (Input.GetKeyUp(Key)) { // если отпустили клавишу. stopNote(); // не играем } } private void OnMouseEnter() { // если мышь над коллайдером клавиши playNote(); // играем } private void OnMouseExit() { // если мышь вышла из коллайдера клавиши stopNote(); // не играем } private void playNote() { // играем transform.localRotation = Quaternion.Euler(-3, 0, 0); // ставим локальный угол поворота на -3 градуса по Х src.Play(); // Включаем звук с начала } private void stopNote(){ // не играем transform.localRotation = Quaternion.Euler(0, 0, 0); // ставим локальный угол поворота на 0 градусов по всем осям src.Stop(); // Останавливаем звук } } src.pitch = Mathf.Pow(1.059462f, float.Parse(name) - 1f);//высота звука равна 1.059462f в степени (имя_клавиши - 1).
А всем аудиосорсам в качестве output установлен мастер-канал аудиомикшера.Каждой клавише пианино необходимо вручную выставить необходимую клавишу клавиатуры. Так как мы имеем дело с энумератором, необходимо выбрать из представленных вариантов. Клавиши установлены в следующем порядке: Далее, немного оформляем сцену и добавляем следующие эффекты:
Готово! =========== Источник: habr.com =========== Похожие новости:
Разработка игр ), #_c#, #_unity |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 13:17
Часовой пояс: UTC + 5