Самолёт

Программирование на Юнити.

Самолёт

Сообщение SashaRX 10 июн 2009, 15:29

Приветствую, я совсем недавно изучаю Unity3d, изучаю скрипты, но я пока плохо понимаю C#, а джава скрипт совсем плохо. В общем проблема в следующем, нужно реализовать самолёт с аркадным управлением, буду рад всем советам, туториал 3д платформер ещё качаеться.
SashaRX
UNец
 
Сообщения: 46
Зарегистрирован: 05 июн 2009, 16:47
Откуда: Краснодар( Апшеронск )
  • Сайт
  • ICQ

Re: Самолёт

Сообщение Neodrop 10 июн 2009, 15:32

Тут разумнее изучить 2D GamePlay Tutorial. Есть и такой. Там пример трёхмерной игры, реализованой в стиле "платформер" - то есть в двух плоскостях. Практически тот же самолётик.

Изображение
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Самолёт

Сообщение SashaRX 10 июн 2009, 16:31

"Neodrop"
Спасибо буду изучать.
SashaRX
UNец
 
Сообщения: 46
Зарегистрирован: 05 июн 2009, 16:47
Откуда: Краснодар( Апшеронск )
  • Сайт
  • ICQ

Re: Самолёт

Сообщение SashaRX 11 июн 2009, 10:38

Посмотрел демку, поискал информациюю Как понял нужно найти несколько сил, которые воздействуют на самолёт
1) Сила тяжести.
2) Подъёмная сила.
3)Тяга двигателя.
4)Сопротивление воздуха.
А потом применить эти силы на самолёт, пока ищу формулу подъёмной силы.

P.S. Есть ли возможность в унити визуалезировать вектора?
SashaRX
UNец
 
Сообщения: 46
Зарегистрирован: 05 июн 2009, 16:47
Откуда: Краснодар( Апшеронск )
  • Сайт
  • ICQ

Re: Самолёт

Сообщение Neodrop 11 июн 2009, 11:29

Debug.DrawLine()

или средствами класса GL
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Самолёт

Сообщение SashaRX 11 июн 2009, 20:35

Neodrop писал(а):Debug.DrawLine()

или средствами класса GL


Спасибо! (3A4OT)

Нашёл я кое какие формулы, решил немного поэкспериментировать, что-то получается пока не так как хотелось бы.
Вот простой код из моего теста:
Код: Выделить всё
/* Класс описывающий упровление самолётом. */
using UnityEngine;
using System.Collections;

[RequireComponent (typeof (Rigidbody))]

public class FlyControls : MonoBehaviour
{
   //PUBLIC
   public float speed   = 7.0F;
   public float gravity  = 9.8F;
   public float mass    = 1000.0F;
   
   //PRIVATE
   private float thrust      = 0.0F; //Тяга двигателя
    private float lforce      = 0.0F; //Подёмная сила
   private float drag        = 0.0F; //Воздушное сопротивление
   private float clift         = 0.0F; //Коэффициент подъемной силы
   private float airdensity = 1.0F; //Плотность воздуха
   private float wingarea  = 1.0F; //Площадь крыла
   private float rul          =  0.0F;
   private float rul2         =  0.0F;
   
   void Start()
    {
        rigidbody.mass = mass;
    }

   void FixedUpdate ()
   {
      rul = Input.GetAxisRaw ("Horizontal");
      rul2 = Input.GetAxisRaw ("Vertical");
      if (Input.GetButton ( "Jump" ))
      {
         thrust = 3.5F;
      }
      else
      {
         thrust = 0.0F;
      }
      //lforce = clift * ((airdensity * (rigidbody.velocity.z * rigidbody.velocity.z)) * 0.5F ) * wingarea;
      lforce = thrust * (rigidbody.velocity.magnitude * 0.225F);  //Это тестовая формула, для подъёмной силы, но она совершенна не правельная.
            
      rigidbody.AddRelativeTorque ( new Vector3 ( 0.0F, 1.0F, 0.0F ) * rul * Time.deltaTime, ForceMode.VelocityChange);
      rigidbody.AddRelativeTorque ( new Vector3 ( 1.0F, 0.0F, 0.0F ) * rul2 * Time.deltaTime, ForceMode.VelocityChange);
      rigidbody.AddRelativeForce( new Vector3( 0.0F, 0.0F, 1.0F ) * thrust * Time.deltaTime, ForceMode.VelocityChange);
      rigidbody.AddRelativeForce( new Vector3( 0.0F, 1.0F, 0.0F ) * lforce * Time.deltaTime, ForceMode.VelocityChange);
   }
   
