Unity

【Unity】宴のタイトル画面やらの画像変更とか

Unity

体験版の冒頭テキストは見直しと修正と。
頑張ってできるだけ面白くなるようには今回やろうと思ってる課題です。真実の中でも笑いがあるように。あとは、できるだけ笑いが入るようにという努力です。

ギャグ傾倒になりすぎないようにですけど、もしかしたら、後々の作品では起こり得る内容です。そういうのをちょっと考えてます。
早くて2作品後辺りとか。次の作品でもいいと言えばいいけど、作りたいのはあってもどうしようか悩ましい。

Unityはなんかうまくいかないなぁと思ってたら、設定してるところが間違っているとかそういう状態。
正直、宴を使ってるから他のところの説明と部分的に違うんですよね。EventSystemにアタッチしないで直接アタッチしてみたりとそういう失敗で時間の浪費。

とりあえず、コンフィグ画面に解像度変更のボタンを設置してみたりと。
ドロップダウン式は画面形式がレンダーモードのスクリーンスペースじゃないと機能してくれないことから、今の自分じゃ無理と判断してボタン形式に変更です。ちゃんと動きますし、UIも追従してくれます。

AIが書き出してくれるコードを見て設定を反映するようなコードとか、C#って本当、さっぱり分からんなぁと思って勉強してます。少しは見ていけば分かるようになるでしょ。ティラノスクリプトもそうだったし。

今は見るしかない。


Unity宴はなんとなく各画像の場所とかは分かったんですが、これって名前を合わせないとダメなんだなと思い、一応誰か関連記事を書いてないか調べたらありました。

Unityメモ – 宴でタイトル画面を設定する方法

title画像はtitleという名前にして上書きすると。
てっきり、他のでもいけるかなと思ったんですけど、同じフォルダに入れても出てこなかったから諦めた。Spriteフォルダの中に入ってないとダメなようで。

その辺の勝手がやはり国産のとは違うのだなと。ティラノスクリプトとはまるで別物。

ただのベタ塗りから背景素材画像になりました。前回と同じにしても良かったけど、まあ、今回は別のところなり、あえてこっちにしました。これやるだけでもなかなか難儀しました。

PNG形式じゃないとダメということで用意し直しだから…。

しかし、ティラノスクリプトでやってたような構成にはたして近づけるだろうか。
なかなか、難しいですね…。タイトル画面にE-mote表示させてみたりとか、色々とやるにしてもこれはスクリプト打たないとダメかも。

ティラノスクリプトが如何に簡単だったかよく分かるのと、それだけまだまだ発展途上なゆえに非力とも言えます。吉里吉里がまだ使われていたりとまだまだ。

機能的には他にないものがあったりするけど、どうしても改造必須でプログラムに慣れてないと敷居が高すぎるのと、そのパターンが表に出てこないことも要因。
実際、Unityに比べれば本当簡単ですよ。慣れちゃえばコピペでスクリプト使えるし。

で、ここからが問題。どうやったらこの画面にE-moteを表示できるんだ?

…ここから10時間以上経過。

どうにか映りました。よく分からん…。
ヒントはこれでした。情報が足らないので、Live2Dとかの情報を参考にして色々やってます。

タイトル画面に2Dプレハブを表示したいです。

レンダーテクスチャはOFFにしないと色がおかしかった。スケールサイズも800(8倍)でこうです。
作ったキャンバスサイズが大きいのもあったりもあるんでしょうけど。

問題はこれで終わったわけじゃないし、Scenarioボタンの先を1画面挟んで項目を並べるタイプなので、そこからこのモデルを表示非表示切り替えにしたいところ。
E-moteモデルが残ってるとメモリも消費してるのかどうか仕様がよく分かってないので。何よりも、Unityだと消せるスクリプトあるなら追加しないとダメかも。

E-moteは、その表示のために専用のヒープやVRAM領域、シェーダーなど様々なデバイスリソースを必要とします。
これらのデバイスリソースは通常「ひとつでもEmotePlayerがアクティブになった」瞬間に確保され、「最後のEmotePlayerが無効になった」瞬間に破棄されます。
ですが、デバイスリソースの確保・破棄はそれなりに重い処理であるため、EmotePlayer の生成とは独立して任意のタイミングでデバイスリソースの生成タイミングを制御する仕組みが用意してあります。

こうあるということは、制御されてるなら一応消えてることになってるんだろうか?解釈が微妙だけど。
うーん、スクリプトには存在はしてるけど、これを導入するとなるとなかなか難儀な。

EmoteDeviceManager クラスのオブジェクトを作成して、Load()関数、Unload()関数でそれぞれデバイスリソースのロード、アンロードを任意のタイミングに実行出来ます。
さらにより簡便な方法として、 Emote Device コンポーネントをシーン中の任意のオブジェクトにアタッチしておくことで、シーンのロードと同時にE-moteのデバイスリソースが確保され、シーンのアンロードと同時にデバイスリソースが破棄されるようになります。

API
class EmoteDeviceManager {
public void Load();
public void Unload();
public bool loaded;
};

これ追加出来ればスムーズになるってことかな。…いやー分からん…。

とりあえず、

using UnityEngine;

の下に追加してやってみたらどうなるか、試すか。

EmoteDeviceをアタッチするとかあったから、こっちか。
とりあえず追加。


using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif

[AddComponentMenu("Emote Player/Emote Device")]
public class EmoteDevice : MonoBehaviour {
  private EmoteDeviceManager mManager;

  void Start() {
    mManager = new EmoteDeviceManager();
    mManager.Load();
  }

  void OnDestroy() {
    mManager.Unload();
  }
};

背景も、一応最大解像度に合わせて用意しないとボケてしまうようです。

今の状況としては、分かった部分から手を付けたりをやって調整しているので各画面とも完成は全然です。ひとまずE-moteをタイトル画面で表示できるようになったこともあるので、あとはタイトル文字の表示とかその辺りですね。Image表示でできそうな気がするけど、そう安易じゃなさそう。

うわぁ…、頭痛い。
で、C#はAIちゃんも活用しようと思いました。本当、分からん。流れとかは読めるけど、打ち込みが分からん。問題はそこ。

処理の流れが分かっても何をどうすればいいか分かってない。読めてもダメじゃんって思ってます。

コメント

  1. TheUnsaid より:

    If it took you this long to do all this, I worry it might not be worth the effort. Especially if it’s impossible to do sound effects with the Emofuri system inside of Unity.

    Noo… at that level it’s definitely not worth it.

    I wish you the best of luck, but I hope this doesn’t get in the way of game development.