Live2Dキャラにマスク
Unityのシーン分けを進めています。
そしてシーン分けに入ったらやりたかった事が
「Live2Dのキャラクターに対してエフェクトをかける」
という事です。
これは前作でもやっていまして、加算エフェクトをかけると
こんな感じになり、乗算エフェクトだと
こうなります。ちなみにエフェクトがかかっていないと
こうなります。
今は単色でかけるエフェクトだけですが、グラデーションやテクスチャも
かけれるようになると思います・・・思いますが!!
今回は時間の関係で見送ります!
ただやはり、エフェクトの有る無しでは臨場感が全然違いますね。
でもゲーム中は夕方である事が多いため
このエフェクトがかかりっぱなしなのもちょっとくどいかもしれません。
その辺は実際にプレイして時間帯を調整するしかないですね。
さて、これ以降は備忘録的に
Unity上でLive2Dにマスクをかける方法を残しておきます。
Live2Dのロードマップに同じ機能が書いてあったため
時間が経てば標準機能になるかもしれませんけどね。
Live2Dに対してマスクをかける機能は「RawImage」を使用して
無理矢理毎フレームLive2Dマスクを読み込んでいる状態にしています。
当然「RawImage」は毎フレーム更新しているため
機能的に重い物になってしまいます。
基本的にはここに書いてあるのですが
1,Assetフォルダ内のどこでもよいのでRenderTextureを作る (Assets>Create>RenderTexture)
画像のサイズを大きくしておくときれいになる。
大きすぎると重たくなるので注意
2,Edit>ProjectSettings>Tags and Layersを開いて新しいLayerを作る
UserLayer8あたりでOK
3,MainCameraの設定、Culling Maskを先程つくったLayerのみにする。
(サブカメラの方がいいです)
4,Live2Dのモデルを選択してInspecterの右上あたりにある
Layer「Default」となってるのを新しいレイヤに切り替える
子オブジェクトの設定を変えるか聞いてくるダイアログはYesを選択
5,GameObject>Cameraで新たなカメラをつくる
(カメラが二つ必要という事で、サブをマスク用にするって意味です。
メインカメラはEverythingでいいです)
6,GameObject>UI>Raw ImageでRenderTextureに避けられてる
Live2Dモデルを移すためのをつくる
7,6で作ったRawImageのTextureの設定でRendetTextureを選択し、
いい感じにサイズをRectTransformの値をいじって整える
8,GameObject>UI>Imageなどでマスク用の画像を選ぶ。
RawImageで動的に生成してもOK
9,8でつくったオブジェクトをHierarchyで選択した状態で
Component>UI>Maskを選択し、Mask機能をもたせる
10,8のオブジェクトの子供に6を入れる。
という方法でマスクをかけています。
ちなみに今作内ではデュアルモニタの両方にマスクをかけるために
上記方法でRawImageを二つ作っています。
ディスプレイの比率が変わってしまった時にエフェクトがずれるのならば
RawImageのあるカメラの「Canvas Scaler」内の「Match」の項目を
「Height」にすればエフェクトサイズを合わせることができます。
もしより良い(軽い)方法があるのならばぜひ御享受ください!