【未解決】クラスのデータに複数のオブジェクトからアクセスすると最後の情報で統一される
【現象】処理の中で同一のPrefabから(同種の/しかし別々の)GameObjectを生成し、GameObject付随の処理の中で他クラスで定義しているデータにアクセスし使用した際、すべてのGameObjectで最後の情報に統一される。
【具体的には】爆弾を設置する時、火力はその時点でのプレイヤーの火力で爆発してほしいが、爆弾Aを設置した後に火力が変動し、爆弾Bを設置した場合、爆発時には爆弾AもBの火力で爆発する。
【図にすると】こんな感じ
未解決というか、なぜ解決するのか現時点では今ひとつ理解していない。
たぶんクラスやインスタンスに関わる部分だから、C#に詳しければいいんだろうけど……
参考リンク:http://d.hatena.ne.jp/maximilianahead/20120106/1325875727\
データ管理用クラス
public class bombExplodeInformation : MonoBehaviour { private int crntFireLevel; private GameObject expEffect; private AudioClip expSound; private bool pierce; public void InitializeBombExpInfo(int crntFire, GameObject effect, AudioClip sound, bool p) { crntFireLevel = crntFire; expEffect = effect; expSound = sound; pierce = p; return; } : :
GameObject内の処理
コメントされているやり方だとError or Warning
: : // 爆発処理用情報用データ. // private bombExplodeInformation expInfo = new bombExplodeInformation(); private bombExplodeInformation expInfo; : : // 爆発処理用情報セット. // expInfo = bombCtrl.GetComponent<bombExplodeInformation>(); expInfo = gameObject.AddComponent<bombExplodeInformation>(); expInfo.InitializeBombExpInfo( "中略" ); : : bSProcess.ActExplode(this.gameObject, expInfo); : :
結論としては、使用する際にAddComponentする必要がある。
変数宣言の時にnewすることでも実装としては可能だが、Warningがきっちり出てくれる。