2017-07-04 7 views
1

私はシンプルなウェイポイントシステムを持っています。ウェイポイント値を保持するバケットとして機能する配列の変換を使用します。Unity3Dウェイポイントでの位置と回転の一致

私はこのウェイポイントシステムを使用して、あるポイントに向かって移動することでシーン全体にカメラを移動します。シーンは大きくないので、すべてがお互いに近いです。

カメラはボタンをクリック/押してある位置から別の位置に移動します。これは正常に動作します。 enter image description here

void Start() 
{ 
    //Sets the Camera to the first point 
    Camera = GameObject.Find("Main Camera"); 
    Camera.transform.position = patrolPoints[0].position 
    currentPoint = 0; 
} 

//Fixed Update seems to work better for LookAt 
void FixedUpdate() 
{ 
    //Looks at initial Target 
    Camera.transform.LookAt(TargetPoints[0]); 

    if (click == true) 
    { 
     Camera.transform.position = Vector3.MoveTowards(Camera.transform.position, patrolPoints[currentPoint].position, moveSpeed * Time.deltaTime); 
     //Camera.transform.rotation = Quaternion.Slerp(Camera.transform.rotation, patrolPoints[currentPoint].transform.rotation, Time.deltaTime); 
     Camera.transform.LookAt(TargetPoints[currentPoint]); 
    } 



} 

public void onNextClick() 
{ 
    if (currentPoint >= patrolPoints.Length) 
    { 
     currentPoint = 0; 
    } 
    if (Camera.transform.position == patrolPoints[currentPoint].position) 
    { 
     currentPoint++; 
     click = true; 
    } 

} 

私はまだについて話していないことを、変換の一の態様に困難を抱えています。それが回転です。

私はlookAtを使用して、最初のルックのターゲットを設定しました。これは動作します。しかし、それが配列のlook内の次のターゲットに実行されるとき、変更は突然です。

私もショットでSlerpを試しました。これは、ウェイポイントが適切なローテーション値に設定されているときに機能し、値は1つの位置から次の位置にスローされます。しかし、タイミングはあまり整理されていません。いくつかのポジションの移行が速く進みます。つまり、ローテーションが追いつこうとしている/他の人が遅れていることを意味します。

私は、現在のウェイポイントと次のウェイポイントの距離を取得し、カメラの現在の位置に対する更新の全体的なパーセンテージとして扱うことを試みました。ポジションの更新を前提としています。

しかし、私は多少それを失っています。多くの例はiTweenを見ることを示唆しています - そして、私はこれがうまくいくとは思わないでしょう - しかし、私は数学に少し入りたいです。

誰でも正しい方向に私を置くことができますか?

答えて

1

「位置のためのLerp」と「回転のためのSlerp」のように見えます。 MoveTowardsは回転中にSlerpでボールをプレイしていなかったので、タイミングが合っていないと思います。

if (click == true) 
    { 
     Camera.transform.position = Vector3.MoveTowards(Camera.transform.position, patrolPoints[currentPoint].position, moveSpeed * Time.deltaTime); 
     Camera.transform.rotation = Quaternion.Lerp(Camera.transform.rotation, patrolPoints[currentPoint].rotation, moveSpeed * Time.deltaTime); 

私は、lerp値がそのようなパーセンテージのように機能すると考えられています。そのため、同じ入力値が有効です。

最後に、現在の位置とクリックの更新間隔の範囲を使用しました。これはボタンクリックのスピードアップに役立ちました。

if (Vector3.Distance(Camera.transform.position, patrolPoints[currentPoint].position) < PositionThreshold) 
    { 
     currentPoint++; 
     click = true; 
    } 

ありがとうございます。

関連する問題