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

質問編集履歴

4

追記

2021/08/17 05:16

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,3 +1,5 @@
1
+ 2つ目のスクリプトからWeaponクラスのインスタンスを複数回呼び出し、リストに格納します。
2
+ Weapnクラスの中のweaponPowerが毎回違う値で格納されることを期待していますが、毎回同じになってしまいます。
1
3
  ```C#
2
4
  public class Weapon : MonoBehaviour
3
5
  {
@@ -32,6 +34,9 @@
32
34
  コンソール画面に56,83,12,98,44のようにランダムな数字が5つ並んでほしい
33
35
  ### 実際の動作
34
36
  24,24,24,24,24のように同じ数字が5つ並んでしまう
37
+ ### 追記
38
+ objは空のオブジェクトでWeaponスクリプトが1つついています。
39
+ Unityのバージョンは2020.3.8f1です。
35
40
  ### その他
36
41
  2つ目のスクリプトで
37
42
  weaponData.Add(new Weapon()); とすると

3

修正

2021/08/17 05:15

投稿

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

2

脱字

2021/08/17 04:14

投稿

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

1

脱字

2021/08/17 02:12

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  リストとクラスに関する知識が浅いので、説明がおかしいかもしれません。ご了承ください。
2
- このようにボタンを複数生成するのですが、それぞれにクラスのインスタンスのデータを持たせたいです。
2
+ このようにボタンを複数生成するのですが、それぞれに同じクラスの異なるインスタンスのデータを持たせたいです。
3
3
 
4
4
  ![イメージ説明](0b80b530a606c5e739527a77670c44c8.png)
5
5
 
@@ -12,7 +12,7 @@
12
12
 
13
13
  private void Start()
14
14
  {
15
- SetName(); //ランダムな名前をweaonNameに入れる処理
15
+ SetName(); //ランダムな名前をweaponNameに入れる処理
16
16
  SetPower();//ランダムな数値をweaponPowerに入れる処理
17
17
  }
18
18
  //略