Unityでプレイヤーの位置からカメラに向かってRayを飛ばし、指定距離(今回は3m)に障害物があったら、プレイヤーからその物体までの距離までカメラを近づける(要するに壁でプレイヤーが見えなくなることを避ける)プログラムを作っています。
しかし、Rayを飛ばしたところ、壁に当たっていることは認識してくれるのですが、周期的に当たっていない判定になってしまいます。
これはUnity側のバグなのでしょうか?自分のプログラムのミスでしょうか?また対策があるのならよろしくお願いします。
プログラム
変数
Transform WalkerTrans プレイヤーの位置
Vector3 vtCameraDistance
Rayが何も触れていないときのカメラの位置(プレイヤーを(0,0,0)としたときののローカル座標)
float laerpWeight 補完する速さ
C#
1// カメラとキャラクターの間に障害物があったらカメラを近づける 2 { 3 // 当たった物体の情報 4 RaycastHit hit; 5 6 Ray ray = new Ray(WalkerTrans.position, -transform.forward); // 新規Rayを作成 7 if(Physics.Raycast(ray, out hit, vtCameraDistance.z, layerMask)){ 8 // Rayに当たったら距離をキャラクターから障害物の距離にする 9 vtCameraDistance.z = Vector3.Lerp(new Vector3(0.0f, 0.0f, vtCameraDistance.z), new Vector3(0.0f, 0.0f, hit.distance - 0.5f), lerpWeight).z; 10 Debug.Log("Run here"); 11 }else{ 12 // カメラの距離をパラメータの初期値に戻す 13 vtCameraDistance = Vector3.Lerp(vtCameraDistance, vtCameraDistanceParam, lerpWeight); 14 Debug.Log("Dunt run here" ); 15 } 16 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/07 12:56