Проект "Виртуальное вождение автомобиля"
Оценка 4.6

Проект "Виртуальное вождение автомобиля"

Оценка 4.6
Игры +1
docx
информатика +1
5 кл
16.09.2019
Проект "Виртуальное вождение автомобиля"
Публикация является частью публикации:
портфолио.docx
Департамент образования мэрии города Новосибирска Дворец творчества детей и учащейся молодежи «Юниор» Городской конкурс исследовательских проектов учащихся 5­8 классов Направление: научно­техническое «Тренажер виртуального вождения автомобиля» Автор: Шурыгин  Роман МБОУ  «Гимназия №8»,5 «Б» класс    Первомайский район г.Новосибирска    Консультант проекта:     Дмитриева Светлана Николаевна,    учитель математики Новосибирск 2018 I. Паспорт проекта. Название проекта.   Разработка  игры «Тренажер виртуального вождения автомобиля» Разработчик.  Шурыгин  Роман, МБОУ  «Гимназия №8»,5 «Б» класс Предметная область .   Информатика.  ПДД. Время разработки проекта    4 недели.  Проблема проекта.    Несоблюдение  школьниками  правил дорожного движения. Случаи травматизма и  несчастных случаев  на дороге  Цель проекта:  Привлечь внимание школьников к изучению правил дорожного движения и их  соблюдению.   Обучение навыкам безопасного поведения на дороге.  Задачи проекта:  Изучить литературу по данной теме из различных источников.  Выбрать нужные программы  и язык программирования для создания игры.  Создать знаки дорожного движения, элементы дороги, парковку, дома, деревья,  людей. Заставить  автомобиль выполнять  команды движения и «научить»  людей  двигаться.  Составить вопросы по ПДД .  Провести опрос (консультацию учащихся) перед  началом игры. Опробовать тренажер на учащихся своего класса. Тип проекта.     Социально значимый творческий, игровой проект.  Используемые технологии.    Программирование, графический дизайн, анимация.  Программы Unity3D на языке С#,  Cinema4G, Make Human. Форма проекта.     Виртуальная игра. Содержание.   Автомобиль должен двигаться правилам дорожного движения, согласно установленным  знакам.  Область применения результата проекта • Использовать тренажер для информационной работе по ПДД учащимися нашей  школы.  • Преподнести тренажер в качестве подарка Детскому Автогородку в рамках  Городского конкурса «Зеленая волна». Результативность • Повышение активности в изучении и соблюдении ПДД.  • Уменьшение числа правонарушений учащимися нашей школы. Литература. Источники. //www.youtube.com/channel/UCvEWclLkExSIsig9G_Z4e1Q?view_as=subscriber  1. 2. https://unity3d.com/ru/get­unity/download 3. http://www.makehuman.org/download.php  II. Описание работы над проектом.     Мною   выбран   данный   проект   не   случайно.   За   последние   три   года     произошел   рост нарушений   ПДД   учащимися   нашей   школы.   За   2016­17   уч.год   ими   было   совершено   57 правонарушений   в   качестве   участников   дорожного   движения.   По   данным   текущего учебного года в нашей школе 8 нарушений.    Не соблюдение учащимися правил Дорожного движения привело меня к  созданию игры – тренажера,   которая   бы   вызвала   у   школьников   интерес   к   изучению   правил   дорожного движения.     В   моей   игре     водителем   виртуального   автомобиля   может   стать   любой   желающий, имеющий элементарные навыки работы с компьютером.      Автомобиль   должен   двигаться   согласно   правилам   дорожного   движения,   согласно установленным   знакам.   Авто   может   набирать   и   уменьшать   скорость   движения, поворачивать и разворачиваться, останавливаться. Мне удалось анимировать движение и торможение сопроводить различными звуковыми эффектами. При торможении появляется дым.    Мною установлена невидимая стена с целью, чтобы авто не сносило с дорожного полотна. Я «научил» оборачиваться пешеходов.     Моя   работа   была   начата   с   написания   скрипта   контроля   дороги,   создания   карты (поверхности).   Затем   расположил   дороги,   установил   авто.     Создал   знаки   и   светофор. Написал   скрипты   для   камеры.   Чтобы   камера   могла   отслеживать   движение   авто.   Ввел различные объекты дома, деревья, людей.   Добавил     анимацию.     Дома   возникают   при   приближении   к   объекту,   увеличиваются   в размере. Люди оглядываются, чтобы приступить к движению по пешеходному переходу. Использовал скрипты контроллера управления персонажами.  Конечная цель в работе мною еще не достигнута. Но уже проявился интерес к моей игре не только у моих одноклассников, но и учителей нашей школы. Первым испытателем моей виртуальной игры стала Светлана Николаевна.    Я планирую усовершенствовать игру. Добавить в игру новые объекты, «научить» людей и другие объекты  передвигаться. Добавить переключение сигналов светофора.    В интернете есть 3 моих обучающих видеоролика: 1. Как создать персонаж.  2. Как сделать машину. 3. Скрипты. 1 часть. Урок по  скриптингу. Включение и выключение объекта. В дальнейшем, возможно, мое увлечение станет моей основной работой. Приложение 1. Скрипты для программы Unity Контролер using UnityEngine; using UnityStandardAssets.CrossPlatformInput; namespace UnityStandardAssets.Characters.ThirdPerson { [RequireComponent(typeof (ThirdPersonCharacter))] public class ThirdPersonUserControl : MonoBehaviour { private ThirdPersonCharacter m_Character; // A reference to the ThirdPersonCharacter on the object private Transform m_Cam; // A reference to the main camera in the scenes transform private Vector3 m_CamForward; // The current forward direction of the camera private Vector3 m_Move; private bool m_Jump; // the world-relative desired move direction, calculated from the camForward and user input. private void Start() { // get the transform of the main camera if (Camera.main != null) { m_Cam = Camera.main.transform; } else { Debug.LogWarning( "Warning: no main camera found. Third person character needs a Camera tagged \ "MainCamera\ ", for camera-relative controls.", gameObject); // we use self-relative controls in this case, which probably isn't what the user wants, but hey, we warned them! } // get the third person character ( this should never be null due to require component ) m_Character = GetComponent(); } private void Update() { if (!m_Jump) { m_Jump = CrossPlatformInputManager.GetButtonDown("Jump"); } } // Fixed update is called in sync with physics private void FixedUpdate() { // read inputs float h = CrossPlatformInputManager.GetAxis("Horizontal"); float v = CrossPlatformInputManager.GetAxis("Vertical"); bool crouch = Input.GetKey(KeyCode.C); // calculate move direction to pass to character if (m_Cam != null) { // calculate camera relative direction to move: m_CamForward = Vector3.Scale(m_Cam.forward, new Vector3(1, 0, 1)).normalized; m_Move = v*m_CamForward + h*m_Cam.right; } else { // we use world-relative directions in the case of no main camera m_Move = v*Vector3.forward + h*Vector3.right; } #if !MOBILE_INPUT // walk speed multiplier if (Input.GetKey(KeyCode.LeftShift)) m_Move *= 0.5f; #endif // pass all parameters to the character control script m_Character.Move(m_Move, crouch, m_Jump); m_Jump = false; } } } Аудио Авто using System; using UnityEngine; using Random = UnityEngine.Random; namespace UnityStandardAssets.Vehicles.Car {     [RequireComponent(typeof (CarController))]     public class CarAudio : MonoBehaviour     {         // This script reads some of the car's current properties and plays sounds accordingly.         // The engine sound can be a simple single clip which is looped and pitched, or it         // can be a crossfaded blend of four clips which represent the timbre of the engine         // at different RPM and Throttle state.         // the engine clips should all be a steady pitch, not rising or falling.         // when using four channel engine crossfading, the four clips should be:         // lowAccelClip : The engine at low revs, with throttle open (i.e. begining acceleration at  very low speed)         // highAccelClip : Thenengine at high revs, with throttle open (i.e. accelerating, but almost  at max speed)         // lowDecelClip : The engine at low revs, with throttle at minimum (i.e. idling or engine­ braking at very low speed)         // highDecelClip : Thenengine at high revs, with throttle at minimum (i.e. engine­braking at very high speed) // For proper crossfading, the clips pitches should all match, with an octave offset between  low and high.         public enum EngineAudioOptions // Options for the engine audio         {             Simple, // Simple style audio             FourChannel // four Channel audio         }         public EngineAudioOptions engineSoundStyle = EngineAudioOptions.FourChannel;// Set  the default audio options to be four channel         public AudioClip lowAccelClip;                                              // Audio clip for low  acceleration         public AudioClip lowDecelClip;                                              // Audio clip for low  deceleration         public AudioClip highAccelClip;                                             // Audio clip for high  acceleration         public AudioClip highDecelClip;                                             // Audio clip for high  deceleration         public float pitchMultiplier = 1f;                                          // Used for altering the pitch of  audio clips         public float lowPitchMin = 1f;                                              // The lowest possible pitch for  the low sounds         public float lowPitchMax = 6f;                                              // The highest possible pitch for  the low sounds         public float highPitchMultiplier = 0.25f;                                   // Used for altering the pitch  of high sounds         public float maxRolloffDistance = 500;                                      // The maximum distance  where rollof starts to take place         public float dopplerLevel = 1;                                              // The mount of doppler effect  used in the audio         public bool useDoppler = true;                                              // Toggle for using doppler         private AudioSource m_LowAccel; // Source for the low acceleration sounds         private AudioSource m_LowDecel; // Source for the low deceleration sounds         private AudioSource m_HighAccel; // Source for the high acceleration sounds         private AudioSource m_HighDecel; // Source for the high deceleration sounds         private bool m_StartedSound; // flag for knowing if we have started sounds         private CarController m_CarController; // Reference to car we are controlling         private void StartSound() {             // get the carcontroller ( this will not be null as we have require component)             m_CarController = GetComponent();             // setup the simple audio source             m_HighAccel = SetUpEngineAudioSource(highAccelClip);             // if we have four channel audio setup the four audio sources             if (engineSoundStyle == EngineAudioOptions.FourChannel)             {                 m_LowAccel = SetUpEngineAudioSource(lowAccelClip);                 m_LowDecel = SetUpEngineAudioSource(lowDecelClip);                 m_HighDecel = SetUpEngineAudioSource(highDecelClip);             }             // flag that we have started the sounds playing             m_StartedSound = true;         }         private void StopSound()         {             //Destroy all audio sources on this object:             foreach (var source in GetComponents())             {                 Destroy(source);             }             m_StartedSound = false;         }         // Update is called once per frame         private void Update()         {             // get the distance to main camera             float camDist = (Camera.main.transform.position ­ transform.position).sqrMagnitude;             // stop sound if the object is beyond the maximum roll off distance             if (m_StartedSound && camDist > maxRolloffDistance*maxRolloffDistance)             {                 StopSound();             } // start the sound if not playing and it is nearer than the maximum distance             if (!m_StartedSound && camDist < maxRolloffDistance*maxRolloffDistance)             {                 StartSound();             }             if (m_StartedSound)             {                 // The pitch is interpolated between the min and max values, according to the car's  revs.                 float pitch = ULerp(lowPitchMin, lowPitchMax, m_CarController.Revs);                 // clamp to minimum pitch (note, not clamped to max for high revs while burning out)                 pitch = Mathf.Min(lowPitchMax, pitch);                 if (engineSoundStyle == EngineAudioOptions.Simple)                 {                     // for 1 channel engine sound, it's oh so simple:                     m_HighAccel.pitch = pitch*pitchMultiplier*highPitchMultiplier;                     m_HighAccel.dopplerLevel = useDoppler ? dopplerLevel : 0;                     m_HighAccel.volume = 1;                 }                 else                 {                     // for 4 channel engine sound, it's a little more complex:                     // adjust the pitches based on the multipliers                     m_LowAccel.pitch = pitch*pitchMultiplier;                     m_LowDecel.pitch = pitch*pitchMultiplier;                     m_HighAccel.pitch = pitch*highPitchMultiplier*pitchMultiplier;                     m_HighDecel.pitch = pitch*highPitchMultiplier*pitchMultiplier;                     // get values for fading the sounds based on the acceleration                     float accFade = Mathf.Abs(m_CarController.AccelInput);                     float decFade = 1 ­ accFade;                     // get the high fade value based on the cars revs                     float highFade = Mathf.InverseLerp(0.2f, 0.8f, m_CarController.Revs);                     float lowFade = 1 ­ highFade;                     // adjust the values to be more realistic                     highFade = 1 ­ ((1 ­ highFade)*(1 ­ highFade));                     lowFade = 1 ­ ((1 ­ lowFade)*(1 ­ lowFade));                     accFade = 1 ­ ((1 ­ accFade)*(1 ­ accFade)); decFade = 1 ­ ((1 ­ decFade)*(1 ­ decFade));                     // adjust the source volumes based on the fade values                     m_LowAccel.volume = lowFade*accFade;                     m_LowDecel.volume = lowFade*decFade;                     m_HighAccel.volume = highFade*accFade;                     m_HighDecel.volume = highFade*decFade;                     // adjust the doppler levels                     m_HighAccel.dopplerLevel = useDoppler ? dopplerLevel : 0;                     m_LowAccel.dopplerLevel = useDoppler ? dopplerLevel : 0;                     m_HighDecel.dopplerLevel = useDoppler ? dopplerLevel : 0;                     m_LowDecel.dopplerLevel = useDoppler ? dopplerLevel : 0;                 }             }         }         // sets up and adds new audio source to the gane object         private AudioSource SetUpEngineAudioSource(AudioClip clip)         {             // create the new audio source component on the game object and set up its properties             AudioSource source = gameObject.AddComponent();             source.clip = clip;             source.volume = 0;             source.loop = true;             // start the clip from a random point             source.time = Random.Range(0f, clip.length);             source.Play();             source.minDistance = 5;             source.maxDistance = maxRolloffDistance;             source.dopplerLevel = 0;             return source;         }         // unclamped versions of Lerp and Inverse Lerp, to allow value to exceed the from­to range         private static float ULerp(float from, float to, float value)         {             return (1.0f ­ value)*from + value*to;         }     } } Приложение 2. Викторина.

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"

Проект "Виртуальное вождение автомобиля"
Материалы на данной страницы взяты из открытых истончиков либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.
16.09.2019