2013-09-26 4 views
0

Im в настоящее время способен перемещать два объекта (два полюса забора) вокруг и растягивать объект между действиями как провод в заборе. За дополнительной информацией обращайтесь: instantiate plane with texture between two objects(vectors)Мгновенный объект (ы) между двумя другими объектами

Я хотел бы получить информацию о том, как я могу создавать экземпляры полюсов между ними, а также иметь провод, который уже работает. Например, каждый раз, когда расстояние между двумя объектами возрастает, например. 1. Я вычислил расстояние следующим образом: Vector3.Distance (currentPole1.position, currentPole2.position));

И угадайте, что цикл for может делать чек, но не может показаться, что он фигурирует. Thnx, Кро

ответ

0

Учитывая две Vector3 координаты, p1 и p2, мы могли бы вычислить X точек, равномерно распределенных между ними:

Vector3 p1 = <some vector> 
Vector3 p2 = <some vector> 
int numPoints = 9; 

float step = 1f/(numPoints+1); 
for (float perc = step; perc < 1f; perc += step) { 
    Vector3 v = Vector3.Lerp(p1, p2, perc); 
    //do something at position v 
} 

Или мы могли бы вычислить несколько точек, каждая из расположенных в большинстве блоков X друг от друга:

Vector3 p1 = <some vector> 
Vector3 p2 = <some vector> 
float maxSpacing = 10f; 

Vector3 diff = p2 - p1; 
Vector3 dir = diff.normalized; 
float totalDistance = diff.magnitude; 
for (float dist = maxDistance; dist < totalDistance; dist += maxSpacing) { 
    Vector3 v = p1 + dir * dist; 
    //do something at position v 
} 

(Просто заметил, что мой пример кода в C#, где ваш предыдущий вопрос с помощью JS,? предположительно, вы можете работать на разницу)

+0

Hey Rutter, Thnx для вашего ответа. Я попытался переписать первый блок и использовать два полюса как p1 & p2 var p1: Vector3 = currentPole1.TransformDirection (Vector3.right); \t var p2: Vector3 = currentPole2.TransformDirection (Vector3.left); \t var numPoints: int = 9; \t var step: float = 1f/(numPoints + 1); \t for (var perc: float = step; perc <1f; perc + = step) { \t var v: Vector3 = Vector3.Lerp (p1, p2, perc); \t \t // делать что-то в положении v \t Instantiate (fencePoleSkew, v, Quaternion.identity); это создает объект, но не между двумя полюсами. – krodil

+0

Я также переписал второй блок \t var p1: Vector3 = currentPole1.position.x (Vector3.up); \t var p2: Vector3 = currentPole2.position.x (Vector3.up); \t var maxSpacing: float = 10f; \t var maxDistance: float; \t var diff: Vector3 = p2 - p1; \t var dir: Vector3 = diff.normalized; \t var totalDistance: float = diff.magnitude; \t var dist: float = maxDistance; \t для (dist ", false) });