下記のようなクラス(中にはメンバとそれへのget,setのみ)をインスタンス化するときに、エラーではなく注意ですが、
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
UnityEngine.MonoBehaviour:.ctor()
と表示されます。
これについては検索して、MonoBehavior継承してたら
GameObject.Find("オブジェクト").GetComponent<AllyMemberStatus>();
でもってこないとだめだということはわかりました。
AllyMemberStatus.cs
1public class AllyMemberStatus : MonoBehaviour 2{ 3 public string charactorName = " "; 4 public string CharactorID; 5 public int level = 1; 6 public JobType.JobKind jobType = JobType.JobKind.戦士; 7 public JobType.JobName jobName = JobType.JobName.戦士; 8 public WeaponEnum.AllWeapon equipWeapon; 9 10 11 public int earnedExperience = 0; 12 public int nextLvUpExperience = 0; 13 14 public int maxHP = 100; 15 public int nowHP = 100; 16 public int maxMP = 30; 17 public int nowMP = 30; 18 public int ATK = 20; 19 public int DEF = 10; 20 public int INT = 15; 21 public int MND = 10; 22 public int DEX = 10; 23 public int AGI = 10; 24 public int CRI = 5; 25 26 27 public bool isPoisonState = false; 28 public bool isNumbnessState = false; 29 public bool isSelected = false; 30 31 public void SetCharactorName(string CharactorName) 32 { 33 charactorName = CharactorName; 34 } 35 36 public string GetCharactorName() 37 { 38 return charactorName; 39 } 40//以下セットとゲットのみ
しかし、個人的な使いやすさとしては、これをこのままインスタンスのように使いたい。
MasterData.cs
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class MasterData : MonoBehaviour 6{ 7 public static AllyMemberStatus[] AllyMemberStatusArray; //冒険者パーティー。一覧。 8 public static AllyMemberStatus[] AllyMemberSelectedArray;//パーティ選出メンバー管理用。 9 public static bool InitialGame = true; 10 11 12 public static void InitialSetAllyMember() { 13 var AllyMemberStatusList = new List<AllyMemberStatus>(); 14 if (InitialGame) 15 { 16 Debug.Log("initial setされたよ"); 17 AllyStatus a1 = Resources.Load<AllyStatus>("AllyStatus/いち/1"); 18 AllyMemberStatus aa1 = a1.GetAllyMemberStatus(); 19 AllyStatus a2 = Resources.Load<AllyStatus>("AllyStatus/に/1"); 20 AllyMemberStatus aa2 = a2.GetAllyMemberStatus(); 21 AllyMemberStatusArray = new AllyMemberStatus[2] { aa1, aa2 }; 22 AllyMemberSelectedArray = new AllyMemberStatus[2] { aa1, aa2 }; 23 InitialGame = false; 24 Debug.Log(AllyMemberSelectedArray[0].GetCharactorName()); 25 Debug.Log(AllyMemberSelectedArray[1].GetCharactorName()); 26 } 27 } 28 29 30 31 void Start() 32 { 33 //InitialSetAllyMember(); 34 DontDestroyOnLoad(this); 35 } 36 37 38 39 void Update() 40 { 41 42 } 43} 44
このコードのAllyMemberStatus aa1 = a1.GetAllyMemberStatus();
の部分をGameObject.Find("オブジェクト").GetComponent<AllyMemberStatus>();にしないとずっと注意されるので直したいのですが、
インスタンスとして使えるAllyMemberStatusを作成したつもりだったので、使い勝手が悪い。
AllyMemberStatus内にインスタンスできるようにされにpublic void class AllyMemberStatusInnerなどを作って、今のAllyMemberStatusの中身をすべてInnerに入れれば
allyMemberStatus=GameObject.Find("オブジェクト").GetComponent<AllyMemberStatus>(); allyMemberStatus.AllyMemberStatusInner aa1 =a1.GetAllyMemberStatus();
と呼び出せるので、注意書きがなくなるのはわかるのですが、ほかのコードファイルにも影響している部分なので書き直しは面倒。。
こういう場合、ほかの賢い手法があるのかそれとも、あきらめて上のようにやればいいのかアドバイスが欲しいです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー