Unityとか備忘録サークル獏の佐藤敏がUnityとかで知ったTipsを書いておく備忘録です。2.0.5Test版を適用したものである。設定は割と単純で、眉毛貫通とかもしていない。github.comこれに、R1N4さんの顔のUVを参考にしつつ作ったOutline_Samplerを適用するとこんな感じになる。口元にあった変な線が消えた。ついでに顔の輪郭線も強弱ができた。(カラダは別マテリアルなのでそのまま)なんでそんなことをしたくなったか:後半ところがここに、自作のアレなBlendShapeを適用するとまた変な線がでてきてしまう。(口の下のところ)恐らく原因はBlenderでBlendShapeを作ったとき、ポリゴンの配置がヘンになってしまったからだ。モデリング技術がアレなのはどうにもならないし、トゥーン系の表現ならこの線さえ消えてくれればどうにか妥協できないこともない。ちなみにこの線、Outline由来なのは間違いない(Outline_Colorの色を変えるとそれに従って変わる)。Outline_Widthを0にしてもこのように残ってしまう。画像を見てもわかる通り、顔の他の輪郭線は消えたのに口の周りだけ線が残る。してみるそこで、「UCTS_Outline.cginc」をのぞいてみる(以前のバージョンでは「MyUCTS_Outline.cginc」だった模様)。試行錯誤した結果、以下のようにしたらうまくいった。(うまくいった結果を先に貼っておく)(以下の改造は自己責任でお願いします。)VertexOutputに、1つ値を追加する。};vert関数の後半をこのように変える。_OUTLINE_POSfrag関数の冒頭のこのように変える。//ここまでこれで、Set_Outline_Widthが0以下のときは頂点シェーダでdisableFlag.rに1が入る。フラグメントシェーダの冒頭でdisableFlag.rが1ならdiscardで表示が破棄される。(Set_Outline_Widthはアレコレ計算した結果の主線の太さらしい)(before→afterで再掲)その結果、↑のようにヘンな線が消えてくれる。綺麗な適切な書き方はないのかしかし色とナンの関係もないのにColorセマンティクスをムリヤリ加え、それをフラグとして使って値を放り込むというのは気持ちが悪い。if文はシェーダーを遅くする原因というのも聞いたことがある。frag関数のほうはともかく、vert関数までifを使っていいものかという疑問が残る。23:54【教えてください】頂点シェーダで非表示を決定→フラグメントシェーダーでdiscardする適切な方法Tweet広告を非表示にするもっと読むコメントを書く2018-10-12プロジェクトタブからAnimationClipをAnimatorに加えるEditor拡張アニメーション編集でVeryAnimationなどを使っているとき、操作できるAnimationClipはAnimator(AnimationController)に加えられているものだけだ。プロジェクトウィンドウにあるClipをAnimatorタブにドラッグアンドドロップすればいいのだが、地味に面倒くさい。そこで、少し汚い方法だがEditor拡張を書いてしまう。AnimationClipを追加したいキャラの名前を決め打ちで書いているのがアレだが、実用上はそこまで困らない。ところを、自分が使っているキャラの名前に変更するのを忘れないこと!このようなスクリプトを「AnimConMenu.cs」といった名前でEditorフォルダに保存する。実行手順こんなAnimatorに、この「mikarup_st006.anim」を加えたいとする。(繰り返しになるが、一回きりならドラッグアンドドロップすればいいだけである。anim-controllerというメニュー項目ができている。実行すると、たしかに「mikarup_st006」が加わった。VeryAnimationでも......VeryAnimationでもこの通り、選択できるクリップのリストに「mikarup_st006」が加わっている。選択すれば、先程のハゲ頭がやっていたポーズと同じポーズになっている。Clip」の「Duplicate」でも使えば、元のクリップを残したまま新しいAnimationClipを編集することも可能だ。anim-controllerするのでももちろん良い)メリットはプロジェクトタブで「よし、このClipを元に新しいClipを作ろう」と思ったときにAnimatorタブを選択して元々選んでいたClipを改めて選択して長距離移動のドラッグアンドドロップをしAnimatorタブをまたウラに戻す(常時開いていてもだいたい邪魔なだけでメリットがない。普通はSceneやGameタブを大きく開いているはず)とかやるのは案外面倒である。した時間の短縮だが、VeryAnimationを使っている場合はけっこう作業しやすさが増すと思う。C#スクリプトSingletonでいこう世間ではUniRxやらZenjectでSingleton祭りを脱却しよう、みたいな記事がたくさん出ている。小規模アマチュア僕たちはSingleton祭りでいいんじゃないかなという気がしてしまう。ゲームのTestは書きづらいということもあるし。MonoBehaviorのSingletonは既に色々説明記事があるqiita.comtsubakit1.hateblo.jpこのようにMonoBehaviorのSingletonは既に色々説明記事がある。「別にMonoBehaviorの機能いらないよ」という場合はコレで実装するのがどうも気が引ける。MonoBehaviorに生えているプロパティやらメソッドの数は結構なものであるし、インテリセンスで余計なものがサジェストに大量に出てくるのも微妙だ。MonoBehaviorでないSingletonを書くMonoBehaviorでないSingleton実装方法としては、普通はこんな感じだろうか。SoundManager.Instance;soundManager.Play("bong");とかすればフツーに使える。newもできないのでたしかにSingletonとして機能している。うまくいかない、SingletonBaseを継承するパターンが、毎度毎度mInstanceのどうこうを書くのは非常にめんどい。SingletonBaseとかを継承すればOKという風にしたい。}とかできれば非常にラクで見やすい。}}のように書いて継承するとエラーが起きてしまう。普通にnewできてしまう。これではSingletonではない。教えてくださいぶっちゃけ1人で書いている場合は「newしないように気をつける」「全部staticプロパティやメソッドにするよりは見やすくて書きやすいからメリットあり」ってことでコンストラクタをpublicにしたまま上記のSingletonBaseを使っていってもいいのだが、やはり気持ち悪い。Pivotで直すUnityこちらはImagineGirlsのVienneV2のfbxをBlenderに読み込み、メガネ以外を全部削除して再度fbxとして書きだしたもの。メガネだけをよそで転用したい、みたいな感じである。それをUnityに読み込んだ。見ての通り、中心点(Pivot)とメガネの中心位置が激しく違う。このまま回転させると......この通りである。これでは位置合わせがやりづらくてしょうがない。Pivot(無料)を活用する。Pivot]ができるので早速起動。Pivotのウィンドウが出てきた。今回中心を調整したいglassesの子に、位置調整用の空オブジェクトを作る。Objectのままで特に問題ナシ。Objectをメガネの中心になるように動かしていく。カメラの角度によって中心だと思っていた位置が全然違っていたりするので、カメラを回転させたりしながら確認していこう。here」を押すと......移動の中心がメガネの中心になったこのように、「移動の中心=メガネの中心」になった。最初と違って、回転させてもとんでもない動き方をしない。これなら位置調整もしやすい。Objectは削除してしまって構わない。Packageとして書き出したりすれば使い回しもしやすいだろう。位置調整を目分量でやらないところで、上のやり方はGameObjectを手動で動かしていることになる。カメラの角度によって見え方がまるで違ったりするし、結構大変だ。メッシュの中心はGetComponent().bounds.center;で得られるらしい。thethird.hatenablog.comなので、自動化することを考えた。Pivotにはこの機能は入っていないように見える......タブン。}}このようなC#スクリプトを書き、MeshCenter.csなどの名前でプロジェクト内の「Editor」フォルダに保存する。MeshCenterの実行Glassesを選択。MeshCenterを実行する。自動で作られたCenterTargetというオブジェクト。勝手に選択状態になる。さっき手動でやったのと同じように、回転の位置がちょうどよくなった。Pivot」実行前に手動で調整すればよい。小道具によっては自動計算された中心と見た目の中心がまるで違うこともある。その場合は手動でガンバルしかないだろう。Blenderからの書きだしのときの多少の注意点?メガネだけになったVienne。記憶があいまいだが、メガネは最初非表示だったかもしれない。その場合、Unityに持ってきたときMeshRendererがオフになっているので手動でメガネのMeshRendererをInspectorからオンにすること。書き出しの際はオプションの「エンプティ」「カメラ」「ランプ」「アーマチュア」「メッシュ」「その他」と並んでいるところから「メッシュ」だけ選んだ。日本語化していないと表記が違うかもしれないImagineGirlsのライセンス表記なお、今回使ったVienneV2は無料素材ではなく有料素材なのでそこは注意。Pivotで直すTweet広告を非表示にするもっと読むコメントを書く2018-08-12Unityで静止画像のアレコレ&背景透過でキャプチャしたいのに色がついてしまう場合UnityなぜわざわざUnityで静止画を静止画は透明が欲しい背景が透明にならないPostProcessingStackの代わりなぜわざわざUnityで静止画を最近のUnityは3Dキャラをレンダリングして出力するツールとしても悪くない。情報が多いアセットが多いトゥーンシェーダーが充実してきている元々ゲームエンジンなのでスクリプトで複雑な動作をさせるのがラクゲーム用に作った動きのコードを流用できるあたりが魅力的な場合は十分選択肢に入る。トゥーンシェーダーの情報が充実してきているのが大きく、これで静止画像を生成するためにUnityを始めても惜しくない状況まで来ているように思う。静止画は透明が欲しいで、動画を撮る場合は背景までしっかりレンダリングしたものをRecorderあたりのアセットを使って録画することになるだろう。静止画の場合は背景が透明なほうが使いやすいことも多い。いう意見もあるだろうが、2D画像にしてしまえば従来の吉里吉里などのゲームエンジンでも活用可能Unity2Dなどで比較的軽めのゲームを作るときに活用することもできるUnityのシェーダーでは綺麗に出しにくいクッキリした落ち影などを後で描き加えてしまうことも可能なんてメリットがある。qiita.comで、透明でもスクショを撮れる、というとこうしたコードを参考にさせて頂くのが良い感じである。こちらはMacやiOSでおかしくなることの問題を説明されているのだが、とりあえずWindowsでやる限りは最初のほうのコードでも問題がなかった。".png"とかにすれば使い勝手も良い。背景が透明にならないところが背景が透明にならないという別の問題が生じてしまった。これはPostProcessingStackを付けたままだったからで、PostProcessingStackを切り、カメラのClearFlagsをSolidColorの「0,0,0,0(完全透明)」にすれば上手くいった。Unityでレンダリングした二次画像をテキトーな背景と合成したもの。PostProcessingは切ってある。縮小した以外は特に加工なしPostProcessingStackの代わりPostProcessingStackが掛からないぶんについては、PhotoShopなどで処理すればいいだろう。dic.pixiv.net一番使うであろうブルームについては、ディフュージョンとかとかでググれば色々出てくる。アンチエイリアスは、大きめにレンダリングして最後にPhotoShopから書き出すとき小さめに縮小すれば割と問題なくなる。AO影がないのは寂しいが、Unity上でキャラの動きの完全に動きを切れば、PostProcessingStackのDebugViewsを使ってAO影だけぬきだし、PhotoShop上で合成などということも可能だ。v2だとどうなるか分からない。みたいなときには使えない。過去のバージョンがどこにあるかというと公式サイトから結構見つけづらい気がしたので書いておく。CS6使い方辞典といったサイトが詳しく掲載してくださっているので割愛する。基本的に、PhotoShopがインストールされたフォルダの「Presets¥Scripts」にjsという拡張子でテキストを保存すればよい。PhotoShopが起動中なら再起動を忘れずに。PhotoShopメニューの「ファイル」→「スクリプト」に保存した名前のスクリプトができているはずである。実際に書いてやってみるこんな感じのPhotoShopデータを使う。ファイア3炎を放つ3アイス4氷で攻撃する2ヒール2HPを30前後回復する4マグマ18溶岩で攻撃する上級魔法0シールド5防御力を50%あげる1で、上記のようなことが書かれたテキストを読み込み、スクリプトでボタンを作成する。(テキストファイルの名前は、psdファイルと同じにする)最終結果はこんな感じになる。以下のスクリプトをコピペして、js形式で保存しよう。保存できませんでした");}}MainProc();alert("終了");psdファイルを開いた状態でスクリプトを実行した結果を再掲。psdと同じフォルダに、連番で5つのPNGファイルができている。実際は出力先を違うフォルダにしたほうが扱いやすいだろう(例えばUnityのアセットフォルダの中に出力先を作り、そのフォルダからアトラスが作られるようにUnityで設定する)。慣れてきたら慣れてきたらスクリプトとpsdの構造を見比べてみよう。「group」の中に「text」「subtext」「infotext」、それから別に「fill」というレイヤーが必要な構造である。それより下のほうのレイヤーはどんな名前でもいい。スクリプトと見比べながら、自分の作りたいように改造してみると良い(スクリプトが良く分からなくても、最悪使わないとこは文字を入れなければいい)データについてはExcelで作り、テキストファイルにコピペするのが手軽だ。一応データもこちらからダウンロード可能http://cbaku.com/hatena/sample000/ui_magic.zipいちおう参考までにデータも(スクリプトは入っていない)源真ゴシックPのHeavyが入っていないとフォントが変わってしまう。古いPhotoShopでは開かないかもしれない。14:33読み込んだテキストを使い、PhotoShopのスクリプトでボタン作成Tweet広告を非表示にするもっと読むコメントを書く次のページプロフィールid:VinSatooサークル獏の佐藤敏がUnityとかで知ったTipsを書いておく備忘録です。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。