У меня есть самолет.Он повернут на 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 за помощь в выяснении этого