   void Update()
   {
      //Draw Debug Line
      //XYZ
      Debug.DrawLine( new Vector3 ( 0.0F, 0.0F, 0.0F ), new Vector3 ( 3.0F, 0.0F, 0.0F ), Color.red);
      Debug.DrawLine( new Vector3 ( 0.0F, 0.0F, 0.0F ), new Vector3 ( 0.0F, 3.0F, 0.0F ), Color.green);
      Debug.DrawLine( new Vector3 ( 0.0F, 0.0F, 0.0F ), new Vector3 ( 0.0F, 0.0F, 3.0F ), Color.blue);
      
      //Позицыя самолёта
      Debug.DrawLine( transform.position, transform.position + new Vector3 ( 6.0F, 0.0F, 0.0F ), Color.red);
      Debug.DrawLine( transform.position, transform.position + new Vector3 ( 0.0F, 6.0F, 0.0F ), Color.green);
      Debug.DrawLine( transform.position, transform.position + new Vector3 ( 0.0F, 0.0F, 6.0F ), Color.blue);
      
      //Скорость
      Debug.DrawLine( transform.position, transform.position - rigidbody.velocity, Color.cyan);
   }
   void OnGUI()
   {
      GUILayout.Label("    Position Fly: " + transform.position.ToString());
      GUILayout.Label("    Velocity Fly: " + rigidbody.velocity.ToString());
      GUILayout.Label("    Velocity Fly magnitude: " + rigidbody.velocity.magnitude.ToString());
      GUILayout.Label("    Lifting force: " + lforce.ToString());
      GUILayout.Label("    Thrust: " + thrust.ToString());
   }
}


И пара вопросов, что такое за параметр Drag у Rigidbody, и как узнать локальные вектора X Y Z у объекта, например нужно узнать угол атаки крылаhttp://dic.academic.ru/dic.nsf/ruwiki/20427, в обще по прежнему рад любым советам.
SashaRX
UNец
 
Сообщения: 46
Зарегистрирован: 05 июн 2009, 16:47
Откуда: Краснодар( Апшеронск )
  • Сайт
  • ICQ

Re: Самолёт

Сообщение ffinder 11 июн 2009, 21:56

