会場の雰囲気とかみて現場で動画とか音声を差し替えたいんだよねって言われたときに、oFとかだとファイルを入れ替えるだけでよかったんですが、Unityでassetにインポートしてあるとファイル差し替えできませんでしたので試行錯誤してみました。
検索しても、対応策があまり見つからなかったので書いてみたいとおもいます。
Unityはあまり慣れてないので、別の方法があったらご指摘いただきたいです。
Windows
Unity 2018.4.14f1
##準備
差し替えたいファイルをStreamingAssetsフォルダにコピーする
StreamingAssetsフォルダはビルドした後特定のフォルダにそのままコピーされます
なければフォルダを作成します
##動画の場合
Application.streamingAssetsPath
でビルド後のStreamingAssetsのパスが取得できるので、ファイル名を追加してから、VideoPlayerのurlに設定します
###サンプル
uGUIのRawImageに動画再生させます
- AssetにRenderTextureを作成(ムービーと同じサイズ)
- RawImageをHierarchyに作成
- 作成したRawImageがちゃんと見えるかRect Transformを確認
- 3で作成したRawImageのTextureに1で作成したRenderTextureをアタッチ
- 3で作成したRawImageにVideoPlayerをアタッチ
- 3で作成したRawImageにC#スクリプトをアタッチ
- 5でアタッチしたVideo PlayerのTarget Textureに1で作成したRenderTextureをアタッチ
using UnityEngine;
using UnityEngine.Video;
public class LoadMovie : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
VideoPlayer videoPlayer = GetComponent<VideoPlayer>();
videoPlayer.url = Application.streamingAssetsPath + "/movie.mp4";
}
// Update is called once per frame
void Update()
{
}
}
##音声の場合
半日ぐらい検索しても見つかりませんでした。
有料アセットのEasy Saveを使うとAudioClipとして読み込みができますので、StreamingAssets内のパスを動画と同様の方法で取得したのちAudioSourceのclipに指定すればよいです。
string url = Application.streamingAssetsPath + "/" + file.Value;
AudioClip audioClip = ES3.LoadAudio(url, audioType);
audioClip.name = file.Value;
if(audioClip !=null) {
audio.clip = audioClip;
}