いつまでもプロトタイプ

映画やアニメ、エロゲ、AVなどなどエロネタ中心に扱ってます。

<お知らせ>
作ったもの(プラグインしかないけどw)を置いておく場所を変更しました。
一部記事にてリンク切れが発生しておりますがワタクシめ修正する気がないようです。
おなじみのアップローダーを借りたので、今後はこちらから奪ってやってください!
http://ux.getuploader.com/moistened_eye/

カテゴリ: ゲーム

272


珍しく(?)ちょっと真面目にプログラミングの勉強中・・・

ある時からのShortcutsシリーズや特にAddDBColliderとかは処理が重くなってた。

きっと、スタジオでキャラをぐりぐり動かしていると毎秒突っかかるような症状が出る人がいるのではないかと思います。いや、確実にいます。例えば俺。

うちのPCは非力でね、3Dゲームをするにゃちょっとギリギリなんじゃないかと思うほどに。
だから、ちょいとカクつくくらいは致し方なし、と。そう思ってた。

けど、もう少しスペックの高いPCでも同様の突っかかりが出ることに気づいたのさ。

そして、「あぁ、これ自プラグインの作りが悪いのね・・・」という結論。知ってたけど。


というわけで

・ShortcutsKoi
・AddDBCollider
・SceneDataLoader

の3つを更新。

ShortcutsKoiとAddDBColliderは主に軽量化。
毎秒引っかかるような動作がなくなった(はず)なので、うちのような低スぺPCでも少しは快適になった気がするよ。

ただ、極々、極稀にシーンデータ読み込み中にAddDBColliderが原因でゲームが止まるかも。
稀にしか発生せず、原因はわかっているつもりなのに、完璧な上手い回避策が打ててないかもしれない。
1%程度の発生率かと思うし、さっきは100回ほどシーンデータ読み込んでも大丈夫だったので、多分大丈夫だと信じたいけど、ちと不安・・・
ま、ゲーム再起動で済むので、個人的には許容範囲、ってことでw

また、SceneDataLoaderは環境依存かもしれないけど「2回に1回の割合でマップが読み込まれない」という不具合があったので、直した。


はい、今日の更新はこんな感じです~


273






さて、今回の「毎秒動作が引っかかる」という症状、このおかげでだいぶ勉強になったので備忘録のように下記に残しておこう。
尚、illusionのゲーム(コイカツ)で使われているUnityは5.x系なので、それ以降のUnity2017やUnity2018には当てはまらない部分あり。

・UnityはメインスレッドでしかAPIが使えない
・重い処理や時間のかかる処理は非同期処理のできるコルーチンを使おう
・このコルーチンはメインスレッドで動いているよ
・なのでコルーチンの一つの処理が1フレーム分の時間を超えると処理落ちするよ
・処理落ちを引き起こすようなものは別スレッドで動かそう(ただし、UnityのAPIは使えない)

とまぁ、何か重い処理をやらせるにはコルーチンやらスレッドやらを利用するのが良いらしい。

そして、コルーチンまでは(間違いや勘違いが多いにせよギリギリ)使えていた。

ところが、どう頑張っても3番目の「たった一つの処理で1フレーム分の時間を超えてしまう」処理というのがあって、コルーチンでは対処しきれないケースがある。

・・・まぁ、

UnityEngine.Object.FindObjectsOfType<GameObject> とかやってんじゃねーよ!

というのが本来の結論なんですが・・・

そこを敢えてスレッドを使うという方法で何とかしてみる。

で、今のイリュゲはUnityの5.x系なので使えるのはThreadクラスまで。

Unity2017以降だとC#5.0で使えるようになったasync/await、.net4.0で導入されたParallelクラスが利用できる。(今回のケースではParallelクラスは使えたとしてもあまり意味ないけど)


さてさて、イリュゲは上記の通りThreadクラスまでなのでどうするか。


void Start () {
  thread = new Thread(HeavyMethod);
  thread.Start();
}

void HeavyMethod() {
  なんか重い処理
}

void OnApplicationQuit()
{
  if( thread != null){
    thread.Abort(); 
  }
}


といった感じで基本的にはOK

これで今回生じたカクつきとはおさらば!


しかし、なるほど、AndroidやらWindowsのフォームアプリ、WPFなんかでもメインスレッドとは異なるスレッドからは(基本的には)UIいじれないアレと似たようなもんか。

わかったような、わかってないような・・・w

次のイリュゲあたりからはasync/awaitが使えるバージョンになるのかしら?

266


謎の忙しさ、謎の体調不良、そして謎のネットワーク障害。

そんな合間にせっかく時間ができても今のPCでは何をするにしても遅い・・・

PlayClubに出会うまでは、グラフィックボードなんてオンボードで十分だったというのに!

当初は「これでも十分イケる!」と思っていた道具たちだけど、なまじ経験を積んでしまったからなのか「もうこの程度じゃイケない身体になちゃった・・・」

9月は3連休が2週にわたってあるわけで、なんとしてもそこを休めるようにして、PC環境刷新するかね。


SSは、キャラメイクのできるゲームでは必ず1度は作っていた例のキャラを、コイカツでは作ってなかったので、取り急ぎ作ってみた感じ。