например так можно узнать вектора (c Boo на C# переведешь)
Код: Выделить всё
up as Vector3 = self.transform.TransformDirection(Vector3.up)
right as Vector3 = self.transform.TransformDirection(Vector3.right)
forward as Vector3 = self.transform.TransformDirection(Vector3.forward)


угол атаки крыла ты задаешь сам. изначально он 0, когда тянешь штурвал на себя - увеличивай, от себя - уменьшай.
ffinder
UNITрон
 
Сообщения: 192
Зарегистрирован: 26 мар 2009, 17:35
  • Сайт

Re: Самолёт

Сообщение SashaRX 12 июн 2009, 10:10

ffinder писал(а):например так можно узнать вектора (c Boo на C# переведешь)
Код: Выделить всё
up as Vector3 = self.transform.TransformDirection(Vector3.up)
right as Vector3 = self.transform.TransformDirection(Vector3.right)
forward as Vector3 = self.transform.TransformDirection(Vector3.forward)


угол атаки крыла ты задаешь сам. изначально он 0, когда тянешь штурвал на себя - увеличивай, от себя - уменьшай.


Спасибо!
Вот нашел формулу, где рассчитываться подъёмная сила.
Подъёмная сила = Коэффициент подъёмной силы * ( Плотность воздуха * Скорость^2 ) / 2 * Площадь крыла;

Коэффициент подъёмной силы = 2 * m * (a - a0), где:
a - угол атаки (угол между направлением скорости набегающего потока и хордой крыла);
a0 - угол нулевой подъемной силы;
m - коэффициент, зависящий от формы профиля крыла, например для тонкой слабо изогнутой пластины m=p.
В случае крыла конечного размаха L коэффициент m = p / (1-2 / l), где l = L / b - удлинение крыла.

это взято от суда http://www.effects.ru/science/91/index.htm

Многое мне пока не ясно, как понимаю Плотность воздуха зависит от высоты, в общем если с первой формулой ещё что-то понятно, то вторая для меня пока неясна, не знаю как рассчитать a и a0, не говоря уже о m, по прежнему рад советам.
SashaRX
UNец
 
Сообщения: 46
Зарегистрирован: 05 июн 2009, 16:47
Откуда: Краснодар( Апшеронск )
  • Сайт
  • ICQ

Re: Самолёт

Сообщение SashaRX 12 июн 2009, 20:05

Вот то что счас получается, формула совсем не правильная(
http://kubdev.3dn.ru/Unity3d/test.html
SashaRX
UNец
 
Сообщения: 46
Зарегистрирован: 05 июн 2009, 16:47
Откуда: Краснодар( Апшеронск )
  • Сайт
  • ICQ

Re: Самолёт

Сообщение ffinder 12 июн 2009, 20:33

неплохо, он летает! \m/
только теней таких быть не может. небо вокруг тоже свет дает.
ffinder
UNITрон
 
Сообщения: 192
Зарегистрирован: 26 мар 2009, 17:35
  • Сайт

Re: Самолёт

Сообщение Neodrop 12 июн 2009, 20:57

А чего окошко такое маленькое? :-?
Добавить neodrop в Skype
Изображение
"Спасибо!" нашему порталу, вы сможете сказать ЗДЕСЬ.
Если проблема не решается честно, нужно её обмануть! || Per stupiditas at Astra!
Страх порождает слабость. Бесстрашных поражают пули.
Протратившись на блядях байтах, на битах не экономят.
Аватара пользователя
Neodrop
Админ
 
Сообщения: 8480
Зарегистрирован: 08 окт 2008, 15:42
Откуда: Питер
Skype: neodrop
  • Сайт

Re: Самолёт

Сообщение SashaRX 13 июн 2009, 10:40

ffinder писал(а):неплохо, он летает! \m/
только теней таких быть не может. небо вокруг тоже свет дает.

Это всё просто тест, не заворачивался насчёт графики.
Neodrop писал(а):А чего окошко такое маленькое? :-?

Не знаю :( .

В общем охота всё таки нормальную формулу применить, есть ещё вопросы.
1) В формуле выше необходимо указать скорость в м\с как их узнать?, как понимаю нужно взять определённое количество игровых юнитов и от этого отталкиваться?, типо 10 юнитов = 1 метр, и если скорость 10м\с то получаеться 100юнитов\с.

2) Как рассчитать угол атаки, вот я сделал в максе небольшую зарисовочку:
Изображение
"Угол атаки", это угол между хордой крыла и потоком встречного воздуха, как изображено выше, как рассчитать этот угол? Есть ещё в формуле значение "а0", это значение буду брать экспериментальным путём, например 20 - 30 градусов, тоесть если угол атаки будет больше то самолёт начнёт быстро терять высоту, но если он находиться высоко, то вскоре сможет сного набрать высоту, а если нет то упадёт. И ещё в формуле есть "m", это коэффициент, зависящий от формы профиля крыла, тоже придётся рассчитывать в ручную.
SashaRX
UNец
 
Сообщения: 46
Зарегистрирован: 05 июн 2009, 16:47
Откуда: Краснодар( Апшеронск )
  • Сайт
  • ICQ

Re: Самолёт

Сообщение wild_r 13 июн 2009, 13:22

Насчет угла атаки - у вас же есть углы модели относительно центра мира, нужно узнать угол потока и вычесть.
wild_r
UNITрон
 
Сообщения: 220
Зарегистрирован: 16 апр 2009, 20:46
Откуда: Россия, Санкт - Петербург
  • ICQ

Re: Самолёт

Сообщение SashaRX 13 июн 2009, 15:45

wild_r писал(а):Насчет угла атаки - у вас же есть углы модели относительно центра мира, нужно узнать угол потока и вычесть.


Ага, так и сделал, пока что вот как вышло http://kubdev.3dn.ru/Unity3d/test.html
SashaRX
UNец
 
Сообщения: 46
Зарегистрирован: 05 июн 2009, 16:47
Откуда: Краснодар( Апшеронск )
  • Сайт
  • ICQ

Re: Самолёт

Сообщение wild_r 13 июн 2009, 17:13

Как им вообще управлять? Как поднимать и опускать? Вообще то, что сейчас есть - вполне реально. Загонишь самолет в пике, он и свалиться.
wild_r
UNITрон
 
Сообщения: 220
Зарегистрирован: 16 апр 2009, 20:46
Откуда: Россия, Санкт - Петербург
  • ICQ

След.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8