[Разработка игр, C#, Unity] Судно на воздушной подушке на Unity 3D
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Учебные материалы для школы программирования. Часть 14Предыдущие уроки можно найти здесь:
- Spaceship
- Домино
- Flappy Bird
- Гравитационная комната
- Платформер
- Деревья (плагин SpeedTree)
- Моделирование дома в SketchUp
- Дом в лесу
- Эффект дождя. Частицы
- Бильярд
- Жидкий персонаж
- Стики и работа с Event System
- Синтезатор на Unity 3D
Сегодня мы настроены на отдых и развлечения! Поэтому, этот урок будет простой и "короткий". Мы не будем работать с графикой (но вас никто не ограничивает в праве усовершенствовать проект), уделим внимание управлению и работе с физикой, на примере создания судна на воздушной подушке.
Порядок выполненияСоздадим новый проект, импортируем в него приложенный ассет. В данном ассете содержится модели, звук и простая сцена. Первое, что нам необходимо сделать - это установить на сцену модели карты и СВП, затем создать материал с нулевым трением и назначить его юбке СВП
На само судно устанавливаем Rigidbody со следующими параметрами:
Обратите внимание, что на коллайдерах установлена галочка Convex, а Rigidbody не имеет галочку использования гравитации. Вместо неё используется ConstantForce с довольно большим значением, направленная вниз.
Как видите, на скриншоте уже наложен скрипт. Но до того, как приступать к нему, необходимо установить рулевые лопатки.
Также, на модель в точках установки рулевых лопаток, установлены пустые гейм-обджекты с названием Gizmo, в них и уложены сами лопатки.
Скрипт конфигурируется согласно позапрошлому скриншоту. Полный листинг скрипта выглядит таким образом:
using UnityEngine;
using System.Collections;
public class Howercraft: MonoBehaviour {
public Rigidbody HowercraftRigidbody; // риджитбади
public Transform CenterOfMass; // центр масс
public float power = 25000; // мощность вперёд/назад
public float torque = 25000; // мощность влево/вправо
float finAngle; // угол отклонения лопаток
float pitch; // питч для звука
public Transform[] Fins; // массив с лопатками
public AudioSource mainEngine; // звук основного двигателя
public AudioSource pushEngine; // звук турбин
// Use this for initialization
void Start() {
HowercraftRigidbody.centerOfMass = CenterOfMass.position - HowercraftRigidbody.position; // устанавливаем центр масс
}
// Update is called once per frame
void Update() {
float inpFB = Input.GetAxis("Vertical"); // ввод вперёд/назад
float inpLR = Input.GetAxis("Horizontal"); // и влево/вправо
Vector3 vely = new Vector3(HowercraftRigidbody.transform.forward.x, 0, HowercraftRigidbody.transform.for ward.z); // находим вектор приложения силы
float gain = Mathf.Clamp01(HowercraftRigidbody.transform.up.y); // если перевёрнуты, силы будут равны нулю
HowercraftRigidbody.AddForce(vely * power * inpFB * gain, ForceMode.Force); // добавляем линейные силы
HowercraftRigidbody.AddRelativeTorque(0, torque * inpLR * inpFB * gain, 0, ForceMode.Force); // и поворот
finAngle = Mathf.Lerp(finAngle, -45 * inpLR, Time.deltaTime / 0.2f); // угол лопаток
foreach(Transform Fin in Fins) {
Fin.localEulerAngles = new Vector3(0, finAngle, 0); // выставляем угол
}
mainEngine.pitch = 0.9f + HowercraftRigidbody.velocity.magnitude / 60f; //высота звука основного двигателя
pitch = Mathf.Lerp(pitch, Mathf.Abs(inpFB) * 1.3f, Time.deltaTime / 0.5f); // высчитываем высоту звука турбины
pushEngine.pitch = 1f + 2f * pitch;
pushEngine.volume = 0.3f + pitch / 3f;
}
}
При этом скрипт лучше давать последовательно, сначала физический движок, потом звуковой.Готово!
===========
Источник:
habr.com
===========
Похожие новости:
- [Совершенный код, C#] Комментарии — ложь
- [Разработка игр, C#, Unity] Регдоллы на Unity 3D
- [.NET, C#] Pure DI для .NET
- [Разработка игр, Локализация продуктов, Монетизация игр, Продвижение игр] На какие языки стоит перевести игру в 2021: обзор от Alconost
- [IT-инфраструктура, Разработка игр, IT-стандарты, Unity, Unreal Engine] Арт-специальности в GameDev, какие бывают и что необходимо знать
- [Разработка игр, C#, Unity] Разработка своей Just Shapes & Beats. Канвас и немного об оптимизации
- [Программирование, Конференции] Фронтенд и современные приложения. Можно без ошибок? Узнаем на DUMP-2021
- [Разработка игр, IT-стандарты, IT-компании] Как устроена постановка света в современных играх и кто такой художник по освещению в GameDev
- [Разработка для интернета вещей, Производство и разработка электроники, Интернет вещей, Электроника для начинающих] Создание своей оценочной платы для микроконтроллеров
- [Программирование, .NET, C#] Cоздание переиспользуемых Linq фильтров (построителей предикатов для Where), которые можно применять для разных типов
Теги для поиска: #_razrabotka_igr (Разработка игр), #_c#, #_unity, #_razrabotka_igr (разработка игр), #_unity, #_unity3d, #_uroki_programmirovanija (уроки программирования), #_unity_uroki (unity уроки), #_unity_tutorial (unity туториал), #_shkola_programmirovanija (школа программирования), #_dlja_nachinajuschih (для начинающих), #_dlja_chajnikov (для чайников), #_razrabotka_igr (
Разработка игр
), #_c#, #_unity
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 09:09
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Учебные материалы для школы программирования. Часть 14Предыдущие уроки можно найти здесь:
Порядок выполненияСоздадим новый проект, импортируем в него приложенный ассет. В данном ассете содержится модели, звук и простая сцена. Первое, что нам необходимо сделать - это установить на сцену модели карты и СВП, затем создать материал с нулевым трением и назначить его юбке СВП На само судно устанавливаем Rigidbody со следующими параметрами: Обратите внимание, что на коллайдерах установлена галочка Convex, а Rigidbody не имеет галочку использования гравитации. Вместо неё используется ConstantForce с довольно большим значением, направленная вниз. Как видите, на скриншоте уже наложен скрипт. Но до того, как приступать к нему, необходимо установить рулевые лопатки. Также, на модель в точках установки рулевых лопаток, установлены пустые гейм-обджекты с названием Gizmo, в них и уложены сами лопатки. Скрипт конфигурируется согласно позапрошлому скриншоту. Полный листинг скрипта выглядит таким образом: using UnityEngine;
using System.Collections; public class Howercraft: MonoBehaviour { public Rigidbody HowercraftRigidbody; // риджитбади public Transform CenterOfMass; // центр масс public float power = 25000; // мощность вперёд/назад public float torque = 25000; // мощность влево/вправо float finAngle; // угол отклонения лопаток float pitch; // питч для звука public Transform[] Fins; // массив с лопатками public AudioSource mainEngine; // звук основного двигателя public AudioSource pushEngine; // звук турбин // Use this for initialization void Start() { HowercraftRigidbody.centerOfMass = CenterOfMass.position - HowercraftRigidbody.position; // устанавливаем центр масс } // Update is called once per frame void Update() { float inpFB = Input.GetAxis("Vertical"); // ввод вперёд/назад float inpLR = Input.GetAxis("Horizontal"); // и влево/вправо Vector3 vely = new Vector3(HowercraftRigidbody.transform.forward.x, 0, HowercraftRigidbody.transform.for ward.z); // находим вектор приложения силы float gain = Mathf.Clamp01(HowercraftRigidbody.transform.up.y); // если перевёрнуты, силы будут равны нулю HowercraftRigidbody.AddForce(vely * power * inpFB * gain, ForceMode.Force); // добавляем линейные силы HowercraftRigidbody.AddRelativeTorque(0, torque * inpLR * inpFB * gain, 0, ForceMode.Force); // и поворот finAngle = Mathf.Lerp(finAngle, -45 * inpLR, Time.deltaTime / 0.2f); // угол лопаток foreach(Transform Fin in Fins) { Fin.localEulerAngles = new Vector3(0, finAngle, 0); // выставляем угол } mainEngine.pitch = 0.9f + HowercraftRigidbody.velocity.magnitude / 60f; //высота звука основного двигателя pitch = Mathf.Lerp(pitch, Mathf.Abs(inpFB) * 1.3f, Time.deltaTime / 0.5f); // высчитываем высоту звука турбины pushEngine.pitch = 1f + 2f * pitch; pushEngine.volume = 0.3f + pitch / 3f; } } =========== Источник: habr.com =========== Похожие новости:
Разработка игр ), #_c#, #_unity |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 09:09
Часовой пояс: UTC + 5