0

この質問を検索したところ、関連する多くの情報が見つかりましたが、いくつかの矛盾があり、明確な答えはありません。

Unity プロジェクトで、スクリプト (C#) を持つゲーム オブジェクトを含むアセット バンドルを作成しています。私はそれを行う方法を学びました、そしてそれはうまくいきます。

私の問題は、最終的には、アセット バンドルを構築する前に割り当てられたスクリプト内のパブリック変数の値を保持する必要があることです。つまり、私のプレハブにはパブリック変数を持つスクリプトがあります。インスタンスごとに異なるパブリック値を使用して、何度もインスタンス化します。アセット バンドルの旅を乗り切るには、これらすべてが必要です。

したがって、私の現在のプロセスは次のとおりです。

  1. ゲーム オブジェクトからスクリプトを削除します。
  2. スクリプトをアセンブリにビルドする
  3. ゲーム オブジェクトとアセンブリをアセット バンドルにパックする
  4. バンドルを新しいプロジェクトにダウンロードする
  5. アセット バンドルを解凍し、ゲーム オブジェクトをインスタンス化する
  6. スクリプト アセンブリをゲーム オブジェクトにアタッチするには、AddComponent()

問題はステップ 1 です。バンドルする前にゲーム オブジェクトからスクリプトを削除します。そうしないと、解凍時に、参照されているスクリプトが見つからないというエラーが表示されます。また、ステップ 6 はAddComponentそれをアタッチするために使用するため、そのスクリプトが既にアタッチされたコンポーネントである場合、実際にそれを行うことはできません。したがって、バンドルする前にそれらを削除すると、これらの問題が解決します。

私は何が欠けていますか?私の方法はどこに問題がありますか?バンドルすると、パブリック値がゲーム オブジェクトのスクリプト リファレンスに保存されると読みましたが、もちろん、スクリプト コンポーネントを削除すると、それが失われます。

では、資産のバンドル プロセスを通じて公共の価値を維持するにはどうすればよいでしょうか。バンドルする前にスクリプト コンポーネントを削除すべきではありませんか? もしそうなら、スクリプトを別の方法で管理するにはどうすればよいですか? スクリプト アセンブリとソース ファイルの両方をバンドルする必要がありますか? (現在、アセンブリのみをバンドルしています)、アセンブリをアタッチするときに冗長性が生じませんか?

4

1 に答える 1

0

Unity はアセンブリをバンドルに保存しません。スクリプトのシリアル化データのみを保存します (これは、パブリック変数、および [SerializeField] 属性を持つ変数です)。ただし、すべてのスクリプト タイプのスクリプト アセンブリのハッシュも格納されるため、参照の欠落を避けるために、メインの実行可能ファイルと同じプロジェクトでバンドルをビルドする必要があります。

そのため、ゲームオブジェクトからスクリプトを削除する必要はありませんが、コードが変更されたときに、同じ Unity プロジェクトでバンドルをビルドして再構築する必要があります。

于 2014-08-11T10:36:43.307 に答える