はじめに
先日このようなものを作ってみました。
エクセルで「うまぴょい伝説」を再生(描画)してみました
— はなちる@ゲーム制作 (@hanaaaaaachiru) May 29, 2021
作って分かったことはVBAがかなり使いづらいこととセルの書式の変更の処理が重いことと、ライスシャワーは解像度が低くても可愛いこと pic.twitter.com/hC3nBQMU1g
中身としてはエクセルで動画を再生してみるというものになりますが、これをどうやって実装したかを描いていきたいと思います。
実装の流れ
エクセルに動画ファイルを埋め込むことができるそうですが、これでは面白くありません。ですので直接エクセルのセルに色つけを行いたいと思いました。
Excelワークシートからビデオファイルを再生する方法は?
今回実装する流れはこちら。

具体的には,
- 動画の1フレームの色のデータをエクセルの一行に書き込み,再生するフレームの数だけデータを埋め込む
- エクセルに書き込まれている動画データを,エクセルのマクロ機能で再生する
この2つを行なっていて,1をUnityで,2をエクセルのマクロ機能を使って実現しました。
一応Twitterにその作業の様子の動画を上げてあります。
うまぴょい伝説をエクセルで描画するメイキング動画#ウマ娘 #エクセル pic.twitter.com/6VllBIXdfB
— はなちる@ゲーム制作 (@hanaaaaaachiru) May 31, 2021
mp4を読み込み低解像度化,CSV書き込み
まずmp4
と同じ解像度でエクセルに再生しようと思ったのですが、後述するエクセルの実装方法ではフレームレートが維持できませんでした。
ですのでまずmp4
の動画データを低解像度化,具体的には53px x 30px
にまで落としてます。
加えてエクセルの仕様で一度の実行でセルの書式(色を含む)には上限があるようで、RGBのデータを0 ~ 255
の30刻み(0, 30, 60, ...)になるようにしています。
それを加味した上でプログラムを記述します。
動画の再生はVideo Player
を利用し、からなずRenderTexture
を通して行うようにします。
【Unity】3分で分かるRenderTextureを使ってRawImageにカメラの映像を写す手順 - はなちるのマイノート
Video Player コンポーネント - Unity マニュアル
VBAで再生
あとは書き込んだデータを再生するだけですが、エクセルには以下のような条件がありました。
- セルの書式の書き込みは一つずつしかできない(書式が同じものは一気にできる)
- 書式の上限が設定されている
特にセルへの書き込みがボトルネックになってしまい、処理速度を一気に落としてしまいました。
そもそもCPUで処理を行なっている上に、セルへの書き込みがすごい遅いので納得といえば納得ですが、上手い解決方法を見つけることができませんでした。
それを加味した上で以下のコードを記述しました。
さいごに
Unityの使い方であったりVBAの使い方については説明しませんが、なんとなく実装の流れが伝わっていただければ幸いです。
VBAをすごい久しぶりに使ったのですが、やっぱり使いづらいかったですね。
たしかGoogleスプレッドシートにもVBAのようなこと(Google Apps Script)ができますが、あちらはJavaScript
やTypeScript
で記述することができたのでかなり使いやすかったイメージです。
今回はかなり実用性のないものでしたが、面白かったのでよしとします。
ではまた。