目的を達成3dはUnityは、カメラビューの動きに追従します

https://blog.csdn.net/qq_31411825/article/details/61623857

 

Unityは、オブジェクトがカメラビューの動きは以下の達成3dは
miccallによって作成された(ソースmiccall.techをご記入ください)
ロボットのナビゲーションのための1. VR
-
次の役割を追跡するために、ロボットのプロジェクト要件は、いつものように、精神のように、飛行しています主人公の側は、移動、適切な場所に移動する、振り向きます。彼は、今日達成するために、このサンプルには、メインキャラクターのために作る必要がありました。
-

約2で考察
- 1オブジェクトが所定の位置(ターゲット)に移動する
-オブジェクトは、カメラ2対向するように回転させて
表示することが現れるのカメラフィールドのうち3. -
カメラ4にカスタムスクリーンオブジェクト位置-

3 。実装と方法
-
移動、アニメーションの準備ができていないので、その後、アニメーションで達成することができ、ロボットはサンプルがそうであるように、私はキューブを使用しています。
後の最初のキューブを持って、彼に移動するためのスクリプトを置きます。ここで私は彼に名前PlayerTankを与えました。
私たちの目的は、我々は彼に指定されたfollowTransformを与えなければならないので、彼は、ターゲットに移動させることです。同様に彼のスピードと回転数など。
彼は、オブジェクトを追跡するために回転させ、その後、オブジェクトを与えるために直線的に移動するために彼の動きは予想外ではなかったようにするためには、私の考えです。だから、すぐにアルゴリズム書かれました。
-

ボイドLookTransform(Mtransformを変換)
{
するVector3 tarPos = Mtransform.position;
のVector3 dirRot = tarPos - transform.position;
クォータニオンtarRot = Quaternion.LookRotation(dirRot);
transform.rotation = Quaternion.Slerp(transform.rotation、tarRot、rotSpeed * Time.deltaTime);
}

-
簡単に説明し、第一の物体の位置を決定し、その後、彼の方向にポイントを見つけることで、補間方法によって、オブジェクトが指定されたオブジェクトを向くように回転されるように。
まあ、への動きの方向と同様に、この方向、非常にシンプルに来ます。
-

transform.Translate(新新のVector3(0、0、movementSpeed * Time.deltaTime));
1
-
それは移動を停止したときに、私は裁判官の位置との差を使用することを決定し、一瞬思ったが
ある
-

Vector3.Distance(transform.position 、followTransform.position);
1
-
方法も停止されているのでよく、解決すべき最後の問題は、カメラに向かっています。
突然、私はこの問題は、右、これは問題ではありません、ハハ、ちょうど事を解決するために、ビデオカメラをアルゴリズムを書いたものである、と思いました。
そして、特定の論理判断を与えます。
-

後に到達すべき目標停止位置まで@指定するオブジェクトの近く
IF(Vector3.Distance(transform.position、followTransform.position)<3F)
{
オブジェクトがカメラ対向通過位置できるようにするオブジェクトである//
LookTransform(Camre)を、
返す;
}

{
//操舵方向オブジェクトが移動するように
LookTransform(followTransform);
transform.Translate(新しい新規のVector3(0、0、* movementSpeed Time.deltaTime));
}

-
これは次のステップに対象物の動きを解決することになる固視標であります位置は、ので、彼はカメラの位置を固定しました。
カメラの上にぶら下がって、新しいスクリプトファイルCameraViewを作成します。デバッグを容易にするために、私はFPSスクリプトがちょうど(コードの大プッシュBaiduの)のようなCSプレイの内側に、マウスを追跡するために一人称視点の回転で過ごしました。
第2のアルゴリズムは、彼がカメラの視野を描くことができ所定の距離によって書かれた大規模な外国牛を試運転されます
-


-
ここでは、二つの側面を描いた、カメラからの距離が、黄色8.5メートルである赤色にカメラから12メートルを表します。
スペースの問題や細部の質問である必要があり、あまりここでは、このアルゴリズムを説明するために、見に行くことができます興味を持っている、ここではライン上でそれを参照してください。
-

