Unity 2Dライトについて

お久しぶりです。またもやガナリヤです。
最近はバイト先でうまく教えられなくて辛い毎日です。
もっとうまく教えたいものですね・・・・

現在けもふれパズルのリファクタリングを行うためのクラス構造を考えており、することが特に今はないため、Unityを再び触っています。
去年はC#の基礎と、使い方もわかっていないのに、インターフェースとかTのtypenameとかをやってたためUnityがさっぱりわかってませんでした。
今、久しぶりに触ってみると多少わかるようになっており、時間が立つのは早いものだと感じました(もう三年生になってしまうのですね・・)

Unity2Dにおいて、画像を光らせる方法を模索したので自分用にここでまとめておこうと思います。

1.Post Effect
現在のUnityのバージョン2017では、画面に行うエフェクトを使うためには、Unity公式が配布しているunity post processing stackというアセットがあります。
これは、調べたところによると、Unityのエディタでフレームとして出力したあと、post Processing stack が、それを更に加工して出力しています。
つまり、出来上がったものをさらに、調味料とかを入れて完成させているわけですね・・・(わかってない)
使い方としては、
1.アセットのダウンロード
2.メインカメラにPost Processing Behaviourをアタッチ
3.プロジェクトのcreateからPost Processing Profileを作成
4.PostProcessingProfileをメインカメラのPostProcessingBehaviourにアタッチします。
これであとは、PostProcessingProfileをちょちょっと弄るだけで、いろいろな画面エフェクトが行えるというわけらしいのです。
今回は、Bloomを使用しますが、それはこのあとに記述していこうと思います。

2.Emission
Unityには
・シェーダー
・マテリアル
と言うものがあるらしいのです。
シェーダーは、Unity内のゲームオブジェクトのレンダリングの際に、どのように表現するかを記述するらしいのです。(表面をどれくらい光らせるか、模様はどうするかなど・・・)
マテリアルは、シェーダーやSpriteなどを含み、ゲームオブジェクトの属性としてアタッチする際につけるらしいです。
つまり、マテリアル=シェーダー+テクスチャ+色とか・・
の上記の式が成り立つはずです。

そして、EmissionはシェーダーであるStandardSharderの項目に含まれており
「その物体がどのくらいライトを反射し、他に影響をあたえるか」
を表しています。
Emissionが高いほど、自分の色を光らせて周囲の物体に影響をあたえることができるのです!(3D)

ん・・・・・?Diffuseシェーダーとは何が違うねん・・?

調べたところによると、
Emissionは、他にライトがなくてもある程度光る(自分の持つColor+Emissionのため)
Diffuseは、他にあるライトを反射して、初めて光る
という違いのようです。

このEmissionとDiffuseというシェーダーを使えば光らせられる!
・・・と思っていた時期が僕にもありました。
3Dではこの方法でうまく行ったのです・・・
しかし、2Dでは、ライトのレンダリングの関係なのか
EmissionでもDiffuseでも、オブジェクト自体のみが多少光り、他の物体に何も影響を与えます!
ああいけません!(ピングー)

そこで次の方法を考えました。

3.Point Lightを使う
 結局ライトを使えばよいのではという発送に至りました。
Unityではライトを簡単に使うことができます。
Create→Lightで自分の好きなライトを選択すればシーンに配置されます。
Lightの種類はたくさんありますが、だいたい使うのは2つです。
一つ目はDirectionalLight、これは太陽光などの、どの角度なのかはあまり関係なく、シーンに配置すれば、すべての場所が明るくなります。基本光りとして使えますね・・
二つ目は、PointLight、これは、懐中電灯などの、ある一定の範囲のみを明るくするときに使用することができます。

PointLightを使えば特定のものを明るくできる!
そう思っていたじk(ry

僕の作りたいゲームはスマホ向け・・・
しかも、PointLightを多分50個ほど生成することになります。
これは無理だぁ・・・

4.Emission+PostProcessingEffect
最終的にこの内容に至りました。
シェーダーの項目であるEmissionと、PostProcessingに含まれているBloomを使用します。

まず、Emissionを1以上に設定してオブジェクトを白く光らせます。(この時、エディタ上では、HDRと表示されます。HDRは、物体の表示するRGB(255,255,255)の明るさの範囲を超えているよ!、という意味で、HDRにすることで、普段は表現できない明るさを表現することができます。この表現できない明るさが、他の物体に影響を与えるということらしいです(3D))

Emissionを利用することで、オブジェクトが少し白く光りました。
そこにPostProcessingのBloomを使用します。
Bloomは、すでに描画されたフレーム内の白色に近い部分を抜き取り、白色の部分をぼやかして乗算することで、まるで光っているような表現を行うことができます。
Intensity(光の強さ)やtherouseなんとか(光らせる白色の閾値)を設定することでどのぐらい光らせるかを決められます。

Emissionでオブジェクトを少し白く光らせ、Bloomでそれをぼやかすことで、まるでオブジェクトが自分で発光しているかのような表現を行うことができそうです。
この方法で新しいスマホゲームを作ってみようと思います。

わかりづらい記事かつ、情報もあやふやですみません。Unity初心者のため、まだ仕組みがよくわかってません。
いずれ画像も追加していこうと思います。

つたない文章でしたがお許し下さい!
ガナリヤでした!

けもフレパズル体験版

 

ついに12月になってしまいましたね・・・今年ももう終わりですか・・
まるで成長していないガナリヤです

10月後半から作り始めていたけもフレパズルというゲームがようやく体験版として形となったので紹介させて下さい。


このゲームは上から降ってくるブロックをお互いに落とし合いフレンズのみんなで切磋琢磨し合うというパズルゲームです(まだ博士とミミチャンしかいません・・・悲)
最初は、ブロックを落とす前に、自分でブロックを組み合わせて自分でブロックを生成するというゲームだったのですが、コレが非常にプレイしているときに不快に感じ(なぜ気づかなかった)
なかなか考えることが出来ないゲームになってしまいました・・・
そのため、ブロックを一つずつしか落とせないように変更しました
すると、階段積みで安定勝ち出来るようになってしまいシステムのガバガバさが露呈してしまいました。

今回のコミケではこちらの動画のバージョンが含まれると思います。
なんとか、次回のコミケまでには
・GUIの強化
・CPUの作成
・システムの根幹の改善
・ストーリーの作成
を頑張っていこうと思います

今年の一年生は非常に真面目な方ばかりで、既にクオリティの高い作品が続出しています(しゅごい)
止まるんじゃねえぞ・・・

ガバガバ落とし穴

お久しぶりです
TNPのガバ担当ガナリヤですぞ
最近良く思うですが、ガナリヤのブログの書き方とか、キャラがブレブレですね・・

今回書こうと思ったのは、プログラミングでのクラスで、
参照自体を返すメソッドを作ればいいというのをすっかり忘れていたからなのでした・・・
奥底にあるクラスメンバからひっぱりだすために
どんどん細かいクラスメンバにget(),set()を全て作っていました・・
無茶苦茶めんどくさいし、クラス構造がガバガバになってしまう・・(手遅れ)
その時、サバニキのありがたい言葉を思い出したのです。
「クラス内のメンバの参照を返すメソッドがあるんやで」

・・・ファ!?
やべえよやべえよ(C++の使い手への厚い尊敬)サバニキの言葉を忘れないようにソースを自分なりにまとめようと思います

 


class A{
public:
     void getReferenceB(){
          return b;
     };
private:
     B  b;
};

class B{
private:
   int b;
};

参照を返せるメソッドを作っただけで、ソースコードが大分スッキリになりそうです!
リファクタリングとエラーまみれや。

ガナリヤでした!