UE4 SaveGameObjectを使った場合どこに保存されるのかメモ
セーブデータを消したくなったけど肝心の場所が分からないってことがあったので調べました
以下のドキュメントを読んでみたところ
Saved\SaveGamesに保存されるって書いてあったのですが結局どこだってなりました!
普通に作ってたら誰でも気になると思うのでAnswerHubなりにあるだろうって思って調べてみたらありました
Where are the save slots in packaged projects on Windows?
C:\Users\<ユーザー名>\AppData\Local\<プロジェクト名>\Saved\SaveGames
みたいです
実際に見てみたらありました。中身を削除したらちゃんとセーブが消えました。
この場所をエディター内で変える方法を知ってる方がいたら是非教えて頂きたいです!C++で書いてって話なのかもですが~
UE4 ShadingModelでマスクをかけてみる
PostProcessで使うSceneTextureでShadingModelって項目があるんですけど、今回はそれでマスクしてみます
なんでそんなことしたの?
先日、ArranLangmeadさんによるポストプレセスでセルシェーディングするチュートリアルが公開されました
日本語だとalweiさんやロイさんが使用している記事があります
UE4 比較的安価な手法でトゥーン(セル)シェーディングをやってみる
このセルシェーダーですがBloomなどが使えなくなる欠点がありました(なのでチュートリアルではBloomを切るように指示されています)
なのでかなり安直な考えですが、光らせたい部分だけShadingModelを分けておいてマスクすることにしました
他のアプローチはないの?
CustomDepthやCustomStencil、SceneDepthによるマスクを使うことも考えました。このセルシェーダーはSkySphereが真っ黒になってしまう問題があってそれを解決するのにSceneDepthを使いました
そのことについてはalweiさんの記事を見ると良いと思います
UE4 トゥーン(セル)シェーディングをしたいものに対してのみかける方法
ですがBloomなどのメッシュの一部分のみに対してだけとかの場合は有効な方法ではないです。そこでShadingModelによるマスクに目をつけました
ShadingModelColorを調べよう
調べる方法は2つあります。
1.ソースコードから確認する
UE4はソースコードを全てみることが出来るので勿論確認できます
DeferredShadingCommon.usfにGetShadingModelColorという関数があるのでそこで見れます
2.Debug系のノードを使ってPostProcessで確認する
調べたいShadingModelのマテリアルをでっかいCubeに適用、PostProcessでDebugのノードを使って出てくる値を見る
実際にやってみる
下の画像のにわとりくんに実験台になってもらいましょう。今回は翼の部分だけ光らせたいと思います
ShadingModelをUnlitにしてエミッシブに水色に光るように値をいれました。通常時ならば光るところですが今回は特性上光らなくなります。
PostProcessで次のように組みマスクします。
光りました!
実はSkySphereもUnlitなマテリアルを使っているので一緒に回避できます(輪郭線表示する場合はちょっと事情が違うかも…)
注意点とか欠点とか
1.ある条件下でSkySphereに黒い輪っかが出来てしまう
上の最後でも書きましたが、SkySphereをSceneDepthを用いなくてもこの方法で一緒にマスクできてしまうのですが輪郭線をいれたい時に制約が出来てしまいそうです。
マスクのタイミングによってSkySphereに黒い輪っかが出来てしまう場合があります。これを回避すると今度はエミッシブの部分の輪郭線が消えます…
ですので、SkySphereはSceneDepthを用いた方が良いと思います
2.モデルを作る段階で光らせる部分はマテリアルを分けておかなければならない
テクスチャのマスクで光らせる部分を指定する方法がとれないですね…
UE4 C++で作ったBPの実行ピンや出力ピン、戻り値を複数にする方法メモ
4.12が来ましたね!シーケンサーのサンプルにタッピーチキンが出てましたね。
今回は4.12でプラグインをビルドしてみるついでに、実行ピンや出力ピン、戻り値が複数になっているBPを作ってみたのでそれのメモです。
引数を増やすのと普通に値をReturnするのは特に意識せずに出来るのですが、実行ピンや出力ピン、戻り値が複数にするのはちょっと付け加えたりする必要があります。
下の画像みたいな感じのやつです
先に参考にしたドキュメントやAnswerHub、フォーラムのURLを貼っておきます。
How can I create Blueprints with multiple exec output pins in C++?
How do I use an Enum as function Input in C++?
How To define a function with multiple return values as blueprint in C++
実行ピンを複数にする方法
まず、実行ピン用のEnum型を宣言します。
UENUM(BluePrintType)
enum class EHogeEnum : uint8
{
HogeA, HogeB
};
こんな感じです。uint8にはしなくてもいいです。
関数自体の宣言はこんな感じです。
UFUNCTION(BlueprintCallable, Category = "HogeCategory", meta = (ExpandEnumAsExecs = "HogeExec"))
static void HogeFunction(EHogeEnum HogeExec);
大事なのは
meta = (ExpandEnumAsExecs = "HogeExec")
を指定することです。こうすることでEnum型でHogeExecという名前のがあればそれが実行ピンとして展開されます。
出力ピンを複数にする方法
実行ピンの時と同様にEnum型を宣言します。
UENUM(BluePrintType)
enum class EHogeEnum : uint8
{
HogeA, HogeB
};
次に関数の宣言です
UFUNCTION(BlueprintCallable, Category = "HogeCategory", meta = (ExpandEnumAsExecs = "HogeExec"))
static void HogeFunction(EHogeEnum& HogeExec);
実行ピンの時と違うのは型宣言で&がついている点です。
戻り値を複数にする方法
出力ピンを複数にする時みたいに宣言時に&をつけます。
UFUNCTION(BlueprintCallable, Category = "HogeCategory")
static void HogeFunction(FString InputString1, FString InputString2, FString& OutputString1, FString& OutputString2);
こんな感じです。これの場合は&のついていないInputString1とInputString2は引数、&のついているOutputString1とOutputString2は戻り値になります。
UE4 Plugin作成時に詰まったところとかのメモ書き
※解説記事ではないです。あくまでメモなのでご注意を!(多分分かったことが増えたら整理します…)
とりあえずPluginを作成したい!
historiaさんの記事がとても分かりやすかったです
[UE4] プラグインによるエディタ拡張(1) 空のプラグインを追加する
とりあえずBlueprintから呼べる関数作りたい!
とりあえずUE4 C++でぐぐったら色々出てくるので眺める所から始めました。あとはTwitterとかで見かけた名前のPluginを片っ端から落として眺めてました。
CustomGravityPluginとVictoryPluginとかいいんじゃないでしょうか?コード量がそこそこあるので深い内容までは読み解いてないですがPluginに置けるお作法的なことの雰囲気はこれで掴んだ気がします。
alweiさんの記事の
UE4 C++コードをブループリントで使えるようにする(関数ライブラリー編)
これをPluginでどうやるのか試行錯誤するのが最初はオススメです。
やっぱりプログラミングの最初はHelloWorldです(多分)
UCLASS()の()の中って何書くんだろう?
エディターで編集可能にするかとかそういうの書く所です。
UE4のドキュメントに色々ありますよ!
UBlueprintFunctionLibraryとか継承したい
必要な物を#includeしましょう。Pluginでは最初に作った時に「PCH」が末尾についてるヘッダファイルありますよね。あそこに記述してるものが多いです。
includeすべきヘッダファイルが分からない
継承したいものとか参照したいやつでググればドキュメントがひっかかるので一番下のReferencesってところのヘッダファイルの項目がそれです。
includeが上手く行かない
Plugin作った時にcsファイルがあったと思います。そこのPublicDependencyModuleNames.AddRangeの部分にドキュメントのReferencesのモジュールに書かれているやつを追加します。大体それで解決です。
ちなみにヘッダファイルを指定する時にはモジュールの名前以降の部分を追加すればオッケーです。
コンストラクタはどうすればいい?
基本的に
Hoge::Hoge(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
}
コンストラクタの引数はObjectInitializer以外にはないの?
PCIPっていうのもあります。4.6以降からは非推奨になったっぽいです。
AnswerHubに似たようなのがありました。
.generatedファイルがincludeされない
これで半日潰したこと有ります!
VisualStudioでクリーンしてからビルドする
自分のPluginのフォルダにあるBinariesとIntermediateを消してからGenerate Visual Studio project filesする
自分は今のところこのどっちかで大丈夫です
AnswerHubに似たようなのがありました
how to create only header file while exist inside include generate.h
"Generate Visual Studio Project Files" did not auto-generate generated.h header files
Blueprintで関数や変数を検索する欄で階層を分けるには?
変数や関数をヘッダファイルで宣言する時にUPROPERTYとかUFUNCTIONとかすると思うんですが、そこにCategory="AA|BB"とかすれば出来ます。「|」で区切るごとに階層が深くなります
オリジナルのActorとかActorComponent作りたい
上にもかいたUCLASSのところをちゃんと書いておくとか、コンストラクタで設定しておかないと動かない関数があったりで注意が必要
あとInitialized Componentとかが出てくるのでちょっと戸惑います。
alweiさんの記事とか
UE4 C++コードをブループリントで使えるようにする(アクタークラス編)
ドキュメントの以下の部分とかが参考になるかも?
UE4 関数vsマクロvsカスタムイベントvsベタ書き
最終更新:2016/05/07
下記のalweiさんの記事を見て、そういえばカスタムイベントとかベタ書きとかは速度差どのくらいなの?って思ったので計測してみることにしました。
では行きましょう。基本的に計測方法はalweiさんのと同じです。それでは味気ないので10回測って平均を出していきましょう。
とりあえず基本のBPはこれでLoopBodyの先に計測する対象を入れていきます。全部自動でやりたかったんですが2重ループにするとスタック云々で怒られたのでやむなくです。
関数
マクロ
カスタムイベント
べた書き
当たり前ですがマクロとベタ書きがほぼ同速度ですね!では!
キャラクターをセットアップしてUE4で使う話
現在「UE4にモデルをインポート出来る状態にする」の部分を削除しています
※自分が困った場所などのメモ書きですので分かる部分はすっ飛ばしていたりして大変分かり辛いと思いますが余裕があるときにどんどん編集していくつもりです。
※今のところ殆ど画像が無いので適宜増やしていきます。
最終更新:2015/11/28
記事の内容
・モデルにボーンを設定する(Blender)
・MMDでモーションを付けることができる状態にする(PMXEditor)
・UE4にモデルをインポート出来る状態にする(---)
使用するツール
・PMXEditor
・MMD
・UE4
モデルにボーンを設定する(Blender)
Blender内の画面構成です。
緑で囲まれた部分を上パネル
赤で囲まれた部分を左パネル
黄色で囲まれた部分を真ん中パネル
橙色で囲まれた部分を右パネル
青で囲まれた部分を下パネル
真ん中の3Dモデルがある画面をメインパネル
と今回はします(本当はちゃんと名前があると思います)
前提として既にモデルがある状態としています。今回は適当に立方体を配置して作った簡易人型モデルです。
【1】下パネル
オブジェクトモードにします。
【2】メインパネル
Shift+Cで3Dカーソルを原点に設定します。
【3】左パネル→作成
アーマチュアの太い方をヘッド、細い方をテールと言います。
【4】下パネル
作成したアーマチュアを選択した状態で編集モードにします。
【5】メインパネル
ヘッドとテールの位置関係をひっくり返します。
【6】真ん中パネル→アイテム→骨マーク
名前をセンターにします。
【7】右パネル→人型マーク→表示
名前とレントゲンにチェックをいれます。
【8】左パネル→オプション
X軸ミラーにチェックをいれます。
【9】メインパネル
センターボーンを選択します
【10】下パネル
編集モードにします。
【11】メインパネル
Shift+Dを押します。これでセンターボーンを複製出来ます。
そしてZを押します。これでZ軸を固定した状態で位置を調整出来ます。
このボーンを下半身に当たる部分に合うように調整してください。
下半身ボーンを選択したまま次に行きます。
この時1キーでフロントにしておくと良いです。というか基本的にモデルと綺麗に向き合うようにしてください。
【12】右パネル→骨マーク→親
親をセンターに設定します。
【13】メインパネル
下半身ボーンを複製して上半身の位置に持って行きます。これが上半身ボーンになります。この時、ヘッドとテールはひっくり返します。
上半身のテールを選択してEキーを押します。そうするとボーンが生えます。Zキーを押してZ軸を固定して頭の半分より少し上くらいの位置に調整します。これが頭ボーンになります。
押し出した時に自動で親が設定され、接続にチェックが入ります。
下半身ボーンのテールを選択してShift+Eで押し出します。2つボーンが出るはずです
【14】右パネル→骨マーク→関係
接続のチェックを外します(先ほど作ったボーン両方で行ってください)
【15】メインパネル
両方のボーンの位置を太ももにあたる位置に調整します。これが足ボーンになります。
どちらかの太ももボーンのテールでEキーを押してボーンを作ります。位置は膝から足首にかけてです。これが膝ボーンになります。
膝ボーンのテールからEキーを押して足首からつま先にかけてになるように調整します。これが足首ボーンになります。
再び膝ボーンのテールからEキーを押して足首からかかとを少しはみ出るくらいに調整します。これがIKボーンになります。
【16】右パネル→骨マーク→関係
IKボーンの親を消します。これは両方で行ってください。
【17】右パネル→骨マーク→骨マーク
足まわりのボーンの名前を対応するものに変えます。
【18】メインパネル
上半身ボーンのテールからShift+Eで押し出します。
【19】右パネル→骨マーク→関係
押し出した各ボーンの接続のチェックを外します。
【20】メインパネル
肩から肘に合わせる。これが腕ボーンになります。
腕ボーンからEキー押して調整してこれが肘ボーン。
肘ボーンからEキー押して調整してこれが手首ボーン。
膝ボーンを選択します。
【21】下パネル
ポーズモードに変更
【22】右パネル→骨と鎖マーク
ボーンコンストレイント追加を押してインバースキネマティクス(IK)を選択
ターゲットをアーマチュア、ボーンに対応するIKにしてチェーンの長さを2にします。
チェーンの長さを2にした理由→膝と足(つまり2つのボーン)両方をIKの動きに追従させるため
【23】右パネル→骨マーク→インバースキネマティクス
Z軸とY軸は南京錠をクリック。これでその軸には動きません。
X軸に-180°から0°の制限をいれます。
【24】下パネル
編集モードにする。
【25】メインパネル
ポーズモードで見える赤い半円が膝の後ろにくるように調整する。
IKボーンを選択する。
【26】右パネル→骨マーク→カスタムプロパティ
プロパティを2つ追加
1つ目をIKLimit、プロパティ値2、最大2
2つ目をIKLoops、プロパティ値40、最大40
IKLoopsとかは調べると出てきますので割愛…
【27】下パネル
オブジェクトモードにする。
【28】メインパネル
Shiftを押しながらモデルとボーンを選択。この時最後にボーンを触った状態にすること。
【29】下パネル
ポーズモードに変更、ポーズ→親→空のグループでの順に押す。編集モードにする。
【30】メインパネル
モデルを選択する。
【31】右パネル
逆三角形マークを押す
【32】下パネル
編集モードにする。
【33】メインパネル+右パネル
ボーンごとに割り当てたい頂点をメインパネルで選択。右パネルで割り当てする
パーツが分かれている時はCtrl+Lで楽が出来たりする
【34】メインパネル
モデルとボーンを選択
【35】上パネル→ファイル→エクスポート
pmxでエクスポートします。
MMDでモーションを付けることができる状態にする(PMXEditor)
【1】編集→ボーン→全ての親追加
【2】表示枠を編集
【3】上書き保存
【1】モーションを付ける
【2】VMD形式でモーションを書き出します
キーフレームを全部選択してから書き出すのを忘れないで下さい!(1回目)
キーフレームを全部選択してから書き出すのを忘れないで下さい!!(2回目)
UE4にモデルをインポート出来る状態にする(---)
----
----
----
【1】UE4のコンテンツブラウザのインポートを押して先ほど作成したfbxファイルをインポートして下さい。この時アニメーションをインポートするようにチェックを入れて下さい。
以上でUE4で使えるようになりました。