Управление через Force

Физика в Unity

Управление через Force

Сообщение Shaper 09 июн 2010, 00:02

Искал долго на форуме про управление через силу, кое-что нашел. Сделал код на шарпе, но возникла проблема. Когда к обьекту применяються сила, он двигается в определенном направлении, но когда обьект делает поворот, он дальше двигается туда же, а должен двигатся относительно локальных координат.
И еще немогу понять как можно уменьшить силу поворрта, как не уменьшал силу, толку никакого.
Да чуть не забыл, хотел сделать по векторам, но юнити матерится, говорит чтото с синтаксисом, я искал везде, но та и не нашел какую переменную присваивать векторам когда вносить Rigidbody.MovePosition :(
Код: Выделить всё
[syntax=]
using UnityEngine;
using System.Collections;

public class Fly : MonoBehaviour
{
   public float speed=0;
   public float rotate=0;

void FixedUpdate ()
   {
      
      if (Input.GetKey(KeyCode.A))
      {
         if (speed<=99)
         {
         speed +=1;
         }
         rigidbody.AddRelativeForce(0,-speed,0);
         }
      if (Input.GetKey(KeyCode.Z))
      {
         if (speed>=1)
         {
            speed -=1;
         }
         rigidbody.AddRelativeForce(0,-speed,0);
         }
         
      if (Input.GetKeyDown(KeyCode.UpArrow))
      {
         if (rotate>=1)
         {
            rotate -=0.1f;
            }
         rigidbody.AddRelativeTorque(-rotate,0,0);
         }
         
      if (Input.GetKeyDown(KeyCode.DownArrow))
      {
         if (rotate<=-1)
         {
            rotate +=0.1f;
            }
      rigidbody.AddRelativeTorque(rotate,0,0);
         }
         
      if (Input.GetKey(KeyCode.LeftArrow))
      {
         if (rotate>=1)
         {
            rotate -=0.1f;
            }
         rigidbody.AddRelativeTorque (0, -rotate, 0);
         }
      if (Input.GetKey(KeyCode.RightArrow))
      {
         if (rotate>=-1)
         {
            rotate +=0.1f;
            }
         rigidbody.AddRelativeTorque (0, rotate, 0);
         }
   }
   
void OnGUI()
   {
      GUI.Label (new Rect (150,10,200,20), "Power drive : "+speed.ToString());
   }
}
[/syntax]
Shaper
UNец
 
Сообщения: 4
Зарегистрирован: 08 июн 2010, 23:47

Re: Управление через Force

Сообщение Serge 09 июн 2010, 03:30

Для начала отделите обработку клавиатуры от физики и поместите в блок Update(). Команды физики должны быть в FixedUpdate (), все остальные в Update(). :)
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Управление через Force

Сообщение Shaper 09 июн 2010, 06:42

Спасибо большое!
Решилась проблема с локальными координатами + Drag нормально заработал :)
Shaper
UNец
 
Сообщения: 4
Зарегистрирован: 08 июн 2010, 23:47


Вернуться в PhysX

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

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