のVector3 [] GetCorners(フロート距離)
{
するVector3 [] =新しい新規のVector3コーナー[4]。

フロートhalfFOV =(theCamera.fieldOfView * 0.5F)* Mathf.Deg2Rad。
フロート態様= theCamera.aspect。

フロートの高さ=距離* Mathf.Tan(halfFOV)。
フロート幅=高さ*アスペクト。

//左上
隅[0] = tx.position - (tx.right *幅)。
コーナー[0] + = tx.up *高さ。
コーナー[0] + = tx.forward *距離。

// UpperRight
コーナー[1] = tx.position +(tx.right *幅)。
コーナー[1] + = tx.up *高さ。
コーナー[1] + = tx.forward *距離。

//左下
隅[2] = tx.position - (tx.right *幅)。
コーナー[2] - = tx.up *高さ。
コーナー[2] + = tx.forward *距離。

// LowerRight
コーナー[3] = tx.position +(tx.right *幅)。
コーナー[3] - = tx.up *高さ。
コーナー[3] + = tx.forward *距離。

コーナーを返します。
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
空隙FindUpperCorners()
{
のVector3 []コーナー= GetCorners(upperDistance)。
//デバッグ用
Debug.DrawLine(コーナー[0]、コーナー[1]、Color.yellow)を、//左上- > UpperRight
Debug.DrawLine(コーナー[1]、コーナー[3]、Color.yellow)。// UpperRight - > LowerRight
Debug.DrawLine(コーナー、コーナー[2]、Color.YELLOW [3]); // lowerRight - >左下
Debug.DrawLine(コーナー[2]、コーナー[0]、Color.YELLOW); //左下- >左上
}
。1
2
3。
4。
5。
6。
7。
8。
9。
-
デバッグ時に直接コールFindUpperCorners()。
初めに、私は場所を考えると、デバッガを使用して、彼は計算されたオフセット、長い時間ではなく、良い結果のためのデバッグ、私は一般の人々に、思考を変更することを決めた、私はこのデバッグを置きます方法はしようとする必要がある、出ました。
APIを介して第2のIルック、私は、変換後にゴースト方法スクリーン座標とワールド座標どのように見えるかを覚えているので。私は予想していた何、この方法は、それを使用して実際にはかなり簡単です。
公式にメソッドをデバッグしようとしました、彼はポイントを引き出しました。
-
1
2
3を。
4。
5。
6。
ボイドOnDrawGizmosSelected()
{
のVector3 theCamera.ScreenToWorldPoint P =(新しい新規のVector3(100、200),. 8)。
= Color.BLUE Gizmos.color;
//target.position = P;
Gizmos.DrawSphere(P、1F);
}
1
2
3。
4。
5。
6。
7。
-
まあ、最終的にも場所がマークされている使用することを決断しました。
その後、私は自分の目標を達成するための非常に単純な方法を書きました。
-
1
2
。3
。4
ボイドmaketarget()
{
のVector3 theCamera.ScreenToWorldPoint P =(新しい新規のVector3(RH、RV、upperDistance));
target.position = P;
}
。1
2
。3
。4
。5
-
完成Iショックを受け、それはとてもシンプルである可能性があります。水平オフセット、RVはオフセット垂直であるか、または単に説明、RHは、upperDistanceはカメラ平面の位置からです。
次のステップは、効果を確認するために実行することです。
-
1
2
。3
。4
4.途中、小さなバグを表示されます
-
不可解な円形の動き、そして私は彼がちょうど関係の円運動を満たすために、特定の場所に移動しなければならないときの基本的な法律をまとめた後、線速度、角速度および半径との間の関係を分析し、それから値調整movementSpeedとrotSpeedは、可能な彼には、製品との距離の関係なので、登場最小限の可能性を排除することができます。
感情-実際には、団結と現実的な物理学、理論物理学はまだ非常に異なっています。
-
----------------
免責事項:この記事は元の記事CSDNブロガー「miccall」で、CC 4.0 BY-SAの著作権契約書に従って、再現し、元のソースと、このリンクを添付してください声明。
オリジナルリンクします。https://blog.csdn.net/qq_31411825/article/details/61623857

おすすめ

転載: www.cnblogs.com/alps/p/11981988.html