Синтаксис:
Используется csharp
void Update () {
road.localScale = new Vector3( Vector3.Distance (fromk.position, tok.position), 0.3f,0.3f);
road.position = Vector3.Lerp (fromk.position, tok.position, 0.5f);
//В этих двух переменных хранится угол, на который нужно поворачивать планку
float quaz;
float quay;
//Проецируем целевые объекты на плосскость
Vector2 t = new Vector2(tok.position.x, tok.position.y);
Vector2 f = new Vector2 (fromk.position.x, fromk.position.y);
//Так как Angle не возвращает углы больше 180, иногда приходится вращать планку в другом направлении
//Честно не знаю, почему в зависимости от положения по координате x нужно менять знаки, но по другому не работает
if (fromk.position.x < tok.position.x) {
if (fromk.position.y > tok.position.y) {
quaz = Vector2.Angle (Vector2.right, t - f) * -1;
} else {
quaz = Vector2.Angle (Vector2.right, t - f);
}
} else {
if (fromk.position.y > tok.position.y) {
quaz = Vector2.Angle (Vector2.right, t - f);
} else {
quaz = Vector2.Angle (Vector2.right, t - f) * -1;
}
}
t = new Vector2 (tok.position.x, tok.position.z);
f = new Vector2 (fromk.position.x, fromk.position.z);
if (fromk.position.z > tok.position.z) {
quay = Vector2.Angle (Vector2.right, t - f);
} else {
quay = Vector2.Angle (Vector2.right, t - f)*-1;
}
road.rotation = Quaternion.Euler(new Vector3(0,quay,quaz));
}
road.localScale = new Vector3( Vector3.Distance (fromk.position, tok.position), 0.3f,0.3f);
road.position = Vector3.Lerp (fromk.position, tok.position, 0.5f);
//В этих двух переменных хранится угол, на который нужно поворачивать планку
float quaz;
float quay;
//Проецируем целевые объекты на плосскость
Vector2 t = new Vector2(tok.position.x, tok.position.y);
Vector2 f = new Vector2 (fromk.position.x, fromk.position.y);
//Так как Angle не возвращает углы больше 180, иногда приходится вращать планку в другом направлении
//Честно не знаю, почему в зависимости от положения по координате x нужно менять знаки, но по другому не работает
if (fromk.position.x < tok.position.x) {
if (fromk.position.y > tok.position.y) {
quaz = Vector2.Angle (Vector2.right, t - f) * -1;
} else {
quaz = Vector2.Angle (Vector2.right, t - f);
}
} else {
if (fromk.position.y > tok.position.y) {
quaz = Vector2.Angle (Vector2.right, t - f);
} else {
quaz = Vector2.Angle (Vector2.right, t - f) * -1;
}
}
t = new Vector2 (tok.position.x, tok.position.z);
f = new Vector2 (fromk.position.x, fromk.position.z);
if (fromk.position.z > tok.position.z) {
quay = Vector2.Angle (Vector2.right, t - f);
} else {
quay = Vector2.Angle (Vector2.right, t - f)*-1;
}
road.rotation = Quaternion.Euler(new Vector3(0,quay,quaz));
}
Пока планку нужно вращать только по оси z или только по оси y (соответственно fromk.position.z == tok.position.z или fromk.position.у == tok.position.у), всё работает просто прекрасно. Но если объекты смещены по обоим осям, происходит что-то непонятное, и планка повёрнута совершенно не так как надо. В чём дело?
Вот как это должно работать:
Что в итоге получается: