質問: ユニティで各アセットを管理するのにハッシュ値を適用しようと考えています。 ファイル名まで含んだフルパスに対してString.GetHashCode()からハッシュ値を 得ようとしております。 下記、MSDNを見る限り文字列が異なれば必ずハッシュ値が異なるように見えるのですが、 必ずユニークになるとの記述はないため、このまま使用していいものかわからずにいます。 知見をお持ちの方いらっしゃいましたら教えてください。 Unityなので.Net2.0まで使用可能です。 Unityバージョンは5.0.1f1 【追記】 やりたいこととしては下記スクールストライクガールズのPDFの74ページ目にある仕組みを作ることです。 ファイルの実体を1つのバイナリデータとして保存し、 下記構造体のリストでファイルパスとオフセット位置とファイルサイズを管理するという ファイルシステムを構築するためにファイルパスを可逆なものにしたいと思っています。 ``` public struct FileSystemStruct { public int HashCode; // アセット名のハッシュコード public long OffsetPosition; // ファイルシステム上のアセットデータの開始位置 public long Filesize; // ファイルシステム上のアセットデータのサイズ } ``` 【使い方】 UIから指定パスのアセットをロードしたいというイベントが発生した時に、 指定パスをハッシュ化して、構造体のリスト内を検索してヒットした位置の バイナリをロードするといった仕組みを構築するつもりです。
回答: スクールストライクガールズのPDFの74ページ目の仕組みはアセット名からハッシュ値を作るよりもアセット名に順にIDを振っていき、アセット名を利用する部分をIDで置換していく方が的確な気がします。 リソースを統合し、ID情報からランダムアクセス可能にするというのがまず最初の目的になるでしょう。 "UIから指定パスのアセットをロードしたいというイベントが発生した時に、指定パスをハッシュ化する"までやってしまうなら、Dictionaryを利用してアセット名をidに変換する方がシンプルかつ見通しも良いと思います。 第2段階として、変換を0にしてDictionary型を排除することができるか検討する形になると思います。つまり、アセット名のハードコーディングの削除を目指します。