質問するログイン新規登録

質問編集履歴

2

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

2020/01/18 02:49

投稿

Kageyama_23457
Kageyama_23457

スコア21

title CHANGED
File without changes
body CHANGED
@@ -1,8 +1,5 @@
1
1
  ### ランダム生成したアイテムを、それぞれランダムな方向に移動させたい
2
2
 
3
- ★追記 頂いたアドバイスで、8方向をランダムに取得し移動させることはできたので、
4
- 下記②にそのコードを書いておきます。
5
-
6
3
  Unity、C#ともに初心者なので、至らぬ点あるかと思いますがご容赦ください。
7
4
  Unityの3Dモードで、タテスクロールの障害物競争のようなゲームを作っています。
8
5
  具体的に書くと、「自機キャラがいて、他に3人ほどCPUがいて、ゴールを目指す。
@@ -47,40 +44,37 @@
47
44
  }
48
45
  ```
49
46
  ②大量生産するアイテム(プレハブ)につけるスクリプト
47
+ ご教授頂き、0度〜360度の中からランダムに方向を決め移動させることができました。
50
48
 
51
49
  ```C#
52
50
  using System.Collections;
53
51
  using System.Collections.Generic;
54
52
  using UnityEngine;
55
53
 
56
- public class ocha02 : MonoBehaviour
54
+ public class ocha03 : MonoBehaviour
57
55
  {
58
- public float Speed;//インスペクタで移動速度設定
56
+ private float Speed=1;//なぜかここどれだけ大きくしても速くならないので、下の☆で掛け算してます
59
57
  private bool nonVisibleAct;//映ってなくても動いてる
60
58
 
61
59
  Rigidbody2D rb = null;
62
- private SpriteRenderer sr = null;//変数宣言
60
+ private SpriteRenderer sr = null;
63
61
 
64
62
  void Start()
65
63
  {
66
- rb = GetComponent<Rigidbody2D>();//インスタンス取得
64
+ rb = GetComponent<Rigidbody2D>();
67
65
  sr = GetComponent<SpriteRenderer>();//自身が画面に映っているか判断
68
66
 
69
- float x = Random.Range(-1, 1);//
70
- float y = Random.Range(1, -1);//
67
+ float angle = Random.Range(0, 360);//0度〜360度の中からランダムに角度(方向)を取得
68
+ float rad = angle * Mathf.Deg2Rad;//取得した角度をラジアン角に変換(数学ワカンナイデス)
69
+
70
+ double addforceX = Mathf.Sin((rad) * Speed);
71
- rb.velocity = new Vector2(x*Speed,y*Speed);//行で、生成され位置から8方向のうちどれか移動してくれます
71
+ double addforceY = Mathf.Cos((rad) * Speed);//行で取得した方向をaddforce代入
72
+ Vector2 moveVector = new Vector2((float)addforceX, (float)addforceY);//Vector2(速度)をaddforceから取得
73
+
74
+ rb.velocity = moveVector*4;//☆インスタンスに速度を渡す
72
75
  }
73
76
  }
74
77
  ```
75
-
76
- ### 引き続きアドバイスを募集する理由
77
- 当方のこのゲームにおいては8方向でもいいのですが、後学のために、
78
- 「生成された位置から360度、ランダムに方向が決まり移動する」方法も知りたいです。
79
- ですが検索したところ、360度となると「方向」ではなく「回転」という概念になるようで、
80
- そして「方向」と「回転」は全く別の概念のようで、
81
- 「回転」と「速度」を掛け合わせる書き方を当方は今の所編み出せておりません。
82
- もしお詳しい方がこちらをご覧でしたら、ご教授頂きたく存じます。
83
-
84
78
  ### 補足情報(FW/ツールのバージョンなど)
85
79
 
86
80
  ■作業環境

1

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

2020/01/18 02:49

投稿

Kageyama_23457
Kageyama_23457

スコア21

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,8 @@
1
1
  ### ランダム生成したアイテムを、それぞれランダムな方向に移動させたい
2
2
 
3
+ ★追記 頂いたアドバイスで、8方向をランダムに取得し移動させることはできたので、
4
+ 下記②にそのコードを書いておきます。
5
+
3
6
  Unity、C#ともに初心者なので、至らぬ点あるかと思いますがご容赦ください。
4
7
  Unityの3Dモードで、タテスクロールの障害物競争のようなゲームを作っています。
5
8
  具体的に書くと、「自機キャラがいて、他に3人ほどCPUがいて、ゴールを目指す。
@@ -11,7 +14,7 @@
11
14
 
12
15
  ### 現在実装しているスクリプト
13
16
  ①アイテム生成担当のオブジェクト(空のオブジェクト)につけているスクリプト
14
- こちらは問題ありません。狙い通りx、yともランダムな場所に加速アイテムが出てくれます。
17
+ x、yともランダムな場所に加速アイテムが出てくれます。
15
18
  ```C#
16
19
  using System.Collections;
17
20
  using System.Collections.Generic;
@@ -43,13 +46,8 @@
43
46
  }
44
47
  }
45
48
  ```
46
- ②大量生産するアイテム(プレハブ)につけているスクリプト
49
+ ②大量生産するアイテム(プレハブ)につけるスクリプト
47
- こちらが問題で、エラーは出ないのですが、
48
- 現状、生成されたアイテムが全て右ななめ上にしか移動しません。
49
50
 
50
- 実現したいこと:生成された位置からそれぞれ、上下左右ななめランダムにふよふよ? 移動してほしい。
51
- ご教授頂きたく存じます。
52
-
53
51
  ```C#
54
52
  using System.Collections;
55
53
  using System.Collections.Generic;
@@ -68,11 +66,21 @@
68
66
  rb = GetComponent<Rigidbody2D>();//インスタンス取得
69
67
  sr = GetComponent<SpriteRenderer>();//自身が画面に映っているか判断
70
68
 
69
+ float x = Random.Range(-1, 1);//
70
+ float y = Random.Range(1, -1);//
71
- rb.velocity = new Vector2(Speed, Speed);//
71
+ rb.velocity = new Vector2(x*Speed,y*Speed);//この3行で、生成された位置から8方向のうちどれかに移動してくれます
72
- Quaternion randomRot = Random.rotation;//★ここの2行を掛け算すればいいのかと思うのですが書き方がわかりません
73
72
  }
74
73
  }
75
74
  ```
75
+
76
+ ### 引き続きアドバイスを募集する理由
77
+ 当方のこのゲームにおいては8方向でもいいのですが、後学のために、
78
+ 「生成された位置から360度、ランダムに方向が決まり移動する」方法も知りたいです。
79
+ ですが検索したところ、360度となると「方向」ではなく「回転」という概念になるようで、
80
+ そして「方向」と「回転」は全く別の概念のようで、
81
+ 「回転」と「速度」を掛け合わせる書き方を当方は今の所編み出せておりません。
82
+ もしお詳しい方がこちらをご覧でしたら、ご教授頂きたく存じます。
83
+
76
84
  ### 補足情報(FW/ツールのバージョンなど)
77
85
 
78
86
  ■作業環境