【Unity】データコピーの注意点(参照型と値型について)
起きた問題と、教わった解決方法をメモ。万が一、忘れたとき用に。
起きたトラブル
- 自作クラス型の変数に、別の変数を代入したあと、
変数中にある公開変数の値を変更したら、元の変数の値まで変わってしまった - イメージ的には、ActorSkill skill = originalSkill で、skill.sp = 10 としたら、
originalSkill.sp の値まで 10 になってしまった風味
参照型と値型の違い
- int num = originalNum なら数値がそれぞれ別扱いになる。
が、クラス型になると変わる。
- Transform tr = originalTr としたあと tr.position を変えると、
オリジナルのポジションも変わるのがまさにそれ(参照型でコピー)
- Transform tr = originalTr としたあと tr.position を変えると、
解決方法
- クラスにコンストラクタを作って、そこにコピー元を代入できるようにしたのち、
コンストラクタ中でそれぞれの値を移し替える。 - あとは ActorSkillOption skillOption = new ActorSkillOption(originalSkillOption);
とすれば参照コピーではなく、新規コピーとしてインスタンスが生成される。