質問編集履歴

1

n-Way弾を生成する具体的な関数、崩れたn-Way弾の図を追加

2020/07/24 11:59

投稿

metalnickel
metalnickel

スコア2

test CHANGED
File without changes
test CHANGED
@@ -2,9 +2,77 @@
2
2
 
3
3
  弾幕STGで、弾を発射・動かすスクリプトがおよそ完成したので、
4
4
 
5
- 次のステップとして、n-Way弾や全方位弾などの拡張関数を作ろうとしています。
5
+ 次のステップとして、n-Way弾や全方位弾などの関数を作ろうとしています。
6
6
 
7
- 実現したいものは、基本的な直線加減速だけの拡張関数です。
7
+ 実現したいものは、基本的な直線加減速だけの関数です。
8
+
9
+ 下記にn-Way弾の関数を示します。
10
+
11
+
12
+
13
+ ```c#
14
+
15
+ ///<summary>
16
+
17
+ ///nWay弾を発射します。
18
+
19
+ ///<param name="BulletID">弾ID</param>
20
+
21
+ ///<param name="color">弾の色</param>
22
+
23
+ ///<param name="shotPosition">生成座標</param>
24
+
25
+ ///<param name="z">弾の初期z座標(表示順を調整)</param>
26
+
27
+ ///<param name="speed">初速</param>
28
+
29
+ ///<param name="baseAngle">基準角度(°)</param>
30
+
31
+ ///<param name="accel">加速度</param>
32
+
33
+ ///<param name="limitSpeed">最高・最低速度(加速度0の時は無効)</param>
34
+
35
+ ///<param name="n">way数</param>
36
+
37
+ ///<param name="angSpace">角度間隔</param>
38
+
39
+ ///</summary>
40
+
41
+ public static void ShootNway(int BulletID,string color,Vector2 shotPosition,float z,int speed,
42
+
43
+ float baseAngle,int accel,int limitSpeed,int n,float angSpace){
44
+
45
+ if(n<=0){
46
+
47
+ Debug.Log("way数が0以下になっています");
48
+
49
+ return;
50
+
51
+ }
52
+
53
+ if(n>=1){
54
+
55
+ for(int i=0;i<n;i++){
56
+
57
+ float ang_i = baseAngle+(angSpace*0.5f)*(2*i-n+1);
58
+
59
+ float z_i = z+Time.deltaTime*i;
60
+
61
+          //CreateShot01は加減速可能な直進弾を生成する関数です。
62
+
63
+ CreateShot01(BulletID,color,shotPosition,z_i,speed,ang_i,accel,limitSpeed);
64
+
65
+ }
66
+
67
+ return;
68
+
69
+ }
70
+
71
+ }
72
+
73
+ ```
74
+
75
+
8
76
 
9
77
 
10
78
 
@@ -14,11 +82,13 @@
14
82
 
15
83
  フレームで動かして確認した限り、ズレている弾だけ、1回目の速度更新が行われていない様子でした。
16
84
 
17
-
85
+ ![崩れたn-Way弾の図](40f48588af72da8d0f1fab281e3b8188.png)
18
86
 
19
87
 
20
88
 
21
89
  ### 該当のソースコード
90
+
91
+ 上記のShootNwayではなく、速度を更新する下記ModifyDirection関数に問題があるのではないかと思っています。
22
92
 
23
93
  速度(と角度)をint型で保存し、角度から作った単位ベクトルに速度をかける形です。
24
94