質問編集履歴

2

妥協案ではなく解決したので、解決済みにし、書き換えました。

2020/01/18 02:49

投稿

Kageyama_23457
Kageyama_23457

スコア21

test CHANGED
File without changes
test CHANGED
@@ -1,10 +1,4 @@
1
1
  ### ランダム生成したアイテムを、それぞれランダムな方向に移動させたい
2
-
3
-
4
-
5
- ★追記 頂いたアドバイスで、8方向をランダムに取得し移動させることはできたので、
6
-
7
- 下記②にそのコードを書いておきます。
8
2
 
9
3
 
10
4
 
@@ -96,6 +90,8 @@
96
90
 
97
91
  ②大量生産するアイテム(プレハブ)につけるスクリプト
98
92
 
93
+ ご教授頂き、0度〜360度の中からランダムに方向を決め移動させることができました。
94
+
99
95
 
100
96
 
101
97
  ```C#
@@ -108,11 +104,11 @@
108
104
 
109
105
 
110
106
 
111
- public class ocha02 : MonoBehaviour
107
+ public class ocha03 : MonoBehaviour
112
108
 
113
109
  {
114
110
 
115
- public float Speed;//インスペクタ移動速度を設定
111
+ private float Speed=1;//なぜかここをどれだけ大きくしても速くならないの、下の☆で掛け算してます
116
112
 
117
113
  private bool nonVisibleAct;//映ってなくても動いてる
118
114
 
@@ -120,7 +116,7 @@
120
116
 
121
117
  Rigidbody2D rb = null;
122
118
 
123
- private SpriteRenderer sr = null;//変数宣言
119
+ private SpriteRenderer sr = null;
124
120
 
125
121
 
126
122
 
@@ -128,41 +124,33 @@
128
124
 
129
125
  {
130
126
 
131
- rb = GetComponent<Rigidbody2D>();//インスタンス取得
127
+ rb = GetComponent<Rigidbody2D>();
132
128
 
133
129
  sr = GetComponent<SpriteRenderer>();//自身が画面に映っているか判断
134
130
 
135
131
 
136
132
 
137
- float x = Random.Range(-1, 1);//
133
+ float angle = Random.Range(0, 360);//0度〜360度の中からランダムに角度(方向)を取得
138
134
 
139
- float y = Random.Range(1, -1);//
135
+ float rad = angle * Mathf.Deg2Rad;//取得した角度をラジアン角に変換(数学ワカンナイデス)
140
136
 
137
+
138
+
139
+ double addforceX = Mathf.Sin((rad) * Speed);
140
+
141
- rb.velocity = new Vector2(x*Speed,y*Speed);//行で、生成され位置から8方向のうちどれか移動してくれます
141
+ double addforceY = Mathf.Cos((rad) * Speed);//行で取得した方向をaddforce代入
142
+
143
+ Vector2 moveVector = new Vector2((float)addforceX, (float)addforceY);//Vector2(速度)をaddforceから取得
144
+
145
+
146
+
147
+ rb.velocity = moveVector*4;//☆インスタンスに速度を渡す
142
148
 
143
149
  }
144
150
 
145
151
  }
146
152
 
147
153
  ```
148
-
149
-
150
-
151
- ### 引き続きアドバイスを募集する理由
152
-
153
- 当方のこのゲームにおいては8方向でもいいのですが、後学のために、
154
-
155
- 「生成された位置から360度、ランダムに方向が決まり移動する」方法も知りたいです。
156
-
157
- ですが検索したところ、360度となると「方向」ではなく「回転」という概念になるようで、
158
-
159
- そして「方向」と「回転」は全く別の概念のようで、
160
-
161
- 「回転」と「速度」を掛け合わせる書き方を当方は今の所編み出せておりません。
162
-
163
- もしお詳しい方がこちらをご覧でしたら、ご教授頂きたく存じます。
164
-
165
-
166
154
 
167
155
  ### 補足情報(FW/ツールのバージョンなど)
168
156
 

1

妥協案といったところで解決したので、頂いた回答に高評価とお礼申し上げ、しかし解決済みにはせず引き続きアドバイスを募集する旨を書きました。

2020/01/18 02:49

投稿

Kageyama_23457
Kageyama_23457

スコア21

test CHANGED
File without changes
test CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
 
4
4
 
5
+ ★追記 頂いたアドバイスで、8方向をランダムに取得し移動させることはできたので、
6
+
7
+ 下記②にそのコードを書いておきます。
8
+
9
+
10
+
5
11
  Unity、C#ともに初心者なので、至らぬ点あるかと思いますがご容赦ください。
6
12
 
7
13
  Unityの3Dモードで、タテスクロールの障害物競争のようなゲームを作っています。
@@ -24,7 +30,7 @@
24
30
 
25
31
  ①アイテム生成担当のオブジェクト(空のオブジェクト)につけているスクリプト
26
32
 
27
- こちらは問題ありません。狙い通りx、yともランダムな場所に加速アイテムが出てくれます。
33
+ x、yともランダムな場所に加速アイテムが出てくれます。
28
34
 
29
35
  ```C#
30
36
 
@@ -88,17 +94,7 @@
88
94
 
89
95
  ```
90
96
 
91
- ②大量生産するアイテム(プレハブ)につけているスクリプト
97
+ ②大量生産するアイテム(プレハブ)につけるスクリプト
92
-
93
- こちらが問題で、エラーは出ないのですが、
94
-
95
- 現状、生成されたアイテムが全て右ななめ上にしか移動しません。
96
-
97
-
98
-
99
- 実現したいこと:生成された位置からそれぞれ、上下左右ななめランダムにふよふよ? 移動してほしい。
100
-
101
- ご教授頂きたく存じます。
102
98
 
103
99
 
104
100
 
@@ -138,9 +134,11 @@
138
134
 
139
135
 
140
136
 
137
+ float x = Random.Range(-1, 1);//
138
+
139
+ float y = Random.Range(1, -1);//
140
+
141
- rb.velocity = new Vector2(Speed, Speed);//
141
+ rb.velocity = new Vector2(x*Speed,y*Speed);//この3行で、生成された位置から8方向のうちどれかに移動してくれます
142
-
143
- Quaternion randomRot = Random.rotation;//★ここの2行を掛け算すればいいのかと思うのですが書き方がわかりません
144
142
 
145
143
  }
146
144
 
@@ -148,6 +146,24 @@
148
146
 
149
147
  ```
150
148
 
149
+
150
+
151
+ ### 引き続きアドバイスを募集する理由
152
+
153
+ 当方のこのゲームにおいては8方向でもいいのですが、後学のために、
154
+
155
+ 「生成された位置から360度、ランダムに方向が決まり移動する」方法も知りたいです。
156
+
157
+ ですが検索したところ、360度となると「方向」ではなく「回転」という概念になるようで、
158
+
159
+ そして「方向」と「回転」は全く別の概念のようで、
160
+
161
+ 「回転」と「速度」を掛け合わせる書き方を当方は今の所編み出せておりません。
162
+
163
+ もしお詳しい方がこちらをご覧でしたら、ご教授頂きたく存じます。
164
+
165
+
166
+
151
167
  ### 補足情報(FW/ツールのバージョンなど)
152
168
 
153
169