あまり突き詰めるつもりもなく、これで完成としちゃうところ。

それよりも、ここ数日不安定だったのに、今日はなぜかネットワーク(ルータ)の調子が良く、安定しているのでブログを書いてみたわけです。

それだけで、満足しちゃったので今日はここまで~



267

249


まずはお断りを。

いくつかプラグインを更新したのだけど、例のごとく飲みながらやってます。
そのため、デバッグ作業は適当だし、増えてきたMODのすべてに干渉しないようにする作業なんかは、超適当です。いや、むしろやってないと言った方が正しいでしょうw

なので、私の作るプラグインに関しては、どうぞ寛大な心をご用意いただいたうえでお試しください。

ま、ファイルの書き換えみたいなことは基本的にはやってないので、ゲームをいったん終了して再度立ち上げれば何かあっても復帰するものです。
(逆に言えば、これが諸々の処理結果がシーンデータに反映されない理由かも?)

そんな感じで、いろいろ緩い感じでやってるので「使えねぇ~」と思ったところは、緩い感じでコメントいただけると、緩い感じで治していくかもしれません。


さて、今日のサザエさんは以下の通りのお話です。



ShortcutsKoi

・再生速度調整にスライダを追加

今まではボタンを押すことで、ある決まった速度にしか変更できませんでしたが、スライダ方式も追加したので任意の速度に変更が可能になりました。
(数値をテキストボックス内で直接指定することも可)


・ターゲット表示切替

メニュー表示方式を変更。
カーソルを左側に持っていくと表示する方式から、「TAB」キーで表示・非表示を切り替える方式に。
また、ウィンドウ位置は固定だったものを、ドラッグ&ドロップで移動可能に。


・アイテムカメラ&スクリーン

任意のアイテムをカメラ化&スクリーン化
カメラには「スフィア(通常)」を、スクリーンには「平面(通常)」を使うのがおすすめ。
もちろん他の組み合わせも可能なので、そのアイテムの形状や色をうまく使うと面白くなるかも。

基本的な手順としては、
カメラにしたいアイテムを選択→ShortcutsKoiでカメラとして設定→スクリーンにしたいアイテムを選択→ShortcutsKoiでスクリーンとして設定
(もう少し下の方で画像で説明しているので、そちらも参照のこと)
といった感じで。

カメラはおそらくどのアイテムでもできると思う。
(カメラコンポーネントをアタッチしたGameObjectとアイテムのGameObjectは完全に別物なので)
けど、スクリーンとして使えるのは一部のアイテムのみ。
スクリーン化できないアイテムでは「スクリーン化する」のボタンは出ません。
なので、「スクリーン化する」のボタンが表示されない場合には他のアイテムでお試しを。
「画像板」が使いやすそうかと思ったけど、シェーダーに透過処理が入ってるので他のアイテムとの相性が良くない。
ざっと試した感じでは「平面(通常)」あたりが使いやすいんじゃないかな。
逆にそこそこモニタ化できそうなアイテムはあるっぽいので、アイデア次第ではいろいろできるんじゃないかな~?・・・たぶん。
(オブジェクトがRendererというコンポーネントを持っていればモニタ化できるので、Rendererコンポーネントを持っているアイテムをリストアップすべきか・・・)

尚、アイテムの色や柄なんかも使えるので、ほんとアイデア次第では化けるんじゃねーかな、この機能・・・

以下、画像で設定の説明。

・とりあえず、マップとキャラ、スフィア(通常)、平面(通常)を読み込んだ状態
245


・次にスフィア(通常)をカメラ化。映像には特に変化はない。
246


・平面(通常)をスクリーン化。この時点で変化が現れる。
247


・平面(通常)だとカラーや柄、柄の色が変更できるので好きにして!
248


尚、標準のカメラにアタッチされているエフェクト関係は反映されていません。
今のところできない、というのが私の実力的な正直なところなのですが、幸い、イリュのデフォルトカメラが良きに計らってくれるので、このアイテムカメラ&スクリーンでもそれほど違和感はないんじゃないかな?と思うところではあります。

ただ、アウトラインが目立つんだよねぇ・・・(グビグビっと焼酎をあおりながら)


・ShowMe

「首操作」や「視線」で「カメラ」にすると、常にこっちを向いてくれる。
それはそれでいい。
けど、距離が離れていたり、カメラがキャラの方を向いていないときには、別にこっちを向いてなくてもいい。
逆に、距離が近づいたり、カメラ(俺の視線)がキャラの方を向いた時、あっちを向いてたのにこっちを向いてくれるようなしぐさが再現できたら、なんか自然な感じがすると思わないかい?
自分がキャラを見たとき、その視線に気づいてこっちを向いてくれるのさ。
と思って作ったけど、これ、VR環境じゃないとよくわかんねw
そして、うち、VR環境ねぇわw
とりあえず、ベクトルの内績とか外積とか調べてたらこんなんができた。
・・・はぁ、つくづく、高校の頃の数学(代数幾何?)を真面目にやってれば良かったと思ったよw



InvisibleBody

