Unityとか備忘録サークル獏の佐藤敏がUnityとかで知ったTipsを書いておく備忘録です。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では開かないかもしれない。乱暴に、レイアウトも雑に始めてしまえスクリプトを書く何が嬉しいのか?乱暴に始めた後はレベルアップを乱暴に、レイアウトも雑に始めてしまえUnityEditor拡張は沼だとか言われるし、入門ページでも結構導入とかレイアウト操作を丁寧に書いているので難しそうに見える。乱暴ながら一応使い道がありそうな奴を。Cubeを置いただけのUnityプロジェクト。Editor拡張は「Editor」という名前のフォルダの中に作らないといけないので、フォルダ作成。スペルミスしないように注意スクリプトを書くEditorフォルダの中に適当な名前でC#スクリプトを作る。そのファイルの中に以下をコピペして保存。}}Unityに戻りコンパイルが行われる。すると、Windowメニューにプログラムの6行目に書かれた名前の「PosMove」という項目ができている。それを選ぶとこのように「TestEditor」という新しいウィンドウが現れる(変な場所に出ることもあるのでよく探して)。X+を押すと選択中の物体のXが0.1ずつプラスされていく。何が嬉しいのか?この程度ならCubeを操作パネルからマウスで動かしても同じだ。0.1ずつ微調整したいなんて時には使い道がある。最大の違いは、SceneウィンドウでもGameウィンドウでも(つまりゲーム進行中でもSceneに戻らずに)使えるという点だ。スクリプトで書けるので複雑なこともできる。「他のオブジェクトと合わせる」「Yだけ0にリセット(≒床に下ろす)」とか。GameObject.Find("Game").GetComponent<GameManager>()game.PlayBGM("エンディング");game.ChangeScene("エンディングシーン");とかすることでデバッグを便利にすることもできる。乱暴に始めた後はレベルアップをもちろん今回のはEditor拡張の初歩の初歩で、本当は細かいレイアウト機能や、ユーザーに数字を入力させてボタンを押したときに活用する機能など色々なものがある。その辺はすぐれた入門ページがたくさんあるので、そちらで勉強を。anchan828.github.iocaitsithware.comqiita.comただ、乱暴に「ボタンを置いて、それを押したらなんか処理してくれる」だけでもEditor拡張は普通に便利だからどんどん活用していこう。C#スクリプトどーんと派生クラスの一覧を得る便利なコード自分用の使い道を考えるスクリプト部分どーんと派生クラスの一覧を得る便利なコードesprog.hatenablog.com@es_programさんのこういった記事がある。自分用の使い道を考えるで、使い方として考えたのが、例えば「色々なボイス反応を返すクラスのインスタンスを全部自動生成して、辞書からアクセスできるようにする」っていう形。良い使い方でもないかもしれないが、調教SLGとかだと「パラメータで色々分岐するのでExcelの表みたいなので完全管理は難しい」ケースがあるのでこんな感じが割と使い勝手良かったりする。objectとかにアタッチして実行すると、こんな実行結果が得られる。いいやり方があってもご愛敬。