質問: ### 前提・実現したいこと Unity初心者です。 3DCGも勉強途中のため、的外れなこともあると思いますがご容赦ください。 スクリプトに以下の処理を記述し、ゲーム実行時に処理が走るようにしたいです。 1新しく3Dモデルを生成、マテリアルを設定する。 2ライトをベイクする。(グローバルイルミネーションやアンビエントオクルージョンの効果も含む) 3モデル、マテリアル、ベイクデータをアセットバンドル化して、任意のフォルダへ保存する。 ### 試したこと 1モデルの生成、マテリアルの設定は表示させることができました。 2ライティング効果は、ライトをベイクする方法としてLightmapping.Bake()メソッドを使ったところ、 ビルドに失敗しコンパイルエラーが起きました。 3まだ試せていませんが、調べた限りではゲーム実行時に アセットバンドルを作成したという事例は見つけられませんでした。 ### 発生している問題・エラーメッセージ 2のコンパイルエラー ``` error CS0103: The name `Lightmapping' does not exist in the current context Error building Player because scripts had compiler errors Build completed with a result of 'Failed' UnityEditor.BuildPlayerWindow:BuildPlayerAndRun() UnityEditor.BuildPlayerWindow+BuildMethodException: 2 errors at UnityEditor.BuildPlayerWindow+DefaultBuildMethods.BuildPlayer (BuildPlayerOptions options) [0x0021f] in C:\buildslave\unity\build\Editor\Mono\BuildPlayerWindowBuildMethods.cs:182 at UnityEditor.BuildPlayerWindow.CallBuildMethods (Boolean askForBuildLocation, BuildOptions defaultBuildOptions) [0x00065] in C:\buildslave\unity\build\Editor\Mono\BuildPlayerWindowBuildMethods.cs:89 UnityEditor.BuildPlayerWindow:BuildPlayerAndRun() ``` 具体的にはこのようなことを知りたく、質問させていただきました。 ・ゲーム実行中にライトを焼くことはできるのか。(出来ないのであれば、リアルタイムライティングを使用するしかないのか) ・Bakeメソッド以外で実行中にライトを焼く方法があれば、どんな方法なのか。 ・ゲーム実行中にアセットバンドルを作成できるのか。 ### 補足情報(FW/ツールのバージョンなど) Unity:2018.1.0f2 スクリプト:C#(.NET Framework 4.x) 質問初心者のため、分かりづらい点・不足している情報などありましたらご指摘いただけると幸いです。
回答: LightmappingクラスはEditor専用なのでゲーム実行中には動作出来ません。 アセットバンドルも同様です。 なので「不可能です」というのが直接的な回答になります。 そもそもライトのベイクは「事前に光と影の計算を行い、ゲーム実行を高速化させる」為のものなので、ゲーム実行中にベイクするという発想がおかしいです。 ベイク対象は「staticなオブジェクト(=ゲーム実行中も移動しないことが保証されたオブジェクト)」なので、ゲーム中にこれらのオブジェクトが動いているとしたらそれはそれで問題ですし、動かないなら実行中に焼く必要がありません(事前に焼けばいい話)。 もし「ゲーム中の1場面の配置状態でベイクしたい」というのであれば、全オブジェクトの位置を記録するようなスクリプトを組み、ゲームを実行していない状態で記録した位置を反映(これもエディタスクリプトで出来る)してからベイクすればいいかと思います。 アセットバンドルもほぼ同様の話となります。