質問編集履歴

4

追記

2021/08/17 05:16

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,7 @@
1
+ 2つ目のスクリプトからWeaponクラスのインスタンスを複数回呼び出し、リストに格納します。
2
+
3
+ Weapnクラスの中のweaponPowerが毎回違う値で格納されることを期待していますが、毎回同じになってしまいます。
4
+
1
5
  ```C#
2
6
 
3
7
  public class Weapon : MonoBehaviour
@@ -66,6 +70,12 @@
66
70
 
67
71
  24,24,24,24,24のように同じ数字が5つ並んでしまう
68
72
 
73
+ ### 追記
74
+
75
+ objは空のオブジェクトでWeaponスクリプトが1つついています。
76
+
77
+ Unityのバージョンは2020.3.8f1です。
78
+
69
79
  ### その他
70
80
 
71
81
  2つ目のスクリプトで

3

修正

2021/08/17 05:15

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- Unity - リストに追加したクラスのインスタンスのデータを、生成たオブジェクトに持たせた
1
+ Unity - クラスのインスタンスを呼び出すたび異なる結果を返てほし
test CHANGED
@@ -1,22 +1,8 @@
1
- リストとクラスに関する知識が浅いので、説明がおかしいかもしれません。ご了承ください。
2
-
3
- このように黒いボタンを複数生成するのですが、それぞれに同じクラスの異なるインスタンスのデータを持たせたいです。
4
-
5
-
6
-
7
- ![イメージ説明](0b80b530a606c5e739527a77670c44c8.png)
8
-
9
-
10
-
11
- 武器をランダムに生成するスクリプト(省略してます)
12
-
13
1
  ```C#
14
2
 
15
- public class WeapnGenerator : MonoBehaviour
3
+ public class Weapon : MonoBehaviour
16
4
 
17
5
  {
18
-
19
- public string weaponName;
20
6
 
21
7
  public int weaponPower;
22
8
 
@@ -26,25 +12,13 @@
26
12
 
27
13
  {
28
14
 
29
- SetName(); //ランダムな名前をweaponNameに入れる処理
30
-
31
- SetPower();//ランダムな数値をweaponPowerに入れる処理
15
+ weaponPower = Random.Range(1, 100 + 1);
32
16
 
33
17
  }
34
18
 
35
- //略
36
-
37
19
  }
38
20
 
39
-
40
-
41
21
  ```
42
-
43
-
44
-
45
- リストにクラスのインスタンスを追加して、そのインスタンスが持つ要素をInstantiateしたボタンに持たせたいスクリプト
46
-
47
-
48
22
 
49
23
  ```C#
50
24
 
@@ -52,23 +26,31 @@
52
26
 
53
27
  {
54
28
 
55
- [System.NonSerialized] public List<WeaponGenerator> weaponHolder = new List<WeaponGenerator>(); //クラス型のリスト
29
+ public List<Weapon> weaponDate = new List<Weapon>();
56
-
57
- [SerializeField] GameObject content; //ボタンの生成先を取得
58
-
59
- [SerializeField] GameObject weaponListButton; //生成するプレハブを取得
60
30
 
61
31
 
62
32
 
63
- public void WeaponCreate() //生成ボタンたび
33
+ public void WeaponCreate() //これ呼び出
64
34
 
65
35
  {
66
36
 
67
- weaponHolder.Add(new WeaponGenerator()); //クラスのインスタンスを追加する(?)
37
+ for (int i = 0; i < 5; i++)
68
38
 
69
- //ボタンを生成、これに先程追加したインスタンスのデータを持たせたい
39
+ {
70
40
 
41
+ //こう書くとエラーが出て、weaponPowerが0になる
42
+
43
+ //weaponDate.Add(new Weapon());
44
+
45
+
46
+
47
+ //objはWeaponスクリプトがついたオブジェクト
48
+
71
- Instantiate(weaponListButton, content.transform.position, content.transform.rotation,this.transform);
49
+ weaponDate.Add(GameObject.Find("obj").GetComponent<Weapon>());
50
+
51
+ Debug.Log(weaponDate[i].weaponPower);
52
+
53
+ }
72
54
 
73
55
  }
74
56
 
@@ -76,10 +58,34 @@
76
58
 
77
59
  ```
78
60
 
61
+ ### このように動いてほしい
62
+
63
+ コンソール画面に56,83,12,98,44のようにランダムな数字が5つ並んでほしい
64
+
65
+ ### 実際の動作
66
+
67
+ 24,24,24,24,24のように同じ数字が5つ並んでしまう
68
+
69
+ ### その他
70
+
71
+ 2つ目のスクリプトで
72
+
73
+ weaponData.Add(new Weapon()); とすると
79
74
 
80
75
 
81
- ここで詰まってしまいました。
82
76
 
83
- ランダム生成された武器の名前をボタンのテキストに入れるなどをしたいです。
77
+ You are trying to create a MonoBehaviour using the 'new' keyword.
84
78
 
79
+ This is not allowed. MonoBehaviours can only be added using AddComponent().
80
+
81
+ Alternatively, your script can inherit from ScriptableObject or no base class at all
82
+
83
+
84
+
85
- 考え方のヒトだけでも良いので、ご教授ください。お願いします。
85
+ MonoBehaviourを継承したクラスをnewでイスタンス化するなと警告が出ます。
86
+
87
+ なので、
88
+
89
+ weaponDate.Add(GameObject.Find("obj").GetComponent<Weapon>()); としました。
90
+
91
+ (WeaponスクリプトでTransformやGetComponentを使用するのでMonoBehaviourは継承したいです。)

2

脱字

2021/08/17 04:14

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  リストとクラスに関する知識が浅いので、説明がおかしいかもしれません。ご了承ください。
2
2
 
3
- このようにボタンを複数生成するのですが、それぞれに同じクラスの異なるインスタンスのデータを持たせたいです。
3
+ このように黒いボタンを複数生成するのですが、それぞれに同じクラスの異なるインスタンスのデータを持たせたいです。
4
4
 
5
5
 
6
6
 

1

脱字

2021/08/17 02:12

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  リストとクラスに関する知識が浅いので、説明がおかしいかもしれません。ご了承ください。
2
2
 
3
- このようにボタンを複数生成するのですが、それぞれにクラスのインスタンスのデータを持たせたいです。
3
+ このようにボタンを複数生成するのですが、それぞれに同じクラスの異なるインスタンスのデータを持たせたいです。
4
4
 
5
5
 
6
6
 
@@ -26,7 +26,7 @@
26
26
 
27
27
  {
28
28
 
29
- SetName(); //ランダムな名前をweaonNameに入れる処理
29
+ SetName(); //ランダムな名前をweaponNameに入れる処理
30
30
 
31
31
  SetPower();//ランダムな数値をweaponPowerに入れる処理
32
32