キャラクタの抽出処理がアバウトすぎたので少しだけ改善。
とはいえ、コードに2,3行追加しただけなので、実質あまり変わっていないという・・・
けど、なんか致命的なバグはこれだけでなくせたんだからね!(たぶん)




ふぅ、結局、4時になっちゃったじゃねーかw

そして、魔王を倒した!!

・・・あ、焼酎の魔王ね。

・・・もう少し楽しめると思ったんだけど、酔った時の勢いって怖いね~

240


コメントいただいている皆様へ。

え~、まずは手間のかかりそうなマルチカメラから手を付けようかと思い、作業を始めたら本当に手間がかかるっぽい。
そして、途中で作業が止まってしまい、ただいま難航中です。

そのため、他の部分も引きずられてしまい、思うようにはかどっておりませぬ・・・
そんな感じなので、もう少々お待ちくださいな。


で、そんな中、としあき集会の過去ログを読んでいたら「透明リングがない!」といった書き込みがありました。
「マジか!?」と思ったのですが、確かにないような・・・?

着替えのシーンなんかじゃ必須だと思うんですよね。

というわけで、気分転換ではないけど、「透明リングと同じものは作れないけど、プラグインでそれっぽくはできるかな」と思わず始めてしまったのが今日のトピック。


はい、とりあえず、完成したので倉庫へアップロード。

シーンデータには反映されないという、いつも通り半端な仕様ですが、まぁ、そこは「いつも通り」ということでお許しを。

さて、使い方は簡単。

「スフィア(通常)」を透明にしたいキャラの「頭中心」に親子付け。
「M」を押してメニューを立ち上げ、ボタンを押すだけ。


241
※敢えてスフィアは表示してます。

アクセサリの表示も切り替えられるよ~

242


243


何かの足しになれば、ということでどうぞ~



ところで、LINQってすごいね。

Resources.FindObjectsOfTypeAll<GameObject>()

は配列で返ってくるので、今までだったらそれをForeachで回して"ABC"という名前のオブジェクトを抽出したりしてたけど、LINQだと

Resources.FindObjectsOfTypeAll<GameObject>().Where(n => n.name == "ABC")

で済む。
うわぉぅ!

var rigs = from go in Resources.FindObjectsOfTypeAll<GameObject>()
           where go.activeInHierarchy
           where go.GetComponent("Rigidbody")
           orderby go.name
           select go;

みたいな感じでクエリ構文でも書けて、ラムダ式に慣れるまではこっちで書いてた。

これはもう、極力foreachで周すのは避けたくなってくるね。


さて、暑い日のビールもうまいけど、エアコンでガンガンに部屋を冷やし、キンキンに冷やした焼酎もうまい今日この頃。

皆さま、熱中症には気を付けてお過ごしくださいな。


222


当初、「DynamicBone」でコンポーネント検索かけても出てこなかったので悩んでたんですが、
stinger722さんのブログエントリで「DynamicBone_Ver02」というコンポーネント名だと言うことを知り、解決した。

そして、併せて、SB3Uの使い方も勉強になったり、いろいろ学べてしまったよ。
ありがたい記事です。

で、やりたかったことができました。


<参考動画 in Twitter>


てことで、とりあえず出来上がった AddDynamicBoneCollider なる機能。

倉庫に保管してありますので、大まかな説明はそっちのReadme.txtをご参照のこと。

要はアイテムのスフィアに当たり判定付与して、そのスフィアをグリグリと動かすと、おっぱいやお尻に当たったときにポヨンポヨンするよ、という機能ですな。

ストレス解消にも効くんじゃないでしょうか。

最初のオススメは画像のようなおっぱいに2つのスフィア。


223

スフィアは純正アイテムで「anim」の項目から透明度を変更できるので、実際には透明にした方が良いかと。
まぁ、それでも移動や回転のガイドが邪魔っちゃぁ邪魔なんですがね・・・

そんな時は、フォルダ(画像では胸コライダーや尻コライダー)を親にして、その中にスフィアを子として持たせます。
この親子付けの時、フォルダの位置を上下や左右にちょっとオフセットしてやると、ガイドが邪魔にならなくて良いかな。

225


あと、お尻ももちろんポヨンポヨンで、こっちもやっぱり2つスフィアを置くと良いのでは?

224

で、SSは撮ってないけど、ディルドの親にギミックのピストンを設定して、ディルドにはスフィアを子供として持たせる。
それを前からでも後からでも出し入れすると、お尻の揺れ具合が結構強調されてエロいかも。

ギミック振動+スフィア→おっぱい とかもいいかも?

騎乗位のアニメーションで、適当な位置にこのスフィアを置くと、胸の揺れが更にダイナミックになったりね。

そんな動的な使い方はもちろん、静的な使い方もあり。

FKでの胸の操作ってなんか自由度低いんだよね。
回転だけだからか、なんか押されてる感に欠ける。
これがスフィアで面倒見てあげると良いおっぱいが仕上がるかもしれません。


やりたいことができたという満足感と、実際、ちょっと考え事や手持ちぶさたなときにポヨンポヨンしてると気分転換というか気が紛れるというかで、結構楽しいw

オススメです。

このページのトップヘ