####方法1:セーブ対象判定はタグ、ブロックIDはスクリプト使用
GameObject1つにつきtagは1つしか付けられないので、
「セーブ対象である」タグを付与、ブロックIDは別途スクリプトで管理する方法がスマートかと。
ただGameObject.FindGameObjectsWithTag
は割と重い処理であることが予想される上に、その後更にブロックID用スクリプトを取得しなければいけないので、こちらも一度負荷を計測した方がいいかと。
(ブロックが増えると重くて使い物にならない可能性があります)
####方法2:セーブ対象判定はタグ、ブロックIDはGameObject名使用
手動設定するのはブロックIDだけでいい(位置と回転はtransformから取得)の場合、
ブロックID用スクリプトを作らず、そのままGameObject名にしてしまうという方法もあります。
この場合、GameObject名はstringになるので「『block_○』となっている名称の○部分をint型で欲しい」などの場合は文字列加工や型変換コストが発生するのがネック。
逆にGameObject名をstringのまま丸ごと受け渡せばOK、という場合はブロックID用スクリプト使用よりも早くなると思います。
####方法3:対象のオブジェクトを配列(リスト)に入れる
List型の変数を作り、対象のオブジェクトが生成されたタイミング等で格納する方法。
「探し出す」という工程が無くなるのでその分の処理負荷が消えますが、参照をキープし続けるのであまりにも対象オブジェクトの個数が多い場合はメモリに負荷が掛かるかもしれません。(参照だけなので大丈夫かもしれません、一度計測してみてください)
C# List<T> の使い方 - 要素の追加・検索・Sort・LINQ - Project Unknown
ちなみにリストとブロックID管理スクリプトを使う場合、GameObjectのリストではなく「ブロックIDを管理するスクリプトのリスト」にするとアクセスしやすいです。以下一例。
List<BlockData> saveList = new List<BlockData>(); //セーブするブロックのリスト
saveList.Add(targetGameObject.GetComponent<BlockData>()); //リストに格納
saveList[10].id; //10番目の要素のIDにアクセス
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/27 03:09
2018/07/27 05:54