前提・実現したいこと
車を生成して(10個ほど数秒空けて同じ座標に生成されます)、その車がもともとあるゆっくり動く前の車に近づくと低速になって止まり、離れると動き出すようにしたい(車の渋滞のようなイメージ)のですが、最初はうまくいきますが、少し経つと加速しなくなり、ゆっくり進むだけになってしまいます。
途中のcar3は生成された車の4つ目の車を少しゆっくりにしてそれ以降の車も正しく動いているかを確認するためのものです。
該当のソースコード
C#
1float Dist = 5.0f; 2 Ray ray; 3 RaycastHit hit; 4 Rigidbody rb; 5 Vector3 force1,force2,force3;; 6 bool flg1; 7 8 private void Start() 9 { 10 rb = this.GetComponent<Rigidbody>(); //Rigidbodyを取得 11 force1 = new Vector3(5.0f, 0, 0); //力を設定 加速 12 force2 = new Vector3(-8.0f, 0, 0); //力を取得 減速 13 force3 = new Vector3(1.0f, 0, 0); //力を設定 低速 14 flg1 = false; 15 } 16 17 void FixedUpdate() 18 { 19 //Rayの作成 20 Ray ray = new Ray(this.transform.position, this.transform.forward); 21 //Rayが衝突したかどうか 22 if(Physics.Raycast(ray, out hit, Dist)) 23 { 24 flg1 = true; 25 Debug.Log("ray=" + this.tag); 26 } 27 28 if(rb.velocity.x <= 10.0f) 29 { 30 if(this.tag == "car3") 31 { 32 Debug.Log("car3"); 33 rb.AddForce(force3); //低速力を加える 34 } 35 else 36 { 37 Debug.Log("加速"); 38 rb.AddForce(force1); //加速力を加える 39 } 40 } 41 42 if(flg1 == true) 43 { 44 Debug.Log("減速"); 45 rb.AddForce(force2); //減速力を加える 46 if(rb.velocity.x >= 0.0f) 47 { 48 Debug.Log("false"); 49 flg1 = false; 50 } 51 } 52 }
どこまでうまくいきますか?
前に追いついたら減速して止まりますか?
> ゆっくり動く前の車
と一定距離を保つために,このゆっくり動く前の車と同じ速度を保つように動くことになるのでは?
(前の車に追いついたら減速する→前の車よりも速度が遅くなったら距離が開く→距離が閾値を超えたら即加速する→するとまた即減速が必要になる→またちょっと離れたから加速→…)
>ozwk さん
前に追いついたら減速して止まって加速してを2、3回繰り返します。2個目の生成された車が追い付いてきたら加速しなくなってゆっくり動いてしまいます。
最初の車しかうまくいかないので、後ろに車があったらだめなのかなと思ってますが、はっきりとは分かりません...。
>fana さん
前の車は独立して動いていて、徐々に加速していきます。生成された車が加速しなくなった後は前の車と生成された車の間がどんどん空いていっているので、同じ速度を保ってはないと思います。
あなたの回答
tips
プレビュー