こんばんは!
お久しぶりです、ngs_projectです。


最近、更新が滞っていて久々の更新になってしまいました。

便りが無いのは良い知らせと昔から言いますが
真面目にイケセンを作っていた事もあって、
ちょっとブログまで手が回っていなかったのが正直なところです。
楽しみにしてくれていた方々、お待たせしてしまい申し訳ありませんでした。


今日は久々なので色々とてんこ盛りの内容です。


yuge0


いきなりですが、まずはこの画像を見てください。
本編のとあるタイミングでお風呂場のシーンがあるんですよね。

一般的なゲームなら半裸なキャラクターが見れて
ちょっとキャッキャウフフできるポイントですが、
幸い(?)イケメン千秋楽では日常的に半裸なので、
何の違和感も無く、お風呂場のシーンが作成可能です。


ただ、いくら日常的に半裸とはいっても
流石にそのままの格好でお風呂に入るのはまずいです!
色んな所から怒りの連絡が飛んでくること間違いなしなので、
何とか誤魔化せないかなーと試行錯誤してみました。


yuge8

まず試してみたのは、単純にキャラの位置を下げるという方法です。

う・・・うーん、なんだろう・・・、これは・・・。
お風呂に入ってるというよりも「お風呂に入っていることにしておいてね」
という感覚がすごいですね。
とっても制作者都合を感じる手法なので、この方法は却下しました。





yuge1

色々と考えた結果、やっぱりこの画像の赤い線で囲った場所辺りに、
白いモヤがあるのが一番しっくりきそうです。

あれです、あれ。深夜アニメでブルーレイになった途端に消える白いモヤです。


というわけで試しに作ってもらったのが
下の画像です。


yuge2

モヤ多すぎぃっ!

イケメン千秋楽ではUnityというエンジンでゲームを作っていますが、
グラフィッカーが日常的に使っているフォトショップ等のソフトとでは
色々と差異があるため、一発目ではちょっとモヤが強すぎました。

これではもはやドライアイス温泉です。

というわけで、調整してもらったのが下の画像です。


yuge3


完全に全裸

いつもの立ち絵と全く一緒ですが
非常に怪しげな白いモヤを足すことで、どうみても全裸に見えます。
すごい・・・すごいよ、白いモヤの力・・・。
深夜アニメでこの演出が多様されるのも納得です。
※モヤの有無で右端の結城君の表情が違った意味で受け取れそうなのが怖いところです。


yuge4

UIが付くとさらに自然に。
どうみてもコレはお風呂に入る全裸の若者達ですね。





画像だと分かりづらいので、動画にしてみました。
何気に湯気が立ち昇っているのがお分かりいただけるでしょうか?



湯気の立ち上りはUnityで以下の
プログラムを作って操作しています。


以下からいきなりめちゃくちゃ真面目な内容になるので
記事内での温度差が半端無いことになってますが
プログラムって何なの?って人がほとんどだと思うので
そういう人はササっとすっ飛ばしちゃってください。
using UnityEngine;
using System.Collections;

// 単方向のUVアニメーションをサポートする. // ChangeSpdSecMin~ChangeSpdSecMax秒につき、.
// UVアニメーションの速度をSpeedMin~SpeedMaxの範囲で変える. public class EffectSteam : MonoBehaviour { // 湯気の方向. public enum Direction { Up, Down, Left, Right, } // 方向 public Direction SteamDir = Direction.Up; // 最低UV速度. public float SpeedMin = 0.0001f; // 最高UV速度. public float SpeedMax = 0.0005f; // 速度切り替える最低秒数. public float ChangeSpdSecMin = 1.0f; // 速度切り替える最高秒数. public float ChangeSpdSecMax = 3.0f; // UV速度. private float mUVSpeed; // 速度切り替える用の秒数. private float mChangeSec; // タイマー. private float mTimer; // 操作対象のマテリアル. private Material mTargetMat; // ------------------------------------------------------- // Use this for initialization // ------------------------------------------------------- void Start () { mTargetMat = renderer.material; changeRandomSpeed(); } // ------------------------------------------------------- // Update is called once per frame // ------------------------------------------------------- void Update () { if( mTargetMat == null ) { return; } // 方向分ずらす. Vector2 ofs = mTargetMat.mainTextureOffset; switch( SteamDir ) { case Direction.Up: ofs.y -= mUVSpeed * Time.deltaTime; break; case Direction.Down: ofs.y += mUVSpeed * Time.deltaTime; break; case Direction.Left: ofs.x -= mUVSpeed * Time.deltaTime; break; case Direction.Right: ofs.x += mUVSpeed * Time.deltaTime; break; } // 念のため0.0f~1.0fの間に収める. if( ofs.x > 1.0f ) { ofs.x -= 1.0f; } else if( ofs.x < 0.0f ) { ofs.x += 1.0f; } if( ofs.y > 1.0f ) { ofs.y -= 1.0f; } else if( ofs.y < 0.0f ) { ofs.y += 1.0f; } mTargetMat.mainTextureOffset = ofs; // タイマー更新. mTimer += Time.deltaTime; if( mTimer > mChangeSec){ mTimer -= mChangeSec; changeRandomSpeed(); } }
private void changeRandomSpeed() { mUVSpeed = Random.Range( SpeedMin, SpeedMax ); mChangeSec = Random.Range( ChangeSpdSecMin, ChangeSpdSecMax ); } }


こんなプログラムを書くことで、立ち昇る湯気を表現することができました。
めでたしめでたし。



【おまけ】

yuge5
うっかりタイトル画面に湯気を出してしまいました。
いかがわしいゲームに早変わりです。



yuge6

どんな場面でも呼び出せるので、いつものあの場所がすぐに温泉地に。



yuge7

間違えて色のパラメータを触ると一瞬でホラーゲームに・・・。





というわけで、今日もイケメン千秋楽は冬コミに向けて絶賛制作中です。
それでは来週もよろしくお願いします!