Судно на воздушной подушке на Unity 3D

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Учебные материалы для школы программирования. Часть 14

Предыдущие уроки можно найти здесь:
  1. Spaceship

  2. Домино

  3. Flappy Bird

  4. Гравитационная комната

  5. Платформер

  6. Деревья (плагин SpeedTree)

  7. Моделирование дома в SketchUp

  8. Дом в лесу

  9. Эффект дождя. Частицы

  10. Бильярд

  11. Жидкий персонаж

  12. Стики и работа с Event System

  13. Синтезатор на 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;
    }
}

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

Готово!

Источник: https://habr.com/ru/post/552834/


Интересные статьи

Интересные статьи

В 1С-Битрикс: Управление сайтом (как и в Битрикс24) десятки, если не сотни настраиваемых типов данных (или сущностей): инфоблоки, пользователи, заказы, склады, форумы, блоги и т.д. Стр...
Несмотря на то, что “в коробке” с Битриксом уже идут модули как для SOAP (модуль “Веб сервисы” в редакции “Бизнес” и старше), так и для REST (модуль “Rest API” во всех редакциях, начиная с...
Здравствуйте. Я уже давно не пишу на php, но то и дело натыкаюсь на интернет-магазины на системе управления сайтами Битрикс. И я вспоминаю о своих исследованиях. Битрикс не любят примерно так,...
Реализация ORM в ядре D7 — очередная интересная, перспективная, но как обычно плохо документированная разработка от 1с-Битрикс :) Призвана она абстрагировать разработчика от механики работы с табл...
Основанная в 1998 году компания «Битрикс» заявила о себе в 2001 году, запустив первый в России интернет-магазин программного обеспечения Softkey.ru.