実現したいこと
弾幕STGで、弾を発射・動かすスクリプトがおよそ完成したので、
次のステップとして、n-Way弾や全方位弾などの関数を作ろうとしています。
実現したいものは、基本的な直線加減速だけの関数です。
下記にn-Way弾の関数を示します。
c#
1 ///<summary> 2 ///nWay弾を発射します。 3 ///<param name="BulletID">弾ID</param> 4 ///<param name="color">弾の色</param> 5 ///<param name="shotPosition">生成座標</param> 6 ///<param name="z">弾の初期z座標(表示順を調整)</param> 7 ///<param name="speed">初速</param> 8 ///<param name="baseAngle">基準角度(°)</param> 9 ///<param name="accel">加速度</param> 10 ///<param name="limitSpeed">最高・最低速度(加速度0の時は無効)</param> 11 ///<param name="n">way数</param> 12 ///<param name="angSpace">角度間隔</param> 13 ///</summary> 14 public static void ShootNway(int BulletID,string color,Vector2 shotPosition,float z,int speed, 15 float baseAngle,int accel,int limitSpeed,int n,float angSpace){ 16 if(n<=0){ 17 Debug.Log("way数が0以下になっています"); 18 return; 19 } 20 if(n>=1){ 21 for(int i=0;i<n;i++){ 22 float ang_i = baseAngle+(angSpace*0.5f)*(2*i-n+1); 23 float z_i = z+Time.deltaTime*i; 24 //CreateShot01は加減速可能な直進弾を生成する関数です。 25 CreateShot01(BulletID,color,shotPosition,z_i,speed,ang_i,accel,limitSpeed); 26 } 27 return; 28 } 29 }
発生している問題
加減速するようにすると、一部の弾の速度がずれ、弾幕の形状が崩れる問題が発生しています。
フレームで動かして確認した限り、ズレている弾だけ、1回目の速度更新が行われていない様子でした。
該当のソースコード
上記のShootNwayではなく、速度を更新する下記ModifyDirection関数に問題があるのではないかと思っています。
速度(と角度)をint型で保存し、角度から作った単位ベクトルに速度をかける形です。
c#
1 public int tmpSpd;//更新される速度 2 public int accel;//加速度 3 public int limitSpeed;//最高/最低速度 4 5 public override Vector2 ModifyDirection(Vector2 pos, Vector2 dir){ 6 Vector2 vec = tmpAng.DegToVector() * tmpSpd; 7 //速度を更新 8 if(accel>0){//加速の時 9 if(tmpSpd<limitSpeed){ 10 tmpSpd += accel; 11 if(tmpSpd>limitSpeed){ 12 tmpSpd = limitSpeed; 13 } 14 } 15 }else if(accel<0){//減速の時 16 if(tmpSpd>limitSpeed){ 17 tmpSpd += accel; 18 if(tmpSpd<limitSpeed){ 19 tmpSpd = limitSpeed; 20 } 21 } 22 } 23 //角度を更新 24 tmpAng += angVel*Time.deltaTime; 25 return vec; 26 }
試したこと
①当初はfloat型による浮動小数点誤差かと思い、int型でも問題ないことを確認して切り替えましたが、改善しませんでした。
②初速(=発射の瞬間)のtmpSpdはデバッグですべて同じことを確認しています。
③発射直後(=発射の次のフレーム)では、ズレている弾の速度が加速度1個分だけ速いことがわかっています。(減速の場合)
(加速の場合は、逆に加速度1個分だけ遅いです。)
以上、どうぞよろしくお願いします。
回答3件
あなたの回答
tips
プレビュー