diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml new file mode 100644 index 0000000..fdf478c --- /dev/null +++ b/.github/workflows/gh-pages.yml @@ -0,0 +1,33 @@ +name: github pages + +on: + push: + branches: + - main + +jobs: + build-deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 23 + + - name: Build + env: + TZ: "Asia/Tokyo" + run: | + cd ./book + npm i + npx honkit build + + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./book/_book + publish_branch: gh-pages + user_name: 'ai[bot]' + user_email: '138105980+yui-syui-ai[bot]@users.noreply.github.com' diff --git a/book/CNAME b/book/CNAME new file mode 100644 index 0000000..2ee01e9 --- /dev/null +++ b/book/CNAME @@ -0,0 +1 @@ +ue-book.syui.ai diff --git a/book/README.md b/book/README.md index d11d5d4..e269297 100644 --- a/book/README.md +++ b/book/README.md @@ -2,4 +2,4 @@ # Unreal Engine 5 Guide Book -download | web +download | web diff --git a/book/SUMMARY.md b/book/SUMMARY.md index 7f14d2e..abd91be 100644 --- a/book/SUMMARY.md +++ b/book/SUMMARY.md @@ -5,6 +5,22 @@ * [version](default/00_version.md) * [start](default/01_start.md) * [install](default/02_install.md) -* [gas](gas/README.md) - * [custom](gas/00_custom.md) + * [tips](default/03_tips.md) +* [game animation sample](gas/README.md) + * [キャラクターを追加する](gas/01_character.md) + * [飛びつける高さを増やす](gas/02_jump.md) + * [キャラクターの見た目を変える](gas/03_vrm.md) + * [モーションキャプチャで動かす](gas/04_vmc.md) + * [揺れものを設定する](gas/05_kawaii.md) + * [カメラワークの設定する](gas/06_camera.md) +* [control rig sample](crs/README.md) + * [CRでキャラクターを動かす](crs/01_character.md) +* [city sample](city/README.md) + * [海の境界を消す](city/01_remove.md) +* [json blueprint utilities](json/readme.md) + * [apiから情報を取得する](json/01_varest.md) +* [有料アセット](plan/README.md) + * [superhero fligth animations](plan/01_flying.md) + * [ultra dynamic sky](plan/02_uds.md) + * [ocean waves](plan/03_ocean.md) * [end](end/README.md) diff --git a/book/city/01_remove.md b/book/city/01_remove.md new file mode 100644 index 0000000..ba88473 --- /dev/null +++ b/book/city/01_remove.md @@ -0,0 +1,5 @@ +# 海の境界を消す + +海には境界があってそれが惑星システム(planet system)を構築する際に邪魔になるので消します。 + + diff --git a/book/city/README.md b/book/city/README.md new file mode 100644 index 0000000..32e8d33 --- /dev/null +++ b/book/city/README.md @@ -0,0 +1,4 @@ +# city sample + +[city sample](https://www.unrealengine.com/marketplace/ja/product/city-sample) + diff --git a/book/cover.jpg b/book/cover.jpg index da45d3a..b2e6fa6 100644 Binary files a/book/cover.jpg and b/book/cover.jpg differ diff --git a/book/cover_b.jpg b/book/cover_b.jpg new file mode 100644 index 0000000..7af40c5 Binary files /dev/null and b/book/cover_b.jpg differ diff --git a/book/crs/01_character.md b/book/crs/01_character.md new file mode 100644 index 0000000..ccaaed0 --- /dev/null +++ b/book/crs/01_character.md @@ -0,0 +1,4 @@ +# CRでキャラクターを動かす + +`control rig`は`CR_xxx`というファイル名がつけられています。 + diff --git a/book/crs/README.md b/book/crs/README.md new file mode 100644 index 0000000..22d4be8 --- /dev/null +++ b/book/crs/README.md @@ -0,0 +1,4 @@ +# control rig sample + +[control rig sample](https://www.fab.com/ja/listings/2ce3fe44-9ee6-4fa7-99fc-b9424a402386) + diff --git a/book/default/00_version.md b/book/default/00_version.md index 1eebb8f..e50374a 100644 --- a/book/default/00_version.md +++ b/book/default/00_version.md @@ -27,8 +27,9 @@ |name|latest| |---|---| -|[ultra dynamic sky](https://docs.google.com/document/d/1xAr0Hd3mY7Mp0g0waKLUvJaddUPaVxEeRoEEFXctCE0/)|20250203|天候| |[superhero flight animations](https://www.fab.com/ja/listings/41185c19-5191-4153-8293-8cc9901efa95)|20241217|空を飛ぶ| +|[ultra dynamic sky](https://docs.google.com/document/d/1xAr0Hd3mY7Mp0g0waKLUvJaddUPaVxEeRoEEFXctCE0/)|20250203|空や天候を自動化| +|[ocean waves](https://www.unrealengine.com/marketplace/ja/product/ocean-waves)|20241217|惑星の海を作る| ## link diff --git a/book/default/01_start.md b/book/default/01_start.md index c3a6d57..9eb2fad 100644 --- a/book/default/01_start.md +++ b/book/default/01_start.md @@ -23,7 +23,7 @@ ueはバグ(bug)が多く基本的に動きません。これはアップデー ueを長く使っているとわかることですが、ゲーム制作にはあまり向きません。unityのほうがおすすめです。ueはきれいな画像やシーンを作る用途におすすめです。 -「ueはバグが多く基本的に壊れている」このことを最初に理解しておかないと「おかしい、動かない」と時間を無駄にしてしまいます。また、保存せず長時間コードを書き続けるのは危険です。クラッシュ(crash)すると消えてしまいます。プロジェクト(project)そのものが壊れることもよくあります。注意しましょう。 +「ueはバグが多く基本的に壊れている」このことを最初に理解しておかないと「おかしいなあ」と時間を無駄にしてしまいます。また、保存せず長時間コードを書き続けるのは危険です。クラッシュ(crash)すると消えてしまいます。プロジェクト(project)そのものが壊れることもよくあります。注意しましょう。 ## 用語の解説 @@ -51,5 +51,6 @@ ueを長く使っているとわかることですが、ゲーム制作にはあ |repository|repo|リポジトリ、主にsrc codeの一式が置いてある場所| |project||プロジェクト、ueでは主に新しいゲームを作った時のフォルダ一式| |blueprint|bp|ブループリント、ueのノードベースで書く形式。anim blueprintはabp、character blueprintはcbpと略される事が多く、ファイル名は`BP_XXX`, `ABP_XXX`, `CBP_XXX`となる。基本大文字が使われる| +|variable|var|変数、一時的な値の保存場所| 基本的に英語で書けるものは英語で書きます。ueのmenuは英語にするのがおすすめです。様々な単語に慣れておきましょう。 diff --git a/book/default/02_install.md b/book/default/02_install.md index 6cea707..2eca66a 100644 --- a/book/default/02_install.md +++ b/book/default/02_install.md @@ -14,7 +14,7 @@ https://www.unrealengine.com/download まずは新しいprojectを作り、package buildできるかを試してみましょう。 -ueではbuildが通らないことがよくあります。長い時間をかけて作り上げたもののbuildが通らない自体は避けましょう。 +ueではbuildが通らないことがよくあります。長い時間をかけて作り上げたもののbuildが通らない事態は避けましょう。 なお、`mac`, `linux`は、ほとんどうまくいきません。package化に成功してもappが正常に起動しないことがあります。使用するpluginやassetなども影響します。 diff --git a/book/default/03_tips.md b/book/default/03_tips.md new file mode 100644 index 0000000..2181e5b --- /dev/null +++ b/book/default/03_tips.md @@ -0,0 +1,89 @@ +この章は読み飛ばしてください。まとめやすいように重要項目を上にしています。 + +最初はわからないかもしれませんが、最後まで読んでまた来ると、わかるようになっているかもしれません。 + +## variable(var) + +まずは変数の紹介です。変数はローカル変数(local)、グローバル変数(global)があります。最初はprojectで読み込むところに作ります。 + +1. フォルダの`/Content/Blueprints/`で右クリックして、ブループリントクラス、`GameInstance`を作ります。例えば、`GM_xxx`にします。(名前はなんでもいいです) +2. `設定 -> プロジェクト設定 -> マップ&モード`の`Game Instance:GameInstance Class`に`GM_xxx`を読み込みます。 + +なお、名前に`Default`, `Test`, `Config`などを使う場合は予約されていることがあります。注意してください。 + +これを開いて、変数のところで`UserTest`という名前で`string`型の変数を作ります。コンパイル(compile)してください。デフォルト値は`World`とでも入れておきましょう。 + +次に、`/Content/Blueprints/CBP_SandboxCharacter`を開いて、EventGraphで右クリックし、`Cast To GM_xxx`を選択します。 + +インプット(input)のpin(ピン)にあるObjectには`Get Game Instance`をつなぎます。そして、アウトプット(output)の青線は`Get UserTest`と検索し、それを`Print String`につなぎます。 + +さて、ここにkeyを設定して再生すると`World`と表示されるはずです。 + +特に重要なのが`変数の型`です。種類もそうですが、変数の型の右側にある色アイコンをクリックしてみると、たくさんの形式があることがわかります。 + +- 単一 +- 配列 +- 設定 +- マップ + +配列を使ってみましょう。`UserTestList`という名前で`string`の配列を作成します。 + +ここで、デフォルト値に追加できることに気づくはずです。 + +例えば、単語を3つ追加してみます。 + +- [0]ai +- [1]burst +- [2]can + +`Cast To GM_xxx`から`Get UserTestList`を引っ張り出し、`Length`につなげます。それをprintしてみると、`2`と表示されるはずです。 + +`length(len)`はその配列に追加された数を知ることができます。 + +では、全部の値を取り出すため`for`を書きましょう。`UserTestList`から`For Each Loop`を伸ばして`Loop Body`からprintにつなぎます。値は`Array Element`から取ります。 + +もし文字列をつなぎたいなら`Append`が使えます。 + +変数にはObjectをいれることもできます。たくさんのObjectを入れておき、`Find`で検索して取り出すこともできます。 + +では、characterを全部まとめて検索できる変数を作ってみます。 + +名前は`UserCharacterObj`でstringを選択し、マップを選択します。右側のマップは`オブジェクト(object)`と検索し、object参照を選択します。 + +```sh +str obj +--- --- +``` + +`cbp character`と検索し、characterのcbpを入れていきます。名前はわかりやすいものにしてください。例えば、`manny`, `quinn`など。 + +では繋いでいきます。 + +```sh +[Get Game Instance] --> [Cast To GM_Defaultconfig] --> [UserCharacterObj] + +--> [Find(manny)] --> [Get Object Name] --> [Print String] +``` + + + +基本的にこれを利用して、他のBPと値をやり取りすることになります。例えば、`ABP_SandboxCharacter`で条件を満たしたとき実行してほしいアニメーション(anim)があったとします。 + +この場合、まず`GM_xxx`の変数で`UserCharacterAnim`をboolean型で作り、実行してほしいタイミングで`CBP_SandboxCharacter`に書いた`Cast To GM_Defaultconfig`から`UserCharacterAnim`を`true`に変更します。`Set UserCharacterAnim`で検索してください。そして、ABPには`UserCharacterAnim`がtrueならanimを再生する処理を書きます。 + +## function(func) + +次は関数です。関数は簡単で、何度も繰り返す部分を再利用可能な形で残します。それが関数です。 + +新しい関数を作ってみましょう。左バーの関数(+)を押せば作成されます。名前は`FuncTest`にします。 + +関数を表す紫色のボックス(box)を選択した状態でinputとoutputの見てもらって、inputにboolという名前でboolean型を作ります。outputにはstrという名前でstring型を作ります。 + +処理の内容はboolがtrueなら`[yes]`というstringを出力し、falseなら`[no]`にします。 + + + +確認してみましょう。`[9]`を押すと`[yes][no]`が表示されます。 + + + diff --git a/book/end.jpg b/book/end.jpg deleted file mode 100644 index 4df58e2..0000000 Binary files a/book/end.jpg and /dev/null differ diff --git a/book/end/README.md b/book/end/README.md index f842088..589a9ef 100644 --- a/book/end/README.md +++ b/book/end/README.md @@ -1,5 +1,5 @@ -![](../end.jpg) +![](../cover_b.jpg) # Unreal Engine 5 Guide Book -download | web +download | web diff --git a/book/gas/00_custom.md b/book/gas/01_character.md similarity index 50% rename from book/gas/00_custom.md rename to book/gas/01_character.md index f2e1f39..1873ee0 100644 --- a/book/gas/00_custom.md +++ b/book/gas/01_character.md @@ -1,23 +1,11 @@ -## 新しいキャラを追加する +# キャラクターを追加する これには`IKリターゲット`が必要です。 1. `Content/Blueprints/CBP_SandboxCharacter_Manny`をcopyして`CBP_SandboxCharacter_test`を作ります。 -2. `CBP_SandboxCharacter_test`を開いて、`Mesh`の下にあるSKM(スケルタルメッシュ)の`Manny`を選択します。その状態で`詳細(details) -> タグ(tags)`からインデックス(index)の0を`RTG_UEFN_to_UE5_test`に書き換えます。 +2. `CBP_SandboxCharacter_test`を開いて、`Mesh`の下にあるSKM(スケルタルメッシュ)の`Manny`を選択します。その状態で`詳細(details) -> タグ(tags) -> Component Tags`から`index[0]`を`RTG_UEFN_to_UE5_test`に書き換えます。 3. `Content/Blueprints/RetargetedCharacters/ABP_GenericRetarget`を開き、変数の`IKRetargeter_Map`に新しく`RTG_UEFN_to_UE5_test`を追加し、ファイルは`/Content/Characters/UE5_Mannequins/Rigs/RTG_UEFN_to_UE5_Mannequin`を参照します。 4. `/Content/Widgets/GameAnimationWidget`を開いて、characterのiconのところをcopyして貼り付けます。そして、詳細からObjectで `Content/Blueprints/CBP_SandboxCharacter_test`を参照します。 これで新しいキャラを使用することが可能になります。 -## 飛びつける高さを増やす - -1. `Content/Blueprints/CBP_SandboxCharacter`を開いて、関数の`TryTraversalAction`を編集します。 -2. 一番下の`Max:275`を`Max:475`に変更します。 -3. `/Content/Characters/UEFN_Mannequin/Animations/Traversal/CHT_TraversalAnims`を開きます。 -4. `Mantles(編集)`から先程変更した値のところを全部`275 -> 475`に書き換えます。 - -例えば、levelにあるblockの高さを変更して飛びつけるか確認します。 - -1. `LevelBlock_TraversableXX`を選択します。 -2. トランスフォーム(transform)の拡大(scale)のところで青色(transform-scale-z)を`4.5`にします。 - diff --git a/book/gas/02_jump.md b/book/gas/02_jump.md new file mode 100644 index 0000000..5bfea7f --- /dev/null +++ b/book/gas/02_jump.md @@ -0,0 +1,12 @@ +# 飛びつける高さを増やす + +1. `Content/Blueprints/CBP_SandboxCharacter`を開いて、関数の`TryTraversalAction`を編集します。 +2. 一番下の`Max:275`を`Max:475`に変更します。 +3. `/Content/Characters/UEFN_Mannequin/Animations/Traversal/CHT_TraversalAnims`を開きます。 +4. `Mantles(編集)`から先程変更した値のところを全部`275 -> 475`に書き換えます。 + +例えば、levelにあるblockの高さを変更して飛びつけるか確認します。 + +1. `LevelBlock_TraversableXX`を選択します。 +2. トランスフォーム(transform)の拡大(scale)のところで青色(transform-scale-z)を`4.5`にします。 + diff --git a/book/gas/03_vrm.md b/book/gas/03_vrm.md new file mode 100644 index 0000000..b913f23 --- /dev/null +++ b/book/gas/03_vrm.md @@ -0,0 +1,8 @@ +# キャラクターの見た目を変える + +キャラクターの見た目を変えるには`.vrm`を使うと便利です。これは`pixiv`が作っている規格です。 + +ueで読み込むには`vrm4u`というpluginを使用します。 + +## vrm4u + diff --git a/book/gas/04_vmc.md b/book/gas/04_vmc.md new file mode 100644 index 0000000..2012cc9 --- /dev/null +++ b/book/gas/04_vmc.md @@ -0,0 +1,41 @@ +# モーションキャプチャで動かす + +カメラ(camera)からcharacterを動かす技術をモーションキャプチャ(motion capture)といいます。様々なprotocol(プロトコル)がありますが、`vrm4u`では[vmc](https://qiita.com/mintan/items/72d63cce4e6197b151b7)というprotocolを使います。 + +`epicgames`は[livelink](https://dev.epicgames.com/documentation/ja-jp/unreal-engine/live-link-in-unreal-engine)というものを作っています。 + +必要なものは多く、基本的には`web-camera`、`client-app`, `ue-plugin`が必要です。私は以下を使っています。 + +- camera: ノートパソコンに付属しているwebカメラ +- client: [webcam motion capture](https://webcammotioncapture.info/) +- plugin: [vrm4u](https://github.com/ruyo/VRM4U) + +clientはそれぞれのosにあったものを選びます。無料でも可能ですが、性能的には有料アプリがおすすめです。いくつか紹介しておきます。 + +この辺の情報は最初はわからないと思いますが、基本的には以下の流れで情報を処理します。 + +```sh +[camera] --> [client] --> [plugin] +``` + +## client + +|name|body|free| +|---|---|---| +|[vmc](https://github.com/sh-akira/VirtualMotionCapture)|vmcの開発元が出しているclient。protocolと同じ名前がつけられている|🟩| +|[vseeface](https://www.vseeface.icu/)|高性能なclient|🟩| +|[xr animator](https://booth.pm/ja/items/4513654)|お手軽に表示できるclient|🟩| +|[waidayo](https://booth.pm/ja/items/1779185)|iosにも対応しているclient|🟩| +|[vrm posing desktop](https://store.steampowered.com/app/1895630/VRM_Posing_Desktop/)|steamから出ているclient|🟥| +|[webcam motion capture](https://webcammotioncapture.info/)|安定したclient。使ってみた中では動きが一番良かった|🟥| + +## build packageを使うときportに注意 + +clientから送信されるportをpluginで受信します。build packageの`.exe`で確認するときは、editor(エディタ)を落としておきましょう。 + +## 停止したときだけvmcを有効にする + + + +VMCモードを有効にすると、キャラクターがidle状態、つまり、停止しているときだけVMCのモーションキャプチャを反映させます。 +これはVMCモードの変数を用意し、ABPで条件を書いて実現しています。キャラクターを動かしたときは一時的に無効にします。 diff --git a/book/gas/05_kawaii.md b/book/gas/05_kawaii.md new file mode 100644 index 0000000..3894188 --- /dev/null +++ b/book/gas/05_kawaii.md @@ -0,0 +1,4 @@ +# 揺れものを設定する + +[kawaiiphysics](https://github.com/pafuhana1213/kawaiiphysics) + diff --git a/book/gas/06_camera.md b/book/gas/06_camera.md new file mode 100644 index 0000000..d579296 --- /dev/null +++ b/book/gas/06_camera.md @@ -0,0 +1,9 @@ +# カメラワークを設定する + +スキル発動時にカメラをぐるっと回す演出です。 +スキル発動時にボス戦であれば演出されます。 +正面カメラを設置し、タイムラインで動かしたあとに通常(後方)カメラに切り替えることで実現しています。 + + + + diff --git a/book/gas/README.md b/book/gas/README.md index 7816203..a0b1539 100644 --- a/book/gas/README.md +++ b/book/gas/README.md @@ -1,8 +1,12 @@ -## GASとは +# game animation sample [game aimation sample](https://www.fab.com/ja/listings/880e319a-a59e-4ed2-b268-b32dac7fa016)はepicgamesが提供しているassetです。 -まずはこれを使ってキャラクター(chacater)を動かしてみましょう。 +[Game] [A]nimation [S]ampleでGASと略すことがあります。 + +なお、[G]ame [A]birity [S]ystemもGASなので紛らわしいです。 + +まずはこれを使ってキャラクター(character)を動かしてみましょう。 ## level(map) @@ -34,25 +38,31 @@ characterは`/Content/Blueprints/CBP_SandboxCharacter`で動かしています。このファイルを開いて編集してみましょう。 1. `EventGraph`というノードが記述されている場所(画面中央)で右クリックし、`Debug Key 1`を追加します。 -2. Releasedというピンから`Print String`を追加します。 +2. Releasedというピン(pin)から`Print String`を追加します。 3. ゲームを再生します。 4. キーボード(keyboard)の`[1]`を押すと、画面に`Hello`が表示されます。 これがbp(blueprint)でゲームを作る要領になります。 +## ABP + +characterの動きは`/Content/Blueprints/ABP_SandboxCharacter`で設定されています。 + ## input まずkeyがどこで設定されているのかと言うと、`/Content/Input/IMC_Sandbox`で設定されています。 例えば、`/Content/Input/IA_Aim`をコピー(copy)して、新しく`IA_One`を作ってみましょう。それを`IMC_Sandbox`で読み込んで`[1]`に割り当てます。 -次に、`IA_One`を先程の`CBP_Sandbox_Character`にドラッグ&ドロップ(D&D)します。 +次に、`IA_One`を先程の`CBP_SandboxCharacter`にドラッグ&ドロップ(D&D)します。 すると`EnhancedInputAction IA_One`という赤いノードが作成されたと思います。`Debug Key 1`を削除して代わりにつなぎます。色にも意味がありますが、そのうちわかってくると思います。 ゲームを再生してみると先ほどと同じkeyで動きます。 -## ABP +## tips -characterの動きは`/Content/Blueprints/ABP_Sandbox_Character`で設定されています。 +基本的なテクニックを紹介しています。 + +[/default/03_tips.html](/default/03_tips.html) diff --git a/book/json/01_varest.md b/book/json/01_varest.md new file mode 100644 index 0000000..655e2b9 --- /dev/null +++ b/book/json/01_varest.md @@ -0,0 +1,5 @@ +# apiから情報を取得する + +[varest](https://github.com/ufna/VaRest)などのpluginを使うと便利です。しかし、supportが終了しているため独自にbuildする必要があります。あるいは有料のものを購入するのもいいでしょう。 + + diff --git a/book/json/README.md b/book/json/README.md new file mode 100644 index 0000000..942b924 --- /dev/null +++ b/book/json/README.md @@ -0,0 +1,3 @@ +# json blueprint utilities + +`json`を扱う。 diff --git a/book/plan/01_flying.md b/book/plan/01_flying.md new file mode 100644 index 0000000..99a4770 --- /dev/null +++ b/book/plan/01_flying.md @@ -0,0 +1,3 @@ +# superhero flight animations + +[superhero flight animations](https://www.fab.com/ja/listings/41185c19-5191-4153-8293-8cc9901efa95) diff --git a/book/plan/02_uds.md b/book/plan/02_uds.md new file mode 100644 index 0000000..e0fd748 --- /dev/null +++ b/book/plan/02_uds.md @@ -0,0 +1,7 @@ +# ultra dynamic sky + +[ultra dynamic sky](https://docs.google.com/document/d/1xAr0Hd3mY7Mp0g0waKLUvJaddUPaVxEeRoEEFXctCE0/) + +blueprintなどでも`uds`と略されます。 + + diff --git a/book/plan/03_ocean.md b/book/plan/03_ocean.md new file mode 100644 index 0000000..6bf7fe5 --- /dev/null +++ b/book/plan/03_ocean.md @@ -0,0 +1,3 @@ +# ocean waves + +[ocean waves](https://www.unrealengine.com/marketplace/ja/product/ocean-waves) diff --git a/book/plan/README.md b/book/plan/README.md new file mode 100644 index 0000000..fdc0a13 --- /dev/null +++ b/book/plan/README.md @@ -0,0 +1,9 @@ +# 有料アセット + +|name|latest| +|---|---| +|[superhero flight animations](https://www.fab.com/ja/listings/41185c19-5191-4153-8293-8cc9901efa95)|20241217|空を飛ぶ| +|[ultra dynamic sky](https://docs.google.com/document/d/1xAr0Hd3mY7Mp0g0waKLUvJaddUPaVxEeRoEEFXctCE0/)|20250203|空や天候を自動化| +|[ocean waves](https://www.unrealengine.com/marketplace/ja/product/ocean-waves)|20241217|惑星の海を作る| + +