Понедельник, 23 Декабря 2024, 09:17

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Ориентированное перемещение объекта в точку
PalovДата: Четверг, 16 Января 2014, 23:07 | Сообщение # 1
уже был
Сейчас нет на сайте
Задача состоит в следующем: реализовать перемещение космического корабля из исходной точки в заданную на плоскости.
Космический корабль, в моём понимании, должен перемещаться в пространстве ориентируясь носом в сторону точки, в которую он хочет прибыть. Пользуясь своими скудными знаниями аналитической геометрии, я написал следующий код:
Код


public class CubeMovement : MonoBehaviour {
  public float Bx = 10,Bz = 10, speed = 10;
  public double delta = 0.2;
  float x;
  float z;
  Vector3 PosB;
  float dirlength;
  float flength;
  static float angle = 0;
  RaycastHit hit;

  // Use this for initialization
  void Start () {

  }
   
  // Update is called once per frame
  void Update () {

    x = transform.position.x;
    z = transform.position.z;
    PosB = new Vector3 (Bx - x, 0, Bz - z);
    dirlength = Mathf.Sqrt (1);
    flength = Mathf.Sqrt (PosB.x * PosB.x + PosB.z * PosB.z);
                       
   if (x <= Bx-0.01F || z <= Bz-0.01F || x >= Bx+0.01F || z >= Bz+0.01F) {
   if ((Mathf.Sin ((angle)) * PosB.x + Mathf.Cos ((angle)) * PosB.z) / flength < (1 - delta)) {
        
       bool F = (Mathf.Abs ((Mathf.Sin (angle + speed * Time.deltaTime) * PosB.x - Mathf.Cos (angle + speed * Time.deltaTime) * PosB.z) / flength) - Mathf.Abs ((Mathf.Sin (angle) * PosB.x + Mathf.Cos (angle) * PosB.z) / flength) < 0);
    bool C = Mathf.Abs (Mathf.Abs ((Mathf.Sin (angle + speed * Time.deltaTime) * PosB.x - Mathf.Cos (angle + speed * Time.deltaTime) * PosB.z) / flength) - Mathf.Abs ((Mathf.Sin (angle) * PosB.x + Mathf.Cos (angle) * PosB.z) / flength)) < 0.0001F;
        
       if (F) {
         print ("2");
     transform.Rotate (Vector3.up, speed * Time.deltaTime*5);
         angle += speed * Time.deltaTime;
          
       }
      else  
    if(!C)
    {
       print ("3");
       transform.Rotate (Vector3.up, -speed * Time.deltaTime*5);
       angle -= speed * Time.deltaTime;
        
     }
    }
   else

      transform.Translate (Vector3.forward * Time.deltaTime);
     }
    
  }
}

Корабль дёргается, пытаясь попасть в заданный угол, что довольно проблематично, судя по всему.
Покорно прошу наставить меня на пусть истинный.
ЛевшаДата: Четверг, 16 Января 2014, 23:17 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
Код
transform.forward = Vector3.Lerp(transform.forward, target.position - transform.position, Time.deltaTime * rotSpeed);
transform.Translate (transform.forward * Time.deltaTime * moveSpeed);


X.cor.R (Prologue)
PalovДата: Пятница, 17 Января 2014, 09:05 | Сообщение # 3
уже был
Сейчас нет на сайте
Спасибо большое! Помогло.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг