2つ目のスクリプトからWeaponクラスのインスタンスを複数回呼び出し、リストに格納します。
Weapnクラスの中のweaponPowerが毎回違う値で格納されることを期待していますが、毎回同じになってしまいます。
C#
1public class Weapon : MonoBehaviour 2{ 3 public int weaponPower; 4 5 private void Start() 6 { 7 weaponPower = Random.Range(1, 100 + 1); 8 } 9}
C#
1public class WeaponList : MonoBehaviour 2{ 3 public List<Weapon> weaponDate = new List<Weapon>(); 4 5 public void WeaponCreate() //これを呼び出す 6 { 7 for (int i = 0; i < 5; i++) 8 { 9 //こう書くとエラーが出て、weaponPowerが0になる 10 //weaponDate.Add(new Weapon()); 11 12 //objはWeaponスクリプトがついたオブジェクト 13 weaponDate.Add(GameObject.Find("obj").GetComponent<Weapon>()); 14 Debug.Log(weaponDate[i].weaponPower); 15 } 16 } 17}
このように動いてほしい
コンソール画面に56,83,12,98,44のようにランダムな数字が5つ並んでほしい
実際の動作
24,24,24,24,24のように同じ数字が5つ並んでしまう
追記
objは空のオブジェクトでWeaponスクリプトが1つついています。
Unityのバージョンは2020.3.8f1です。
その他
2つ目のスクリプトで
weaponData.Add(new Weapon()); とすると
You are trying to create a MonoBehaviour using the 'new' keyword.
This is not allowed. MonoBehaviours can only be added using AddComponent().
Alternatively, your script can inherit from ScriptableObject or no base class at all
MonoBehaviourを継承したクラスをnewでインスタンス化するなと警告が出ます。
なので、
weaponDate.Add(GameObject.Find("obj").GetComponent<Weapon>()); としました。
(WeaponスクリプトでTransformやGetComponentを使用するのでMonoBehaviourは継承したいです。)
回答2件
あなたの回答
tips
プレビュー