Получение направления от вращения вокруг Z - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть самолет.Он повернут на 180 градусов по оси Y, его положение составляет 0,0,0, он обращен к оси X.Это означает, что я поворачиваю его вокруг Z (углов Эйлера), чтобы изменить направление движения.У меня есть облака, у облаков есть сценарий движения.Я хочу, чтобы облака двигались в направлении, противоположном направлению, к которому направлена ​​плоскость по оси Y и X.

Например, когда вращение самолета.eulerAngles.Z = 0. Облака должны двигаться на полной скорости в направлении к минус Х. А при вращении.eulerAngles.Z = 90 облака должны двигаться на полной скорости в направлении минус Y.При вращении .eulerAngles.Z = 45 облака должны двигаться с половинной скоростью в направлении минус Х и на половинной скорости в направлении минус Y и т. Д.

Вот две иллюстрации, которые упрощают визуализацию:

иллюстрация 1 иллюстрация 2

Вот еще раз фотография сцены, чтобы вам было легче ее визуализировать:

сцена

Идея состоит в том, чтобы создать иллюзию того, что самолет движется, на самом деле перемещение плоскости в этой сцене создаст много проблем, с которыми я действительно не хочу иметь дело.

Текущий сценарий движения облаков:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MoveCloud : MonoBehaviour
{

    public float speed;
    void Update()
    {
        var plane = GameObject.Find("plane");
        var dir =(plane.transform.position - plane.transform.forward)*speed*Time.deltaTime ;
        transform.position = new Vector3(transform.position.x + dir.x , transform.position.y + dir.y , transform.position.z);
        if (transform.position.x < -140)Destroy(gameObject);
    }
}

Итак, как бы вы подошли к этой проблеме?

С единством.

Редактировать: Я думаю, что триго может быть полезным здесьиспользуя линейную функцию вот мойновый код:

   public float speed;
    void Update()
    {

        var plane = GameObject.Find("plane");//Get the airplane
        var slope = Mathf.Tan(360 - plane.transform.rotation.eulerAngles.z);//Degrees to a slope (how much y it does in one x)
        var y = 1*slope;//kinda the very definition of the slope...
        var x = 1/slope;//math
        transform.position += new Vector3(x,y,0)*Time.deltaTime*speed;//the 1 , 1 point of our linear function(our direction) * delta * speed

        if (transform.position.x < -140)Destroy(gameObject);
    }

В настоящее время облака просто трясутся по всей сцене.иногда они, наконец, идут в правильном направлении, но это не праздно.Хотел бы получить второе мнение по моей математике.

Как я решил проблему: я только что сделал

 transform.position += GameObject.Find("plane").transform.right * Time.deltaTime * speed;

Спасибо PrinceOfRavens за помощь в выяснении этого

1 Ответ

0 голосов
/ 09 декабря 2018

Синяя ось (z) самолета направлена ​​вперед?с кодом вы реализовали?в каком направлении движутся облака?

вперед в единице - красная ось (z).Ваш код должен работать, если плоскость ориентирована правильно.найдите ось, идущую от носа, и отметьте цвет.если его: синий вы хотите -transform.right, зеленый вы хотите -transform.up

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...