This commit is contained in:
syui 2025-03-17 13:03:50 +09:00
parent 319a716e9f
commit 4d453a2b7b
Signed by: syui
GPG Key ID: 5417CFEBAD92DF56
177 changed files with 5072 additions and 0 deletions

33
.github/workflows/gh-pages.yml vendored Normal file
View File

@ -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'

15
.gitignore vendored Normal file
View File

@ -0,0 +1,15 @@
*/*-lock.json
*/node_modules
*.sqlite
*.lock
*target
*.db
**.DS_Store
*.DS_Store
/scpt/*.jpeg
/scpt/*.png
config
book/_book
book/node_modules
book/*/*.ini
book/*.ini

0
.keep
View File

1
book/CNAME Normal file
View File

@ -0,0 +1 @@
ue-book.syui.ai

5
book/README.md Normal file
View File

@ -0,0 +1,5 @@
![](cover.jpg)
# Unreal Engine Guide Book
<a href="/book.pdf" target=”_blank”>download</a> | <a href="https://ue-book.syui.ai" target="_blank">web</a>

90
book/SUMMARY.md Normal file
View File

@ -0,0 +1,90 @@
# Summary
* [Unreal Engine Guild Book](README.md)
* [default](default/README.md)
* [asset/plugin](default/00_asset.md)
* [start](default/01_start.md)
* [install](default/02_install.md)
* [tips](default/03_tips.md)
* [game animation sample](gasp/README.md)
* [キャラクターを追加する](gasp/01_character.md)
* [飛びつける高さを増やす](gasp/02_jump.md)
* [キャラクターを作る](gasp/03_vrm.md)
* [モーションキャプチャで動かす](gasp/04_vmc.md)
* [揺れものを設定する](gasp/05_kawaii.md)
* [カメラワークの設定する](gasp/06_camera.md)
* [アニメーションを作成する](gasp/07_anim.md)
* [アニメーションを変更する](gasp/11_run.md)
* [niagaraでダメージを出す](gasp/08_niagara.md)
* [椅子に座る](gasp/09_chair.md)
* [階段に登る](gasp/10_stairs.md)
* [武器を装備する](gasp/12_weapon.md)
* [control rig sample](crs/README.md)
* [CRでキャラクターを動かす](crs/01_character.md)
* [ボスを作る](crs/02_boss.md)
* [ボスのジャンプ攻撃を作る](crs/03_jump.md)
* [city sample](city/README.md)
* [惑星形式のmapを作る](city/01_remove.md)
* [橋を作る](city/02_bridge.md)
* [家を作る](city/03_house.md)
* [BGMを作る](city/04_bgm.md)
* [ブラウザを作る](city/05_browser.md)
* [gameplay camera](camera/README.md)
* [もっと近づける](camera/01_close.md)
* [json blueprint utilities](json/README.md)
* [apiから情報を取得する](json/01_varest.md)
* [pixel streaming](pixel/README.md)
* [基本事項](pixel/01_server.md)
* [vrm4u](vrm4u/README.md)
* [キャラクターを作る](vrm4u/01_make.md)
* [指の角度を調整する](vrm4u/02_yubi.md)
* [前髪の角度を調整する](vrm4u/03_hair.md)
* [アウトラインを追加する](vrm4u/04_outline.md)
* [トーンを変える](vrm4u/05_toon.md)
* [有料アセット](plan/README.md)
* [superhero fligth animations](plan/01_flying.md)
* [ultra dynamic sky](plan/02_uds.md)
* [ocean waves](plan/03_ocean.md)
* [nice interaction system](plan/04_item.md)
* [replicated interaction kit vol 3](plan/05_chair.md)
* [dragon ik plugin](plan/06_dragonik.md)
* [worldscape plugin](plan/07_wsp.md)
* [unity](unity/README.md)
* [animation clipをueで使う](unity/01_fbx.md)
* [blender](blender/README.md)
* [素体を作る](blender/01_model.md)
* [衣装を着せる](blender/02_costume.md)
* [vrmで統合する](blender/03_vrm.md)
* [web](web/README.md)
* [glbをwebに表示する](web/01_three.md)
* [vrmをwebに表示する](web/02_three-vrm.md)
* [issue](issue/README.md)
* [ue](issue/ue/README.md)
* [error II-E1001](issue/ue/ue_01.md)
* [game animation sample](issue/gasp/README.md)
* [GameplayCameraをdisableにする](issue/gasp/gasp_01.md)
* [cameraが急接近する](issue/gasp/gasp_02.md)
* [characterのcomponentが初期化される](issue/gasp/gasp_03.md)
* [IA_Sprintのダッシュができなくなる](issue/gasp/gasp_04.md)
* [traversableが機能しなくなる](issue/gasp/gasp_05.md)
* [city sample](issue/city/README.md)
* [buildが遅い場合](issue/city/city_01.md)
* [ue5.5ではbuildが通らない](issue/city/city_02.md)
* [問題が起こったときにresetする](issue/city/city_03.md)
* [playerが地面に埋まってしまう](issue/city/city_04.md)
* [他のmapとの統合](issue/city/city_05.md)
* [BGMを変更する](issue/city/city_06.md)
* [表示されなくなったサイト](issue/city/city_07.md)
* [blender](issue/blender/README.md)
* [衣装の背後に黒いチラつきが発生する](issue/blender/blender_01.md)
* [ueで読み込むと一部のmaterialが正しく表示されない](issue/blender/blender_02.md)
* [髪の毛が頭に追従しなくなる事がある](issue/blender/blender_03.md)
* [vrm4u](issue/vrm4u/README.md)
* [customで衣装の半分が灰色になる](issue/vrm4u/vrm4u_01.md)
* [project](project/README.md)
* [自己紹介](project/01_ep.md)
* [最初の体験](project/02_ep.md)
* [毎日プレイ](project/03_ep.md)
* [自由と不自由](project/04_ep.md)
* [youtube](project/01_youtube.md)
* [end](end/README.md)

47
book/blender/01_model.md Normal file
View File

@ -0,0 +1,47 @@
# 素体を作る
素体を作ります。できる限り現実に近い再現を目指します。これを`gender system`と呼び、わかりやすくいうとキャラクターの性器システムです。
今回は、Aモデル(vrm)とBモデル(部位)の統合をblenderで行います。統合したものをvrmにexportして、ueでimportします。Bモデルにはシェイプキーを設定しているので、ueではモーフターゲットとして動かせるようにします。
ueで動かすにはmaterialに`VRM MToon`を使うこと、`UVMap`の名前に設定すること、`vrm0`を使うこと、データ転送で`頂点`を設定することが大切です。今回使用する[addon](/blender/)は、vrmをimport, exportするaddonだけです。
## vroidの設定
素体はvroidをベースにします。つけている衣装を全部はずします。そして、パンツなどもテクスチャを削除しておくと素体の完成です。
## materialの設定
vrmをblenderで読み込みます。
1. Bモデルのmaterialに`VRM MToon`を設定します。ueでimportする際にcrashします。
2. dataのUVマップに`UVMap_xxx`となっているときは名前を`UVMap`にします。色がおかしくなります。
## 基本的な編集(移動、削除、位置)
1. Bモデルを正しい位置にセットします。[G], [Z], [R]
2. Aモデルを適切に切り取ります。[面を選択], [細分化], [四角形に], [面を削除]
3. シェイプキーを動かしても問題ないかの確認します。
![](/img/0012.png)
## bodyに追従させる
このままではBモデルは体に追従しません。追従させるには頂点をアーマチュア(armature)に追加します。
1. Bモデルのモディファイアから[データ転送], [Body(J_Bip_C_Hips)], [頂点], [頂点グループ]を選択し、[データレイヤーを生成], [適用]します。
2. Bモデルのモディファイアでアーマチュアで[Armature]を追加します。
3. 女性の場合はボーン(足)を調整します。なお、少し浮くようになってしまうため全体を-Zします。[G], [X], [R]
> シェイプキーをueでも有効にするには、vrm0を使います。また、編集しているときにobjectを分離した場合は元の構成に再統合してください。
![](/img/0013.png)
## gender systemについて
例外ない限りキャラクターにはgender systemが搭載されます。アイは原作で性別がないので、例外的にgender systemから除外されています。
最初に実装するキャラは、仮名で`アダブ(男性)`, `イブチェ(女性)`になります。
[issue: ueで読み込むと一部のmaterialが正しく表示されない](/issue/blender/blender_02.html)

View File

@ -0,0 +1,11 @@
# 衣装を着せる
衣装は体に追従しません。これを追従するようにします。
1. 衣装を選択した状態で、モディファイア -> データ転送、頂点を選択し、頂点グループにチェックを入れる。
2. データレイヤーのボタンを押して頂点を生成。
3. 最後にモディファイアのデータ転送を適用。
## 衣装を着せるaddon
blenderに[kiseru](https://pielotopica.booth.pm/items/4854979)をインストールします。

49
book/blender/03_vrm.md Normal file
View File

@ -0,0 +1,49 @@
# vrmで統合する
`.vrm`を読み込んで、別の`.vrm`に統合する方法を紹介します。最終的にはueでも動くようにします。
編集しているうちにblenderのシェイプキーがueのモーフターゲットにexportできなくなったり、髪の毛のウェイトが消えていたりといったトラブルが多発します。
blenderのvrmはspring boneを設定して髪の毛を動かしています。これはboneに付いているcolliderと連動しています。
髪の毛はboneとも連動していて、armature(bone)を統合したあとにheadとheadをつなげなければなりません。
統合するobjectの動きを本体に追従したい場合は頂点とアーマチュアを正しく設定しなければなりません。データ転送を活用します。
髪の毛が動かない場合、物理シュミレーションが設定されているか確認してください。ueの`kawaiiphysics`でも設定できます。私はueのほうで設定しています。また、髪の毛のウェイトが剥がされていないか確認してください。データ転送後は髪の毛にウェイトが付いているか確認しましょう。
シェイプキー(モーフターゲット)が消えてしまうのは`vrm1`に起因します。blenderで編集する場合は`vrm0`をベースにしてください。また、シェイプキーは元のobject名に再統合しなければ消えてしまいます。
1. vrm0をベースにしているか。
2. objectを元の状態に再統合できているか。
3. 髪の毛にウェイトはあるか。
4. 髪の毛に物理シュミレーションはあるか。
## 具体的な手順
hair(髪の毛)とbody(体)で分けられたvrmを読み込むこととします。これを統合します。
1. まず、boneの統合を行います。boneはarmatureというようです。不要なboneを削除します。そして、完成版となるarmatureを最後に選択して統合します。
2. 次に必要なboneをつなぎます。boneを編集モードで編集し、`J_Bip_C_Head` -> `head`を選択し、右クリックで親を`オフセット維持`で設定します。
3. 次にhairを選択し、モディファイアからデータ転送を行います。ソースに`body`, 頂点グループに`J_Bip_C_Head`を選択します。ここが特に重要です。そして、頂点データにチェックを入れ、頂点グループを選択します。最後にデータレイヤーを生成し、適用します。これでhairとbodyがつながった状態になりました。bodyが主体になります。
ウェイトがhair(J_Bip_C_Head)に設定されていることを確認してください。今後、hairのobjectをいじると削除される可能性があります。
## ueで物理シュミレーションを設定する
1. 次にueでhairを動くようにします。ueでvrmを読み込んで、`ABP_Post_${name}`を編集します。`kawaiiphysics`でRoot Boneに`J_Sec_Hair_1_xx`を1-12まで入れて、Capsule Limitsに`chest`, `hip`などを設定します。私は`chest`の値を大きめにして対処しました。
2. 次に、服が体に入りこまないようにしなければなりません。これも先ほどと同じように設定します。
3. 設定後は`ABP_Post_${name}`をコピーしておきましょう。このファイルは新しくvrmを読み込むと上書きされるため、最新版を読み込んだあと再設定しやすいように。
blenderから読み込んだmodelを動かしてみた。
![](/img/0007.png)
## blendshapeとvmc
vmcは`.vrm`をblenderで開いたときblendshape(ブレンドシェイプ)が設定されていれば大抵動くと思います。
ただし、blenderで編集した際に使えなくなってしまう可能性が高いです。例えば、objectを分離した場合がそうです。最初の構成にobjectを統合すると動くようになります。
[issue: 髪の毛が頭に追従しなくなる事がある](/issue/blender/blender_03.html)

32
book/blender/README.md Normal file
View File

@ -0,0 +1,32 @@
# blender
[blender](https://projects.blender.org/blender/blender)でモデルを編集して、ueで読み込みます。
- version: `4.5`
```sh
# https://developer.blender.org/docs/handbook/building_blender/windows/
$ git clone https://projects.blender.org/blender/blender.git
$ cd blender
$ make update
$ make
```
## addon
|addon|body|
|---|---|
|https://github.com/saturday06/VRM-Addon-for-Blender|vrmを読み込む|
## その他のaddon
結局、vrmを読み込むもの以外は使いませんでした。気になったaddonを載せておきます。
|addon|body|
|---|---|
|https://github.com/smokejohn/SKkeeper|modifireをobjectに反映|
|https://github.com/12funkeys/rigid_bodys_gen|rigを付ける|
|https://github.com/shteeve3d/blender-wiggle-2|rigを付ける|
|https://pielotopica.booth.pm/items/4854979|衣装を着せる|
なお、pythonを実行するのは危険も伴いますので、blender addonの実行(インストール)は最低限にしてましょう。

7
book/camera/01_close.md Normal file
View File

@ -0,0 +1,7 @@
# もっと近づける
GASPにはマウスのDown/Upのキーでカメラ操作が設定されているので、それを改造します。今回は`Style:Close`でもっと近づけるようにします。
例えば、`GamePlay Camera`から`Get Initial Variable Table``Set Camera Rig Parameters`につなげます。そして、`Close_Strafe`を選択し、`/Content/Blueprints/Camera/CameraAsset_SandboxCharacter`にある`Close_Strafe`のOffsetを公開します。公開するにはnodeを伸ばして変数を作ればokです。
これで`/Content/Blueprints/CBP_SandboxCharacter`から値をいれることができます。ピンを分割して、x軸に`-70.0`を入れます。

5
book/camera/README.md Normal file
View File

@ -0,0 +1,5 @@
# gameplay camera
[gameplay camera](https://dev.epicgames.com/documentation/ja-jp/unreal-engine/gameplay-camera-system)
キャラクターブループリント(Character BP)とカメラブループリント(Camera BP)の分離(共通化)を図ります。

25
book/city/01_remove.md Normal file
View File

@ -0,0 +1,25 @@
# 惑星形式のmapを作る
game engineのmapは基本的に平面で作られています。どこまで行っても地平線が広がっているだけで、そこから抜け出すことはできません。月や太陽があっても背面の絵を動かしているだけです。
これを現実に合わせた形にします。地球があって、上に飛ぶと大気圏があり、大気圏を抜けると宇宙があり、月があり、太陽があるという形にすることを目指します。全てはつながっていて、そこに行くことができます。これを`planet system`と呼ぶことにします。
基本的に`/Map/Small_City_LVL`を使って構築していきます。
## 海の境界を消す
city sampleの海には境界があってcollisionが設定されています。邪魔になるので消します。
`GroundCollisionCube`,`DroneBlockingVolume`を探して削除します。
## ultra dynamic skyで天候と惑星を作る
[こちら](/plan/02_uds.html)
## ocean wavesで惑星の海を作る
[こちら](/plan/03_ocean.html)
## worldscape pluginを使う
[こちら](/plan/07_wsp.html)

9
book/city/02_bridge.md Normal file
View File

@ -0,0 +1,9 @@
# 橋を作る
[automotive bridge scene](https://www.fab.com/ja/listings/a472df9d-9179-4743-8d41-335f9ef55546)
1. `/Content/AutomotiveBridgeScene/Blueprints/BP_CurvedBridge`, `BP_StraightBridge`を開きます。これをつなぎ合わせていくことで橋を作ります。
2. Lampが動きませんので、選択した上で`Static Mesh``city sample`に入っている`/Content/Prop/Kit_StreetLamp_C/Mesh/streetLampC`と入れ替えます。
3. 私はベンチのところを`traversable(トラバーサブル)`するためにGASの`/Content/LevelPrototyping/LevelBlock_Traversable`を入れています。Base Materialを`/Content/Characters/Echo/Materials/M_hide`にして透明にします。
![](../img/0003.png)

9
book/city/03_house.md Normal file
View File

@ -0,0 +1,9 @@
# 家を作る
1. [twinmotion](https://www.twinmotion.com/)をinstallして、建造物を作ります。template(テンプレート)を編集しても構いません。
2. できたらexportしてueの$projectを選択します。`$project/${name}_Assets`が作成されます。`datasmith`の置き場所は変更しても構いません。
3. $projectを開いて、pluginの`datasmith`を入れます。そして、`$name (Datasmith シーン)`のファイルをmapにD&Dします。
4. すり抜け問題を解消するには作成された`mesh`を全選択して、右クリックで`アセットアクション -> プロパティマトリクスで選択内容を... -> collision complexity(use complex collision as simple...)`を選択します。
> 私の場合はmeshが`/Content/Twinmotion/room/Geometries/`にあります。
<iframe width="100%" height="415" src="https://www.youtube.com/embed/BsLOlAr-wBY?si=jahPUVD8YMMfefvm&start=152&end=160&mute=1&rel=0&showinfo=0&controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

6
book/city/04_bgm.md Normal file
View File

@ -0,0 +1,6 @@
## 音楽を作る
例えば、BGMの一部を変更したい場合は、`プロジェクト設定 -> ゲーム -> World Audio Data`を見てください。
私はmatrix(マトリックス)のテーマを消したかったので、`/Content/Audio/MetaSounds/Music/`にある`music_leavebehind_New_Mix_Meta`, `music_leavebehind_New_Mix_NHT_Meta`の音量を`0.0`にしました。

27
book/city/05_browser.md Normal file
View File

@ -0,0 +1,27 @@
# ブラウザを作る
1. pluginで`web browser`を有効にします。
2. 下記のような緑背景のmaterialを作成します。
> [https://blueprintue.com/blueprint/-49_059w/](https://blueprintue.com/blueprint/-49_059w/)
3. web browserを使ったwidgetを作成します。
4. BP_browserに追加したwidget componentで呼び出します。collisionでcontrolします。
> [https://blueprintue.com/blueprint/uubw_6ay/](https://blueprintue.com/blueprint/uubw_6ay/)
4. displayにくっつければ見栄えも良くなります。
> https://www.unrealengine.com/marketplace/ja/product/twinmotion-high-tech-pack-1
![](/img/0014.png)
画像はNASAの[solar system](https://eyes.nasa.gov/apps/solar-system/#/home)にアクセスしたときのもの。
- https://eyes.nasa.gov/apps/asteroids/#/planets/earth
## issue: 表示されなくなったサイト
[こちら](/issue/city/city_07.html)を見てください。
## webでUIやシステムを作る
これを利用すると、webで動くUIやシステムを作成し、ゲームに取り入れることができます。
しかし、運用は大変だと思います。

View File

@ -0,0 +1,325 @@
{
"FileVersion": 3,
"EngineAssociation": "5.5",
"Category": "Samples",
"Description": "",
"Modules": [
{
"Name": "CitySample",
"Type": "Runtime",
"LoadingPhase": "Default",
"AdditionalDependencies": [
"Engine",
"AIModule",
"ChaosVehicles",
"UMG",
"MovieScene"
]
},
{
"Name": "CitySampleEditor",
"Type": "Editor",
"LoadingPhase": "Default",
"AdditionalDependencies": [
"Engine"
]
},
{
"Name": "CitySampleAnimGraphRuntime",
"Type": "UncookedOnly",
"LoadingPhase": "Default"
}
],
"Plugins": [
{
"Name": "AlembicHairImporter",
"Enabled": true
},
{
"Name": "HairStrands",
"Enabled": true
},
{
"Name": "PythonScriptPlugin",
"Enabled": true
},
{
"Name": "ControlRig",
"Enabled": true
},
{
"Name": "Takes",
"Enabled": true
},
{
"Name": "D3DExternalGPUStatistics",
"Enabled": true,
"Optional": true,
"SupportedTargetPlatforms": [
"Win64"
]
},
{
"Name": "LiveLinkCurveDebugUI",
"Enabled": true
},
{
"Name": "ChaosVehiclesPlugin",
"Enabled": true
},
{
"Name": "RigLogic",
"Enabled": true
},
{
"Name": "RawInput",
"Enabled": true
},
{
"Name": "GameplayInsights",
"Enabled": true
},
{
"Name": "TraceSourceFilters",
"Enabled": true
},
{
"Name": "TraceDataFilters",
"Enabled": true
},
{
"Name": "ModelingToolsEditorMode",
"Enabled": true
},
{
"Name": "Traffic",
"Enabled": true
},
{
"Name": "CitySampleMassCrowd",
"Enabled": true
},
{
"Name": "StateTree",
"Enabled": true
},
{
"Name": "OnlineSubsystem",
"Enabled": true
},
{
"Name": "OnlineSubsystemUtils",
"Enabled": true
},
{
"Name": "MassAI",
"Enabled": true
},
{
"Name": "MassCrowd",
"Enabled": true
},
{
"Name": "MassEntity",
"Enabled": true
},
{
"Name": "MassGameplay",
"Enabled": true
},
{
"Name": "HoverDrone",
"Enabled": true
},
{
"Name": "EnhancedInput",
"Enabled": true
},
{
"Name": "Volumetrics",
"Enabled": true
},
{
"Name": "ContextualAnimation",
"Enabled": true
},
{
"Name": "ChaosCaching",
"Enabled": true
},
{
"Name": "FieldSystemPlugin",
"Enabled": true
},
{
"Name": "Paper2D",
"Enabled": true
},
{
"Name": "WinDualShock",
"Enabled": true,
"SupportedTargetPlatforms": [
"Win64"
]
},
{
"Name": "ZoneGraph",
"Enabled": true
},
{
"Name": "AnimationWarping",
"Enabled": true
},
{
"Name": "ElectraPlayer",
"Enabled": true
},
{
"Name": "LiveLinkCamera",
"Enabled": true
},
{
"Name": "AudioModulation",
"Enabled": true
},
{
"Name": "Metasound",
"Enabled": true
},
{
"Name": "MovieRenderPipeline",
"Enabled": true
},
{
"Name": "Soundscape",
"Enabled": true
},
{
"Name": "FullBodyIK",
"Enabled": true
},
{
"Name": "RemoteControl",
"Enabled": true
},
{
"Name": "ImagePlate",
"Enabled": true
},
{
"Name": "LightWeightInstancesEditor",
"Enabled": true
},
{
"Name": "GameFeatures",
"Enabled": true
},
{
"Name": "ModularGameplay",
"Enabled": true
},
{
"Name": "CitySampleSensorGrid",
"Enabled": true
},
{
"Name": "IKRig",
"Enabled": true
},
{
"Name": "ColorCorrectRegions",
"Enabled": true
},
{
"Name": "Gauntlet",
"Enabled": true
},
{
"Name": "CustomizableSequencerTracks",
"Enabled": true
},
{
"Name": "NetworkPrediction",
"Enabled": true
},
{
"Name": "NiagaraFluids",
"Enabled": true
},
{
"Name": "Text3D",
"Enabled": true
},
{
"Name": "MotoSynth",
"Enabled": true
},
{
"Name": "EditorDataStorage",
"Enabled": true
},
{
"Name": "EditorDataStorageFeatures",
"Enabled": true,
"TargetAllowList": [
"Editor"
]
},
{
"Name": "AnimToTexture",
"Enabled": true
},
{
"Name": "SequencerScripting",
"Enabled": true,
"TargetAllowList": [
"Editor"
]
},
{
"Name": "GeometryCollectionPlugin",
"Enabled": true,
"TargetAllowList": [
"Editor"
]
},
{
"Name": "AutomatedPerfTesting",
"Enabled": true
},
{
"Name": "LiveLink",
"Enabled": true
},
{
"Name": "LiveLinkControlRig",
"Enabled": true
},
{
"Name": "PoseSearch",
"Enabled": true
},
{
"Name": "AnimationLocomotionLibrary",
"Enabled": true
},
{
"Name": "MotionWarping",
"Enabled": true
},
{
"Name": "Chooser",
"Enabled": true
},
{
"Name": "Mover",
"Enabled": true
}
],
"TargetPlatforms": [
"PS5",
"XSX",
"Windows"
],
"EpicSampleNameHash": "111"
}

385
book/city/README.md Normal file
View File

@ -0,0 +1,385 @@
# city sample
[city sample](https://www.unrealengine.com/marketplace/ja/product/city-sample)
ニューヨーク(NY)をモデルに都市が作られています。人と自動車が動いています。自動車は乗ることや破壊することができます。
## game animation sampleとの統合
他のassetとの統合を考えるとき、city sampleをベースにします。なぜなら、city sampleは複雑すぎるためです。ここではcity sampleをinstallした上で、game animation sampleをそこにcopyします。
なお、`GameAnimationSample/Binaries/Win64/UnrealEditor.modules`だけはcopyしません。
```sh
# 以下のfileをcopy
GameAnimationSample
Binaries
Win64/UnrealEditor.modules #このfileだけはcopy(rewrite)しない
Build
Content
```
次に`CitySample/Binaries/Win64/UnrealEditor.modules`を編集します。
```json
{
"BuildId": "xxx",
"Modules":
{
"CitySample": "UnrealEditor-CitySample.dll",
"CitySampleAnimGraphRuntime": "UnrealEditor-CitySampleAnimGraphRuntime.dll",
"CitySampleEditor": "UnrealEditor-CitySampleEditor.dll"
},
{
"GameAnimationSample": "UnrealEditor-GameAnimationSample.dll"
}
}
```
これでGASPが機能すればokです。
他には`$project/Config``$project/xxx.uproject`を見比べてみましょう。必要そうなものを追記します。
```json
{
"FileVersion": 3,
"EngineAssociation": "5.5",
"Category": "Samples",
"Description": "",
"Modules": [
{
"Name": "CitySample",
"Type": "Runtime",
"LoadingPhase": "Default",
"AdditionalDependencies": [
"Engine",
"AIModule",
"ChaosVehicles",
"UMG",
"MovieScene"
]
},
{
"Name": "CitySampleEditor",
"Type": "Editor",
"LoadingPhase": "Default",
"AdditionalDependencies": [
"Engine"
]
},
{
"Name": "CitySampleAnimGraphRuntime",
"Type": "UncookedOnly",
"LoadingPhase": "Default"
}
],
"Plugins": [
{
"Name": "AlembicHairImporter",
"Enabled": true
},
{
"Name": "HairStrands",
"Enabled": true
},
{
"Name": "PythonScriptPlugin",
"Enabled": true
},
{
"Name": "ControlRig",
"Enabled": true
},
{
"Name": "Takes",
"Enabled": true
},
{
"Name": "D3DExternalGPUStatistics",
"Enabled": true,
"Optional": true,
"SupportedTargetPlatforms": [
"Win64"
]
},
{
"Name": "LiveLinkCurveDebugUI",
"Enabled": true
},
{
"Name": "ChaosVehiclesPlugin",
"Enabled": true
},
{
"Name": "RigLogic",
"Enabled": true
},
{
"Name": "RawInput",
"Enabled": true
},
{
"Name": "GameplayInsights",
"Enabled": true
},
{
"Name": "TraceSourceFilters",
"Enabled": true
},
{
"Name": "TraceDataFilters",
"Enabled": true
},
{
"Name": "ModelingToolsEditorMode",
"Enabled": true
},
{
"Name": "Traffic",
"Enabled": true
},
{
"Name": "CitySampleMassCrowd",
"Enabled": true
},
{
"Name": "StateTree",
"Enabled": true
},
{
"Name": "OnlineSubsystem",
"Enabled": true
},
{
"Name": "OnlineSubsystemUtils",
"Enabled": true
},
{
"Name": "MassAI",
"Enabled": true
},
{
"Name": "MassCrowd",
"Enabled": true
},
{
"Name": "MassEntity",
"Enabled": true
},
{
"Name": "MassGameplay",
"Enabled": true
},
{
"Name": "HoverDrone",
"Enabled": true
},
{
"Name": "EnhancedInput",
"Enabled": true
},
{
"Name": "Volumetrics",
"Enabled": true
},
{
"Name": "ContextualAnimation",
"Enabled": true
},
{
"Name": "ChaosCaching",
"Enabled": true
},
{
"Name": "FieldSystemPlugin",
"Enabled": true
},
{
"Name": "Paper2D",
"Enabled": true
},
{
"Name": "WinDualShock",
"Enabled": true,
"SupportedTargetPlatforms": [
"Win64"
]
},
{
"Name": "ZoneGraph",
"Enabled": true
},
{
"Name": "AnimationWarping",
"Enabled": true
},
{
"Name": "ElectraPlayer",
"Enabled": true
},
{
"Name": "LiveLinkCamera",
"Enabled": true
},
{
"Name": "AudioModulation",
"Enabled": true
},
{
"Name": "Metasound",
"Enabled": true
},
{
"Name": "MovieRenderPipeline",
"Enabled": true
},
{
"Name": "Soundscape",
"Enabled": true
},
{
"Name": "FullBodyIK",
"Enabled": true
},
{
"Name": "RemoteControl",
"Enabled": true
},
{
"Name": "ImagePlate",
"Enabled": true
},
{
"Name": "LightWeightInstancesEditor",
"Enabled": true
},
{
"Name": "GameFeatures",
"Enabled": true
},
{
"Name": "ModularGameplay",
"Enabled": true
},
{
"Name": "CitySampleSensorGrid",
"Enabled": true
},
{
"Name": "IKRig",
"Enabled": true
},
{
"Name": "ColorCorrectRegions",
"Enabled": true
},
{
"Name": "Gauntlet",
"Enabled": true
},
{
"Name": "CustomizableSequencerTracks",
"Enabled": true
},
{
"Name": "NetworkPrediction",
"Enabled": true
},
{
"Name": "NiagaraFluids",
"Enabled": true
},
{
"Name": "Text3D",
"Enabled": true
},
{
"Name": "MotoSynth",
"Enabled": true
},
{
"Name": "EditorDataStorage",
"Enabled": true
},
{
"Name": "EditorDataStorageFeatures",
"Enabled": true,
"TargetAllowList": [
"Editor"
]
},
{
"Name": "AnimToTexture",
"Enabled": true
},
{
"Name": "SequencerScripting",
"Enabled": true,
"TargetAllowList": [
"Editor"
]
},
{
"Name": "GeometryCollectionPlugin",
"Enabled": true,
"TargetAllowList": [
"Editor"
]
},
{
"Name": "AutomatedPerfTesting",
"Enabled": true
},
{
"Name": "LiveLink",
"Enabled": true
},
{
"Name": "LiveLinkControlRig",
"Enabled": true
},
{
"Name": "PoseSearch",
"Enabled": true
},
{
"Name": "AnimationLocomotionLibrary",
"Enabled": true
},
{
"Name": "MotionWarping",
"Enabled": true
},
{
"Name": "Chooser",
"Enabled": true
},
{
"Name": "Mover",
"Enabled": true
}
],
"TargetPlatforms": [
"PS5",
"XSX",
"Windows"
]
}
```
また、`/Config/DefaultEngine.ini`に注意してください。
```sh
[/Script/Engine.CollisionProfile]
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel11,DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False,Name="Traversable")
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel12,DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False,Name="EnemyProjectile")
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel13,DefaultResponse=ECR_Block,bTraceType=True,bStaticObject=False,Name="BulletHell")
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel14,DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False,Name="LookAtTrace")
```
`Collision Trace Channel`は作り直さなければ機能しないことがあります。
### 問題の数々
問題の数々は[こちら](/issue/)でまとめています。

BIN
book/cover.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 240 KiB

BIN
book/cover_b.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

21
book/crs/01_character.md Normal file
View File

@ -0,0 +1,21 @@
# CRでキャラクターを動かす
`control rig``CR_xxx`というファイル名がつけられています。
## dragon
例えば、ABPで`head_global_ctrl`の値を更新します。
<iframe src="https://blueprintue.com/render/o3glwh72/1" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
## mech
1. `/Content/ControlRig/Characters/Mech/Meshes/SKM_Mech`からABP, BP, SM(StaticMesh)を作成します。
2. ABPから`Control Rig``cannon_ctrl`などを動かせます。
```sh
- /Content/ControlRig/Characters/Mech/BP_Mech
- /Content/ControlRig/Characters/Mech/ABP_Mech
- /Content/ControlRig/Characters/Mech/Meshes/SM_Mech
```

91
book/crs/02_boss.md Normal file
View File

@ -0,0 +1,91 @@
# ボスを作る
敵(enemy)やボス(boss)には必要なものが多いです。動きや攻撃パターン、エフェクト、ステータスやドロップアイテム、ゲージ表示、BGMなどが必要になります。場合によっては演出も必要です。
<iframe width="100%" height="415" src="https://www.youtube.com/embed/BsLOlAr-wBY?si=jahPUVD8YMMfefvm&amp;start=20&end=50&amp;mute=1&rel=0&showinfo=0&controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
bossは`/Content/ControlRig/Characters/Mech`を元に作ります。
## 注意
ここからはbattle systemのassetを購入したほうがいいかもしれません。できれば評価が高くsale中のものを選びましょう。ほとんどこれ一つでゲームが作れてしまうので、多くの開発者はこのジャンルのassetを改造してゲームを作っています。スタイリッシュアクションの動きを見るとわかります。
https://www.fab.com/category/game-template/rpg
## 動きを作る
まずABPを作成し、基本的なAnimGraphを作成します。
projectにはsampleのABPがあるはずですからAnimGraphに`idle`, `jump`, `run`などが揃っているをcopyします。
[![](../img/0004.png)](../img/0004.png)
ここでは`AnimGraph -> Locomotion -> Idle`を編集します。
動きはABPの`Look At`が使えます。boneを指定するとPlayerに追従します。
`[Mech_Idle] --> [Look At](Bone to Modify:cannon_01) --> Output Animation Pose`
[![](../img/0006.png)](../img/0006.png)
## 攻撃を作る
私は最初に購入したassetの[space frontier stations & ships](https://docs.google.com/document/d/1p5MY13cpTlVtqP7sCQpAoE_k5VHklmndZ4cHeBy105Y/edit?tab=t.0#heading=h.nx19nrsdk37u)を使いました。なお、購入はおすすめしません。長いので以降は`space station`とします。
ここからはassetの解説になります。しかし、基本的な考え方については変わりません。まずは考え方を紹介します。
1. ターゲットをロック
2. ダメージ処理
ターゲット(target)をロック(lock)できるようなシステムは大抵、攻撃頻度やダメージ、コリジョンなど基本設定ができるようになっています。`epic games`が提供するassetや無料のassetでも同じです。そういった物を見つけてbossのBPに組み込みます。
ただし、ダメージ処理、例えば、HP管理や倒された時の処理は自分で書く必要があるかもしれません。
### 最初に触ったassetが影響を与える
ここからは少し昔の話をします。基本的には読み飛ばしてください。
私はueで最初に触り始めたのがこのasset(space station)でした。当時は何もわからずに手探りで自分のモデルを表示して遊んでいました。宇宙空間に自分のモデルを表示したときは本当に嬉しくて感動しました。
当時は`superhero flight animations`という空を飛ぶためassetも購入して同時に使っていましたが、今でもその影響は残っています。
その人のゲーム作りは最初に触ったassetが強く影響を与えるのだと思います。これはgame engineも同じです。
### space stationの基本構造
1. `/Content/SpaceStation/Blueprints/Weapons`で各武器のタイプを選べます。ここでは`BP_TurretGatling`を開きます。
2. `/Content/SpaceStation/Blueprints/Weapons/BP_TurretGatling(Self)`の詳細から`Weapon -> Shooting Delay:1`にして`Turret -> Turret Aiming Speed:150`にします。これは発射速度とターゲットに合わせる速度の設定です。
3. `/Content/SpaceStation/Blueprints/Weapons/Parent/DT_WeaponTypes`を開きます。ここで弾丸の音(sound)やエフェクト(effect)を設定します。
4. 最後に`/Content/Blueprints/CBP_SandboxCharacter(Self)`の詳細で`actor(アクタ) -> Tags[0] -> Allow Shooting`, `Tags[1] -> ShootingTarget`を追加します。これでPlayerがターゲットにロックされるようになります。
5. あとは`/Content/SpaceStation/Blueprints/Weapons/BP_TurretGatling`をmapに置いてください。
### ダメージ処理
damage(ダメージ)の処理を書きます。
`/Content/Blueprints/CBP_SandboxCharacter``Event Any Damage`を追加します。これでdamageを受けますが、hpを用意してそれが0になったときゲームオーバー(gameover)する処理を書いたりします。
<iframe src="https://blueprintue.com/render/xbwy4u36/1" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
これはGame Ability System(GAS)を使うと便利です。
https://dev.epicgames.com/documentation/ja-jp/unreal-engine/gameplay-ability-system-for-unreal-engine
## HPゲージの表示
`widget``ProgressBar`を作ります。まず`BP_Mech`にbox collisionを入れて、そこに入ると`boss active`になります。`true`ならwidgetを表示する仕組みです。
ProgressBarは`0.0 -> 1.0`なので注意してください。`HP_Current`から`HP_Max`を割り算します。
<iframe src="https://blueprintue.com/render/xbwy4u36/2" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
## 撃破処理
bossを撃破するまでの処理を書きます。
damageを受けて0になると消滅し、ドロップアイテムを落とします。消滅時はniagaraでeffectを再生します。damageを受けたときも同じです。
ドロップアイテムは`nice interaction system`というassetを使用しています。これは`E`を押すとアイテム(item)が取得できるものです。
<iframe src="https://blueprintue.com/render/xbwy4u36/3" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>

8
book/crs/03_jump.md Normal file
View File

@ -0,0 +1,8 @@
# ボスのジャンプ攻撃を作る
1. control rig(CR_Mech)をlevelに配置し、シーケンサからrigを動かしながらanimを作ります。時間ごとにboneの例えば、`base_ctrl`を動かして、`+`を押していきます。
2. 作ろ終わったらsk meshである`CR_Mech`を右クリックで`アニメーションシーケンスをベイク`します。
3. 保存されたanim sequenceを開いて通知などを追加します。攻撃時のみcollisionを有効にする必要があるからです。
4. 通知から受け取る情報でcollisonをenable/disableにします。
<iframe width="100%" height="415" src="https://www.youtube.com/embed/gk28r9cm5eQ?mute=1&rel=0&showinfo=0&controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

6
book/crs/README.md Normal file
View File

@ -0,0 +1,6 @@
# control rig sample
[control rig sample](https://www.fab.com/ja/listings/2ce3fe44-9ee6-4fa7-99fc-b9424a402386)
`control rig sample`では人間以外のcharacterを動かすことができます。

54
book/default/00_asset.md Normal file
View File

@ -0,0 +1,54 @@
# asset/plugin
現在使用しているplugin(プラグイン)やasset(アセット)の`version(バージョン)`を記述します。
ゲームは無料のassetだけでも作れます。しかし、時間やクオリティを向上させたい場合は有料のassetを使いましょう。
本書の一部では有料assetの使い方を解説します。[sale](https://www.fab.com/ja/channels/unreal-engine?ui_filter_price=1&ui_filter_is_discounted=1&is_discounted=1)中のものを探しましょう。
## asset
|name|latest|body|
|---|---|---|
|[game animation sample](https://dev.epicgames.com/documentation/en-us/unreal-engine/game-animation-sample-project-in-unreal-engine)|5.5|キャラクターをパルクールアクション|
|[city sample](https://www.unrealengine.com/marketplace/ja/product/city-sample)|5.5|大規模な都市を構築|
|[control rig sample](https://www.fab.com/ja/listings/2ce3fe44-9ee6-4fa7-99fc-b9424a402386)|5.5|人間以外のキャラクター|
|[content examples](https://www.fab.com/ja/listings/4d251261-d98c-48e2-baee-8f4e47c67091)|5.5|機能別サンプル|
## plugin
|name|latest|body|
|---|---|---|
|[pixel streaming](https://github.com/EpicGamesExt/PixelStreamingInfrastructure/blob/master/Docs/pixel-streaming-2-migration-guide.md)|2|ゲームをserverにdeployしてwebからプレイ|
|[twinmotion](https://www.twinmotion.com/ja)|20250101p|建造物をインポート|
|[vrm4u](https://github.com/ruyo/VRM4U/releases/tag/20250206)|20250206|vrmモデルを動かす|
|[kawaiiphysics](https://github.com/pafuhana1213/KawaiiPhysics)|20241201|揺れものを設定|
|[varest](https://github.com/ufna/VaRest)|20240828|curlのようなもの。supportが終了しているのでbuildが必要|
|[tatools](https://www.fab.com/ja/listings/a5d3b60d-b886-4564-bf6d-15d46a8d27fe)|20241206|animを作る|
|[ui navigation 3.0](https://www.fab.com/ja/listings/a91f6e67-5c2d-46ef-926d-00a35525579c)|20250126|スタート画面を作る|
|[dlss](https://developer.nvidia.com/rtx/dlss/get-started#ue-version)|20250301|nvidiaの描写速度|
## その他のasset
ここからは無料のassetでおすすめのものを紹介します。使っていないものもあります。
|name|body|
|---|---|
|[twinmotion-high-tech-pack-1](https://www.unrealengine.com/marketplace/ja/product/twinmotion-high-tech-pack-1)|家電製品|
|[automotive bridge scene](https://www.fab.com/ja/listings/a472df9d-9179-4743-8d41-335f9ef55546)|道路や橋|
|[animal variety pack](https://www.fab.com/ja/listings/2dd7964c-a601-4264-a53d-465dcae1644c)|有名な動物モデル|
|[quadruped fantasy creatures](https://www.fab.com/ja/listings/52d686b6-1180-4f26-901f-ce3c69a14767)|有名な幻獣モデル|
|[ueplugin-accessvariablebyname](https://github.com/colory-games/UEPlugin-AccessVariableByName)|名前を取得するplugin|
|[GASP-ALS](https://github.com/PolygonHive/GASP-ALS)|GASPの改造版|
## 有料のasset
[こちら](/plan/README.md)
## link
こちらで最新情報を取り扱っています。
- https://git.syui.ai/ai/ue/
- https://blueprintue.com/profile/ai/
- https://dev.epicgames.com/community/profile/organization/gdkg/ai/

103
book/default/01_start.md Normal file
View File

@ -0,0 +1,103 @@
# start
## ueとは
`Unreal Engine``epic games`という会社が作っているゲームエンジンです。よく`ue`と略されます。
最新バージョン(latest version)は`5`なので、`ue5`となります。
`ue`の他には`unity`, `godto`が有名です。`DirectX`というものがあり、例えば、`DX12`からGPUに命令を送ることができます。ゲームエンジンの多くは`DX11`, `DX12`を使用します。
|name|url|
|---|---|
|unreal engine|https://unrealengine.com/|
|unity|https://unity.com/|
|godto|https://godotengine.org/|
ソース(source)からビルド(build)して使うこともできます。一部でbuildしないと使えない機能があります。private repoなので[こちら](https://www.unrealengine.com/ja/ue-on-github)からアクセス権をもらいます。
- https://github.com/EpicGames/UnrealEngine
## ueの特徴と注意
`c++``blueprint`で書きます。
ueの特徴はグラフィックが綺麗なことです。と言ってもきれいなグラフィックはunityなどでも実現可能です。しかし、ueは初期設定でもそれが実現できるので、主にグラフィック用途で使用されています。
ueはバグ(bug)が多く基本的に動きません。これはアップデート(update)が速く、3Dを扱うソフトウェア(software)なので仕方ありません。複雑なのです。
ueを長く使っているとわかることですが、ゲーム制作にはあまり向きません。unityのほうがおすすめです。ueはきれいな画像やシーンを作る用途におすすめです。
「ueはバグが多く基本的に壊れている」このことを最初に理解しておかないと「おかしいなあ」と時間を無駄にしてしまいます。また、保存せず長時間コードを書き続けるのは危険です。クラッシュ(crash)すると消えてしまいます。プロジェクト(project)そのものが壊れることもよくあります。注意しましょう。
そして、バグにぶつかっても情報がほとんどなく、自己解決するしかありません。情報量は非常に少ないと言えます。
- グラフィックがきれい
- バグが多い
- 情報が少ない
## unityやblenderも使っている
私はキャラクター(character)を[vroid](https://vroid.com/studio)で作っています。
そして、`.vrm`の開発は主に[unity](/unity/)が中心です。なぜなら`.vrm`の仕様を作っているpixivがunityで読み込むための[plugin](https://github.com/vrm-c/UniVRM)を開発しているからです。そのためかvrmに対応する多くのツールはunity専用です。
もし`.vrm`を扱う場合は、どちらにせよ`unity`を使うことになると思います。私もモデルのカスタマイズなどでunityを使っています。
また、モデリングには[blender](/blender)を使用しています。
つまり、本当にueでゲームを制作すべきかはよく考えなければいけません。ゲーム開発は使用するツールが少ないほど安定します。
結局、unityやblenderを使うことになるなら、unityで開発するのがオススメです。情報量、安定性、ツールの豊富さなどからそう判断します。
```diff
+ [vroid] --> [vrm] --> [blender] --> [unity]
- [vroid] --> [vrm] --> [blender] --> [unity] --> [ue]
```
## ueを使う理由
私がueを使う理由は、最初にゲーム開発を始めたとき使ったものがueだったからです。その時の感動は忘れません。
その後、色々な情報を見聞きし、ueは初心者に向かないことを知りました。また、vrmを使う場合はunityのほうが圧倒的に有利で、情報も多く、ツールも豊富です。
では、なぜueを使い続けているのでしょう。
それはueの将来に期待しているからです。
確かに、現時点でueはおすすめできない。でも将来は...?
未来のことはわかりません。バグが多いueですが、アップデートも速いので、それは変化も進化も速いということ。
失敗を恐れず最新の技術を試していきましょう。
## 用語の解説
|title|short|body|
|---|---|---|
|unrealengine|ue|アンリアルエンジン|
|version|ver|バージョン|
|code||コード、プログラミング言語で書かれた文章|
|build||ビルド、osで実行できる形式にすること。windowsなら`.exe`|
|compile||コンパイル、コンピュータで実行できる形式にすること。buildと同じ意味で使われる|
|source|src|ソース、主にソースコードの略|
|server||サーバー、リクエストに応じるコンピュータ|
|deploy||serverに実行ファイルを置くこと|
|example|ex|例、uriではexample.comが有名|
|install||インストール、アプリをインストールすること|
|application|app|アプリ、ソフトウェア(software)のこと|
|library|lib|ライブラリ、softwareを構築するための部品|
|package|pkg|パッケージ、appだったり、libだったり色々。基本的にpkg managerでinstallできるものを指す|
|update|up|アップデート、5.5.3の`x.x.3`の部分を言う ex: 5.5.2 -> 5.5.3|
|upgrade||アップグレード、5.5の`x.5`の部分を言う ex: 5.4 -> 5.5|
|asset||アセット、ueでは購入できるlibやexampleを指す|
|plugin|plug|プラグイン、エンジンに直接入れる追加機能。新たなblueprintなどを使えるようになる|
|crash||クラッシュ、アプリやosが落ちること|
|cache||キャッシュ、一時ファイルのこと。tmpなども使われる|
|repository|repo|リポジトリ、主にsrc codeの一式が置いてある場所|
|project||プロジェクト、ueでは主に新しいゲームを作った時のフォルダ一式|
|blueprint|bp|ブループリント、ueのードベースで書く形式。anim blueprintはabp、character blueprintはcbpと略される事が多く、ファイル名は`BP_XXX`, `ABP_XXX`, `CBP_XXX`となる。基本大文字が使われる|
|variable|var|変数、一時的な値の保存場所|
|support||サポート|
基本的に英語で書けるものは英語で書きます。ueのmenuは英語にするのがおすすめです。様々な単語に慣れておきましょう。

View File

@ -0,0 +1,53 @@
# install
srcからbuildしない場合は`epicgames launcher`からinstallします。
https://www.unrealengine.com/download
また、[vsinstaller](https://visualstudio.microsoft.com/ja/downloads/)を使用して必要なpackageを入れてください。
![](../img/0001.png)
[vscode](https://github.com/microsoft/vscode)でbuildするには`.uproject`を右クリックして`.sln`を作ります。
## package build
まずは新しいprojectを作り、package buildできるかを試してみましょう。
ueではbuildが通らないことがよくあります。長い時間をかけて作り上げたもののbuildが通らない事態は避けましょう。
なお、`mac`, `linux`は、ほとんどうまくいきません。package化に成功してもappが正常に起動しないことがあります。使用するpluginやassetなども影響します。
```sh
# corss compile tool : https://dev.epicgames.com/documentation/ja-jp/unreal-engine/linux-development-requirements-for-unreal-engine
# ubuntu(xorg + nvidia)
$ sudo apt-get install xorg xvfb
Xvfb :99 &
export DISPLAY=:99
$ sudo apt-get install vulkan-tools
$ sudo apt-get install mesa-vulkan-drivers
```
## engineとproject
installする場所は自分で決められます。参考の場所を紹介します。
```sh
# engine
C:\Program Files\Epic\UE_5.5\Engine\Binaries\Win64\UnrealEditor.exe
# project
C:\Users\$USER\Documents\Unreal Projects\MyProject\MyProject.uproject
```
## windows tool
|name|url|
|---|---|
|pwsh|https://github.com/PowerShell/PowerShell|
|windows terminal|https://github.com/microsoft/terminal|
|openssh|https://github.com/PowerShell/Win32-OpenSSH|
|vscode|https://github.com/microsoft/vscode|

91
book/default/03_tips.md Normal file
View File

@ -0,0 +1,91 @@
# tips
この章は読み飛ばしてください。まとめやすいように重要項目を上にしています。
最初はわからないかもしれませんが、最後まで読んでまた来ると、わかるようになっているかもしれません。
## 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]
```
<iframe src="https://blueprintue.com/render/_q-q_ffz/" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
基本的にこれを利用して、他の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]`にします。
<iframe src="https://blueprintue.com/render/pvn4lao9/2" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
確認してみましょう。`[9]`を押すと`[yes][no]`が表示されます。
<iframe src="https://blueprintue.com/render/pvn4lao9/1" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>

48
book/default/README.md Normal file
View File

@ -0,0 +1,48 @@
# default
## 本書の目的
ue5でゲームを作成するまでの過程をまとめます。
主に`example`形式で記述し、実行するとその通りの結果になることを目指します。
|name|latest|body|
|---|---|---|
|[unreal engine](https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5.5-release-notes)|5.5.3|ゲームエンジン|
## パソコンのスペック
開発するゲームによりますが、GPUはnvidiaの`RTX 4060Ti`を使っています。特に不満はありません。
作りたいゲームによってはGPUは不要です。オープンワールドを作るならGPUはあったほうがいいと思います。
多くの場合、ue5のバグのほうが問題で、GPUの性能をほとんど引き出せていないことのほうが問題です。スペックはあまり関係なかったりします。
ただし、ストレージの読み書き速度は重要です。ueやprojectを入れるストレージには注意してください。
## 便利なサイト
|name|body|
|---|---|
|[dev.epicgames.com](https://dev.epicgames.com/community/)|開発者コミュニティ|
|[perplexity.ai](https://www.perplexity.ai/)|検索エンジン|
|[suno.com](https://suno.com/)|作曲|
|[vroid.com](https://vroid.com/studio/)|3Dモデル|
## 使用するタグ
### youtube
`https://www.youtube.com/embed/${id}?start=0&end=10&mute=1&rel=0&showinfo=0&controls=0`
```html
<iframe width="100%" height="415" src="https://www.youtube.com/embed/?start=0&end=10&mute=1&rel=0&showinfo=0&controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
```
### blueprint
`https://blueprintue.com/render/${id}/${n}`
```html
<iframe src="https://blueprintue.com/render/" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
```

2
book/end/README.md Normal file
View File

@ -0,0 +1,2 @@
![](../cover_b.jpg)

11
book/gasp/01_character.md Normal file
View File

@ -0,0 +1,11 @@
# キャラクターを追加する
これには`IKリターゲット`が必要です。
1. `Content/Blueprints/CBP_SandboxCharacter_Manny`をcopyして`CBP_SandboxCharacter_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`を参照します。
これで新しいキャラを使用することが可能になります。

12
book/gasp/02_jump.md Normal file
View File

@ -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`にします。

4
book/gasp/03_vrm.md Normal file
View File

@ -0,0 +1,4 @@
# キャラクターを作る
[こちら](/vrm4u/01_make.html)のページで解説します。

62
book/gasp/04_vmc.md Normal file
View File

@ -0,0 +1,62 @@
# モーションキャプチャで動かす
カメラ(camera)からcharacterを動かす技術をモーションキャプチャ(motion capture)といいます。様々なprotocol(プロトコル)がありますが、`vrm4u`では[vmc](https://qiita.com/mintan/items/72d63cce4e6197b151b7)というprotocolを使います。
`epic games`は[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を有効にする
<iframe width="100%" height="415" src="https://www.youtube.com/embed/BsLOlAr-wBY?si=jahPUVD8YMMfefvm&start=195&end=204&mute=1&rel=0&showinfo=0&controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
キャラクターがidle状態、つまり、停止しているときだけVMCのモーションキャプチャを反映させます。
これはVMCモードの変数を用意し、ABPで条件を書いて実現しています。キャラクターを動かしたときは一時的に無効にします。
関数を作り、bool型でグローバル変数で作ります。それをVMCモードの`enable/disable`とします。カメラは正面と通常を切り替えています。
```sh
/Content/Blueprints/CBP_SandboxCharacter
```
<iframe src="https://blueprintue.com/render/za634zjp/2" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
移動するときは一時的に無効にします。移動が完了すると有効にします。GASの移動は終了後に少し滑るので`delay`を入れています。
<iframe src="https://blueprintue.com/render/za634zjp/3" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
```sh
/Content/Chracters/$model/ABP_Pose_$model
```
`Blend Poses by bool`を使います。`[Mesh Space RefPose] --> [VrmVMC] --> [Blend Poses by bool(true)]`
<iframe src="https://blueprintue.com/render/za634zjp/4" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>

14
book/gasp/05_kawaii.md Normal file
View File

@ -0,0 +1,14 @@
# 揺れものを設定する
[kawaiiphysics](https://github.com/pafuhana1213/kawaiiphysics)
`$project/Plugins/kawaiiPhysics/kawaiiPhysics.uplugin`
1. 基本的には`/Content/Characters/$model/ABP_Pose_$model`に設定します。
2. 外付けの服などに設定する場合はABPを作成し、そこに設定します。
<a href="../img/0002.png"><img src="../img/0002.png"></a>
服が揺れる様子です。`limit(制限) -> Capsule Limits -> Driving Bone`にBone(ボーン)を入れて体に入りこまないようにしています。
<iframe width="100%" height="415" src="https://www.youtube.com/embed/0Ig_-JSRV0M?si=Kz_jCbYTHr_OzPpP&start=28&end=50&mute=1&rel=0&showinfo=0&controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

15
book/gasp/06_camera.md Normal file
View File

@ -0,0 +1,15 @@
# カメラワークを設定する
スキル発動したときカメラをぐるっと回す演出です。
正面カメラを設置し、タイムラインで動かしたあとに通常(後方)カメラに切り替えることで実現しています。
<iframe width="100%" height="415" src="https://www.youtube.com/embed/BsLOlAr-wBY?si=jahPUVD8YMMfefvm&amp;start=29&end=34&amp;mute=1&rel=0&showinfo=0&controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
```sh
/Content/Blueprints/CBP_SandboxCharacter
```
<iframe src="https://blueprintue.com/render/exmpoyfu/1/" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
ボス戦のときだけこの演出を実行します。なお、`true`, `false`はどちらも最終的に`skill(スキル)`の実行につながるようにしてください。

27
book/gasp/07_anim.md Normal file
View File

@ -0,0 +1,27 @@
# アニメーションを作成する
control rigからも作成できます。しかし、購入したものを使うのが一番です。
[magicalanimset](https://www.fab.com/ja/listings/a63386b8-7cad-42cd-8b81-a9de147e1f08)
無料でやるなら`.fbx`, `.vrma`などから作成する方法があります。
- https://www.mixamo.com/
- https://booth.pm/ja/items/5512385
- https://github.com/BandaiNamcoResearchInc/Bandai-Namco-Research-Motiondataset
## control rigから作る
再生して録画ボタンを押すと作れます。
## tatoolsを使う
[tatools](https://www.fab.com/ja/listings/a5d3b60d-b886-4564-bf6d-15d46a8d27fe)を使います。
https://github.com/threepeatgames/ThreepeatAnimTools
## unityから持ってくる
[こちら](/unity/01_fbx.html)を参考にしてください。

5
book/gasp/08_niagara.md Normal file
View File

@ -0,0 +1,5 @@
# niagaraでダメージを出す
- https://www.youtube.com/watch?v=wYq2SR63vkM

23
book/gasp/09_chair.md Normal file
View File

@ -0,0 +1,23 @@
# 椅子に座る
椅子に座るのと階段に登るのは鬼門です。完璧に調整するのが難しいからです。
椅子に座る動作を設定します。大変ですが以下のcomponentを使うと簡単にできます。調整は難しいですね。私の場合はgame animation sampleを使っていますが、最新版では勝手に動きが制御されるためanim montageをそのまま再生できません。したがって、別にabpを作成し、それを呼び出します。
- https://www.youtube.com/watch?v=VzyvpFvon0g
- https://blueprintue.com/blueprint/wg_vyr4o/
# animation blueprint linking showcase
[こちら](https://www.fab.com/ja/listings/e52251d2-1a90-4428-a685-c5d4acdd9c07)にチュートリアルが公開されています。
主にABPの切り替えと椅子に座る内容があります。docsも公開されています。
[External Communication Showcase](https://docs.google.com/document/d/1D2rYh7XYkYaBlMPcD7rL4s6pV6e6Ty9xDYb9KW836NA/edit?tab=t.0#heading=h.tb8y73m27obr)
# replicated interaction kit vol 3
`replicated interaction kit vol 3`というassetを改造します。
[こちら](/plan/05_chair.html)を参考にしてください。

15
book/gasp/10_stairs.md Normal file
View File

@ -0,0 +1,15 @@
# 階段を登る
階段でのめり込む問題があります。これを解消します。
1. `/Blueprints/ABP_SandboxCharacter`でAnimGraphの中からFoot Placementを探す。
2. 骨盤(pelvis)の悪態道補正モードを`Sudden Motion Only`から`Component Space`にする。
また、階段の段差(Step Height)は小さくしてください。のめり込まなくなった反面、スムーズさがなくなり画面がガタガタ揺れます。
## 階段を作る
1. map(level)を開く
2. `編集モード -> モデリング -> 作成 -> 階段`
3. `Step Height: 10.0`

35
book/gasp/11_run.md Normal file
View File

@ -0,0 +1,35 @@
# アニメーションを変更する
今回はダッシュ(sprint)で一定のスピード(speed)に達すると`kawaii_run`と名付けたアラレちゃん走りに切り替わるようにします。
<iframe width="100%" height="415" src="https://www.youtube.com/embed/HaykQT5vBNY?mute=1&rel=0&showinfo=0&controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
1. ABP_SandboxCharacterのAnimGraphを開きます。`cached pose`を作って処理を分割します。
2. cached poseを呼び出して`Layered blend per bone`のbaseにつなぎます。重要なのはLayered blendの詳細で`spine_03`のボーンを入れること。
3. blendにアニメシーケンスをつなぎます。私は`unity -> .vrma -> vrm4u`で作成したものを使いました。
4. blend weightsの値をconfigから持ってきます。これで`CBP_SandboxCharacter`から制御できます。ダッシュが一定速度に達すれば1、それ以外は0にします。
![](/img/0015.png)
<iframe src="https://blueprintue.com/render/9jgpq1oj/1" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
## アニメシーケンスを作る
- https://booth.pm/ja/items/2845548
これをunityを使って[変換](/unity/01_fbx.html)して使いました。
## リターゲットによる調整
`kawaii_run`は走っているときに両足を中央に持っていくのが正しいですが、このままでは足が開いてしまいます。
これを調整するにはリターゲットのposeを変更します。使用している`RTG_UEFN_$model`を開いて、`Running Retarget`から`Editing Retarget Pose`にします。両足を回転さればokです。一方はプラス、もう一方はマイナスの値です。
- left: 0.0, -2.0, 20.0
- right: 0.0, 2.0, -20.0
## GASPでアニメーションを変更するには
`CHT_AnimationsForStateMachine`でそれぞれの項目のanimを変更すればいいのだろうかと思いましたが、走るanimに関しては、複雑すぎる上に全方位のものを用意する必要があります。
したがって、`ABP_SandboxCharacter`のblendを活用しながら適用しました。

33
book/gasp/12_weapon.md Normal file
View File

@ -0,0 +1,33 @@
# 武器を装備する
武器を手に持つ動作を追加します。
<iframe width="100%" height="415" src="https://www.youtube.com/embed/VronsCH11oo?mute=1&rel=0&showinfo=0&controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
1. SKで`装備する箇所``手に持つ箇所`のソケットを追加します。
2. そこに武器のasset(mesh)を追加し、previewします。ここでは剣(sword)を使います。
3. animを作ります。例えば、装備場所から手に持つ動作の中で剣が重なり合うようにします。
4. 重なる場所には通知で`DrawnWeapon`, `RestWeapon`を作ります。
5. それをCBP_SandboxCharacterのIAに設定します。`BP_WeaponSword`を作って武器のmeshを入れます。
## 他のキャラクターでズレてしまう
これはManny用のboneに設定されていますので、他のキャラではズレてしまいます。
対処法を考えます。
1. まず同じ名前のソケットをSKのboneに追加します。そして、位置を調整します。
2. event begin playでキャラのmeshを`Character_Mesh`の変数に入れます。それをparentに使います。
<iframe src="https://blueprintue.com/render/ml3h546e/1" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
## niagaraがズレてしまう
animにniagaraを設定している場合もズレてしまいます。これは解決法がありません。
slash(スラッシュ)などは面倒くさいのでそのまま当てていますが、大きくなりすぎています。
他のniagaraは、`BP_WeaponSword`に入れて、都度使用するときに呼び出すようにしています。
面倒ですが体型に合わせたboneを作り、そこにniagaraを付けるといいかもしれませんが、良い解決策は見つかっていません。

63
book/gasp/README.md Normal file
View File

@ -0,0 +1,63 @@
# game animation sample
[game aimation sample](https://www.fab.com/ja/listings/880e319a-a59e-4ed2-b268-b32dac7fa016)は`epic games`が提供しているassetです。
[G]ame [A]nimation [S]ample [P]rojectでGASPと略すことがあります。
[G]ame [A]bility [S]ystemもGASなので紛らわしいですね。
まずはこれを使ってキャラクター(character)を動かしてみましょう。
## level(map)
1. `/Content/Levels/DefaultLevel`を開きます。
2. 再生ボタンを押します。
3. ゲームがプレイできます。
|key|en|ja|
|---|---|---|
|w,a,s,d|move|移動|
|space|jump|ジャンプ|
|space|sprint|ダッシュ|
|ctrl|walk|歩く|
|c|crouch|しゃがむ|
|マウススクロール|camera|カメラ|
ボタンに乗るとキャラを切り替えることができます。
レベル(level)はマップ(map)とも呼ばれます。プレイ(play)する場所を作ります。
特にボタンが重要です。tipsを確認しましょう。
- https://www.youtube.com/watch?v=IqHrhcA7Rsk
`/Content/Levels/DefaultLevel`を右クリックして`参照ビューア`を選択してみます。どのファイルを参照しているかわかります。
## BP
characterは`/Content/Blueprints/CBP_SandboxCharacter`で動かしています。このファイルを開いて編集してみましょう。
1. `EventGraph`というノードが記述されている場所(画面中央)で右クリックし、`Debug Key 1`を追加します。
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_SandboxCharacter`にドラッグ&ドロップ(D&D)します。
すると`EnhancedInputAction IA_One`という赤いノードが作成されたと思います。`Debug Key 1`を削除して代わりにつなぎます。色にも意味がありますが、そのうちわかってくると思います。
ゲームを再生してみると先ほどと同じkeyで動きます。

10
book/gitbook.md Normal file
View File

@ -0,0 +1,10 @@
## start gitbook(honkit)
```sh
$ nvm use 23
$ npm install honkit --save-dev
$ npx honkit init
$ npx honkit serve
$ npx honkit build
```

BIN
book/img/0001.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 KiB

BIN
book/img/0002.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 KiB

BIN
book/img/0003.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 960 KiB

BIN
book/img/0004.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 KiB

BIN
book/img/0005.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 498 KiB

BIN
book/img/0006.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
book/img/0007.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
book/img/0008.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

BIN
book/img/0009.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
book/img/0010.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

BIN
book/img/0011.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
book/img/0012.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 749 KiB

BIN
book/img/0013.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 KiB

BIN
book/img/0014.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
book/img/0015.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

9
book/issue/README.md Normal file
View File

@ -0,0 +1,9 @@
# issue
問題の解決を目指します。
ゲーム開発をしていると、issue(問題)がたくさん発生します。特にueはbug(バグ)が多く、機能は実験的(pre releases)であることが多いです。
また、開発者(dev)のフォーラム(forum)もあります。
https://forums.unrealengine.com/

22
book/issue/SUMMARY.md Normal file
View File

@ -0,0 +1,22 @@
# Summary
* [ue](issue/ue/README.md)
* [error II-E1001](issue/ue/ue_01.md)
* [game animation sample](issue/gasp/README.md)
* [GameplayCameraをdisableにする](issue/gasp/gasp_01.md)
* [cameraが急接近する](issue/gasp/gasp_02.md)
* [characterのcomponentが初期化される](issue/gasp/gasp_03.md)
* [IA_Sprintのダッシュができなくなる](issue/gasp/gasp_04.md)
* [traversableが機能しなくなる](issue/gasp/gasp_05.md)
* [city sample](issue/city/README.md)
* [buildが遅い場合](issue/city/city_01.md)
* [ue5.5ではbuildが通らない](issue/city/city_02.md)
* [問題が起こったときにresetする](issue/city/city_03.md)
* [playerが地面に埋まってしまう](issue/city/city_04.md)
* [他のmapとの統合](issue/city/city_05.md)
* [BGMを変更する](issue/city/city_06.md)
* [blender](issue/blender/README.md)
* [衣装の背後に黒いチラつきが発生する](issue/blender/blender_01.md)
* [vrm4u](issue/vrm4u/README.md)
* [customで衣装の半分が灰色になる](issue/vrm4u/vrm4u_01.md)

View File

@ -0,0 +1,3 @@
# blender
https://projects.blender.org/blender/blender/issues

View File

@ -0,0 +1,6 @@
# 衣装の背後に黒いチラつきが発生する
ueで読み込むと衣装の背後に黒いチラつきが発生する問題は、vrm-outlineが原因です。
これはblenderの問題ではありませんが、勘違いしやすいので、ここに掲載します。

View File

@ -0,0 +1,7 @@
# ueで読み込むと一部のmaterialが正しく表示されない
この現象はblenderで作った`.vrm`をvrm4uで読み込み、一旦、ueを終了するとその後、materialがおかしくなります。
しかし、`vrm1`の出力は正常なので、それを読み込んで生成されたmaterialを`SK_${name}`にセットしています。

View File

@ -0,0 +1,8 @@
# 髪の毛が頭に追従しなくなる事がある
激しく動いたときなど、髪の毛と頭が分離してしまうことがありますが、これはウェイトが正しく塗られていないことが原因です。
armature(bone)を統合したとき、`head`,`neck`, `J_Bip_C_Head`, `J_Bip_C_Neck`に混在してウェイトが塗られていることがあります。
例えば、赤く塗るのは`J_Bip_C_Head`だけにしましょう。`耳``後頭部の内部(髪色部分)`が重要です。

View File

@ -0,0 +1 @@
https://forums.unrealengine.com/search?q=city%20sample

View File

@ -0,0 +1,14 @@
## buildが遅い場合
もしcity sampleのmapを使わない場合は、buildが遅くなってしまいます。
ueのpackage化が遅い場合、使用するmap以外をbuildしないようにすることで、処理時間を短縮できます。以下の手順で設定を行います。
1. `プロジェクト設定`を開きます。
2. 「パッケージ化」セクションに移動します。
3. 「マップのみをクック」オプションにチェックを入れます。
4. 「パッケージ化されたビルドに含めるマップのリスト」に、必要なマップ(.umapファイルを指定します。
この設定により、指定したmapのみがpackage化され、データサイズが小さくなり、処理時間も短縮されます。

View File

@ -0,0 +1,39 @@
## ue5.5ではbuildが通らない
`2024-11-18`時点ではcity sampleはue5.5でbuildが通りません。ue5.4では通ります。
`Engine/Plugins/Performance/AutomatedPerfTestingにAutomatedPerfTestConfig.cs`, `AutomatedPerfTestNode.cs`が含まれていないため`${project}/Build/Script/CitySample.Automation.csproj`に記述されているcompileが通らないのです。`AutomatedPerfTesting`は5.5で追加されたpluginです。
```html
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="CitySample.Automation.csproj.props" Condition="Exists('CitySample.Automation.csproj.props')"/>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Compile Include="$(EngineDir)\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\AutomatedPerfTestConfig.cs" />
<Compile Include="$(EngineDir)\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\AutomatedPerfTestNode.cs" />
</ItemGroup>
</Project>
```
> Experimental release of Automated Perf Testing Plugin v0.1, providing Gauntlet Test Controllers, UAT Test Nodes, and BuildGraph macros for adding common automated performance tests to a projects automated build and test.
- https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5.5-release-notes
- https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Plugins/AutomatedPerfTesting
これはgithubにあるsrcから持ってくるしかありません。アクセスするにはorgに参加します。
https://github.com/EpicGames/UnrealEngine/tree/release/Engine/Plugins/Performance/AutomatedPerfTesting/Build/Scripts
1. `$(EngineDir)\Plugins\Performance\AutomatedPerfTesting\Build\Scripts`フォルダを作ります。`$(EngineDir)`はueがインストールされているディレクトリです。
2. githubの[src](https://github.com/EpicGames/UnrealEngine/tree/release/Engine/Plugins/Performance/AutomatedPerfTesting/Build/Scripts)から持ってきた`$(EngineDir)\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\AutomatedPerfTestConfig.cs`, `$(EngineDir)\Plugins\Performance\AutomatedPerfTesting\Build\Scripts\AutomatedPerfTestNode.cs`を同ディレクトリに置きます。
また、`CitySampleCookedEditor.Target.cs`を削除するとbuildが通ったという報告があります。
https://forums.unrealengine.com/t/automatedperftesting-plugin-does-not-build-when-building-city-sample-in-ue5-5/2134722/9

View File

@ -0,0 +1,7 @@
## 問題が起こったときにresetする
`/Content/Map/Small_City_LVL.umap``/Content/__ExternalActors__/Map/Small_City_LVL`を上書きします。copy元は`VaultCache`からでもいいですし、新しく作った`CitySample`のprojectからでもいいです。
基本的に新しいprojectを作成するときは`VaultCache`からcopyされます。これがないとdownloadから`VaultCache`が生成されます。

View File

@ -0,0 +1,29 @@
## playerが地面に埋まってしまう
GASPと統合するとcity sampleに置かれた物体に触れられません。collisionが発生しないのです。
原因は`Gameplay Camera`というpluginです。`$project/Config/DefaultEngine.ini``DDCVar.NewGameplayCameraSystem.Enable`を追加し、関数である`Setup Camera`を実行している場合、characterのcollisionが機能せず地面に埋まってしまう問題があります。
- Gameplay Camera
- Setup Camera
- `DDCVar.NewGameplayCameraSystem.Enable`
```sh
[/Script/Engine.DataDrivenConsoleVariableSettings]
+CVarsArray=(Type=CVarBool,Name="DDCVar.NewGameplayCameraSystem.Enable",ToolTip="",DefaultValueFloat=0.000000,DefaultValueInt=0,DefaultValueBool=True)
```
`Setup Camera`を実行しないようにするか、`DDCVar.NewGameplayCameraSystem.Enable`をfalseにします。
### Collision Trace Channel
`Collision Trace Channel`を設定するには、`Config/DefaultEngine.ini`を編集する必要があります。以下の手順で行います。GASPは`traversable`を追加します。これが追加されていないと動きません。
`ECC_GameTraceChannel${n}`に注意してください。
```sh
[/Script/Engine.CollisionProfile]
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel11,DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False,Name="Traversable")
```

View File

@ -0,0 +1,7 @@
## 他のmapとの統合
mapにはactorがまとめられているものがあり、それはmapにくっついていません。移動できない場合があります。
基本的にはmap[A]とmap[B]はある程度位置を完成させてからcopyしましょう。

View File

@ -0,0 +1,22 @@
# BGMを変更する
例えば、BGMの一部を変更したい場合は、`プロジェクト設定 -> ゲーム -> World Audio Data`を見てください。
私はmatrix(マトリックス)のテーマを消したかったので、`/Content/Audio/MetaSounds/Music/`にある`music_leavebehind_New_Mix_Meta`, `music_leavebehind_New_Mix_NHT_Meta`の音量を`0.0`にしました。
## 音楽を作る
ゲームには音楽が欠かせません。普段は中毒性のあるゆったりした音楽を流しながら、ここぞという場面では、場を盛り上げる音楽を流します。ポケモンの音楽が好きですね。
このような演出は、ゲームの出来栄えの50%以上を占めると考えています。
つまり、音楽のパワーはゲームでは特に重要になります。そして、音楽はそのゲームやキャラクターの印象を決定づける力があります。気をつけましょう。
では、音楽を作るにはどうすればいいのでしょう。
私は`suno`でBGMを自作しています。
- https://suno.com/
AIで作るとしても、そこには意味を込めなければなりません。キャラクターのテーマソングを思い浮かべください。その人はどんな人で、ここはどのような場所なのか。それがわかれば、プレイヤーの気持ちを思い浮かべることができるはずです。キャラクターや場所に合った曲を目指します。

View File

@ -0,0 +1,32 @@
# 表示されなくなったサイト
昔は表示され操作もできたいくつかのサイトがweb browser pluginで操作も表示もされない現象が発生しています。ずっと待機中になります。
- https://web.syu.is/profile/ai.syu.is
- https://eyes.nasa.gov/apps/solar-system
一つは自分が管理しているサイトですが、cloudflareを使用しています。おそらく、cloudflareのセキュリティが動作しているのだと思います。web browserのbrowser versionが低いことも要因の一つかもしれません。
```json
{
"time": "2024-10-20T08:00:00.00Z",
"id": "1",
"remote_ip": "ipv6",
"host": "web.syu.is",
"method": "GET",
"uri": "/",
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ++UE5+Release-5.4-CL Chrome/90.0.4430.212 Safari/537.36",
"status": 200,
"error": "",
"latency": 0,
"latency_human": "1.0ms",
"bytes_in": 0,
"bytes_out": 0
}
```
## 今のところうまく表示されているサイト
なぜか`solar-system`と同じものを使用している`asteroids`は表示されます。そのうち制限されるかもしれませんが。それともサイトの作りでしょうか。
- https://eyes.nasa.gov/apps/asteroids/#/planets/earth

View File

@ -0,0 +1 @@
https://forums.unrealengine.com/search?q=gasp

View File

@ -0,0 +1,18 @@
## GameplayCameraをdisableにする
GASPで使用されるGameplayCamera(plugin)が壊れているため、これを削除する人が多いです。
削除方法は簡単で`/Content/Blueprints/CBP_SandboxCharacter``GameplayCamera`というcomponentを削除し、err箇所のnodeを修正すると完了です。
仕組みを解説すると、このcomponentでCameraに`/Blueprints/Cameras/CameraAsset_SandboxCharacter`を指定しています。そして、`SetupCamera`という関数でenable(有効)にします。関数では`$project/Config/DefaultEngine.ini`にある`DDCVar.NewGameplayCameraSystem.Enable`の値がtrueなら使用されます。
```sh
[/Script/Engine.DataDrivenConsoleVariableSettings]
+CVarsArray=(Type=CVarBool,Name="DDCVar.NewGameplayCameraSystem.Enable",ToolTip="",DefaultValueFloat=0.000000,DefaultValueInt=0,DefaultValueBool=True)
```
`DDCVar.NewGameplayCameraSystem.Enable`をfalseにするか、あるいは`branch`の処理を削除し、false後の処理(Set View Target with Blend)につなげるかで機能をdisable(無効)にすることができます。
私はなるべく最新機能を使用したいと思っています。ですが、先に述べたように色々と壊れているため、問題がたくさん発生します。原因が`GameplayCamera`にあることを突き止めるのも苦労しますから、disableにしておくのが正解かもしれません。

View File

@ -0,0 +1,9 @@
## cameraが急接近する
よじ登ったり、柵を超えたりするとき、camera(カメラ)が急接近することがあります。
これは`GameplayCamera``CameraRig_CollisionOffset`が原因です。`/Content/Blueprints/CBP_SandboxCharacter``SetupCamera`という関数で使われていますので、その部分だけ外しておきましょう。
ただし、床が透けて映ってしまうようになります。

View File

@ -0,0 +1,25 @@
## characterのcomponentが初期化される
buildすると動きやカメラがおかしくなっていることに気づくかもしれません。
これはcomponentが初期化されていることが原因です。
通常、`/Content/Blueprints/CBP_SandboxCharacter`にあるcomponentは`/Content/Blueprints/RetargetedCharacters/CBP_SandboxCharacter_${name}`と共通しますが、これが初期化されているのです。例えば、100という値が入れられていたとして、初期設定が1なら、1に戻されるということです。
原因はわかりませんが、これが起こるとcameraがおかしくなったり、`IA_Sprint`でダッシュできなくなったりすることがあります。
これを解決する方法は、`/Content/Blueprints/CBP_SandboxCharacter``Event BeginPlay`でcomponentの初期設定を追加することです。
<iframe src="https://blueprintue.com/render/0lt9y0_u/1" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
この方法でも解決しない場合があります。mapを開いて一度再生したあとにbuildするとうまくいくことがあります。
また、それ以外の方法として、初期設定を全部`CBP_SandboxCharacter_${name}``Construction Script`ほうに書き出すことが考えられます。
<iframe src="https://blueprintue.com/render/iikbmf9a/1" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
1. mapを開いて、問題の動作を実行したあとにbuildする
2. `CBP_SandboxCharacter``Event BeginPlay`に書いてみる
3. `CBP_SandboxCharacter_${name}``Construction Script`に書いてみる

View File

@ -0,0 +1,7 @@
## IA_Sprintのダッシュができなくなる
ダッシュは`/Content/Blueprints/RetargetedCharacters/CBP_SandboxCharacter_${name}``Event BeginPlay`を削除することで解消しました。
nodeをつなげていなくてもevent自体を削除しなければなりません。

View File

@ -0,0 +1,8 @@
## traversableが機能しなくなる
突然、traversable(トラバーサブル)、つまり、よじ登ったりする機能が使えなくなることがあります。
いくつか原因が考えられますが、project設定の`collision > trace channel : Traversable`に問題があるのかもしれません。
collision trace channelに問題が発生するときはけっこう大変です。色々とbugがあり、一度削除して同じ名前で作り直せば動作することもありますが、余計に壊れることもあります。例えば、削除したときにBPのnodeに他のtrace channelが自動で入ってしまうことも要因になります。

1
book/issue/ue/README.md Normal file
View File

@ -0,0 +1 @@
https://forums.unrealengine.com/categories?tag=unreal-engine

37
book/issue/ue/ue_01.md Normal file
View File

@ -0,0 +1,37 @@
# error II-E1001
`Epic Games Launcher`に非常によく出るerrorです。
新しいassetをインストールする際に出ます。
時間を待てば解消されることがあります。例えば、ゲームエンジンを読み込める段階で解消されます。
それでも解消されない場合は、以下の方法を試してみてください。
## 概要
エラーコード「II-E1001」は、主にEpic Games LauncherまたはUnreal Engineでのプロジェクト作成やコンテンツダウンロード時に発生する問題です。このエラーの原因と解決策を以下にまとめます。`Epic Games Launcher`を再インストールすることでしか治らないこともあります。
1. キャッシュの破損
> Epic Games LauncherのVault Cacheに破損したデータが残っている場合、エラーが発生することがあります7。
2. ダウンロード中のクラッシュ
> コンテンツのダウンロード中にPCがクラッシュした場合、未完了のデータが原因でエラーが発生することがあります7。
3. 外部ストレージの使用
> ライブラリが外部ハードドライブ上にある場合、ランチャーが正しく認識できないことがあります7。
## 解決策
1. Vault Cacheフォルダを確認・削除
> Epic Games Launcherの「設定」からVault Cacheの場所を確認します。
> 対象コンテンツのフォルダを削除します(フォルダが空の場合も削除可能)。
> 他のフォルダを選択して、元のフォルダに戻すと解消されることがあります。
2. Vault Cacheフォルダの属性変更
> Vault Cacheフォルダを右クリックし、「読み取り専用」のチェックを外して適用します。
3. Epic Games Launcherの再起動
> ランチャーを再起動し、問題が解消されるか確認します。
> 必要であればPC自体も再起動してください。
4. 外部ストレージの確認
> ライブラリが外部ストレージ上にある場合、ランチャー設定で適切なキャッシュフォルダが指定されているか確認します7。
5. Epic Games Launcherの再インストール
> キャッシュをクリアした後、Epic Games Launcherを再インストールします。
> これらの手順で解決しない場合は、Epic Gamesサポート公式ヘルプページに問い合わせることをお勧めします。

View File

@ -0,0 +1,3 @@
# vrm4u
https://github.com/ruyo/VRM4U/issues

View File

@ -0,0 +1,8 @@
# customで衣装の半分が灰色になる
普段の衣装ではライトの加減で服に変な影がうっすら浮き上がる問題がありました。
これを解消するために`type:custom(MI_PostToon)`を当てましたが、customにすると衣装の半分が灰色になる問題が出ました。
これを解消するためにはcustomの`/custom/SK_${model}`に設定されているmaterialを編集し、`MI_PostToon`から`/Plugins/VRM4UContents/MaterialUtil/UE5/Material/MI_VrmMToonOptUnlitOpaque`に切り替えると解消されました。

5
book/json/01_varest.md Normal file
View File

@ -0,0 +1,5 @@
# apiから情報を取得する
[varest](https://github.com/ufna/VaRest)などのpluginを使うと便利です。しかし、supportが終了しているため独自にbuildする必要があります。あるいは有料のものを購入するのもいいでしょう。
<iframe src="https://blueprintue.com/render/4yf7viyt/1" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>

3
book/json/README.md Normal file
View File

@ -0,0 +1,3 @@
# json blueprint utilities
`json`を扱う。

8
book/package.json Normal file
View File

@ -0,0 +1,8 @@
{
"dependencies": {
"got": "^14.4.5"
},
"devDependencies": {
"honkit": "^6.0.2"
}
}

5
book/pixel/01_server.md Normal file
View File

@ -0,0 +1,5 @@
# 基本事項
pcのdisplay(ディスプレイ)が必要になる。画面の電源もつけておく必要があります。

32
book/pixel/README.md Normal file
View File

@ -0,0 +1,32 @@
# pixel streaming
`pixel streaming``.exe`をサーバー(server)に置いてwebからプレイするためのものです。
[pixel streaming 2](https://github.com/EpicGamesExt/PixelStreamingInfrastructure/)が最新です。[ガイド](https://github.com/EpicGamesExt/PixelStreamingInfrastructure/blob/master/Docs/pixel-streaming-2-migration-guide.md)に従い構築しましょう。
1. projectのpluginで`pixel streaming`をdisableにし、`pixel streaming 2`をenableにする。
2. これをpackage buildして、app.exeを作ります。引数は以下のようにしてください。
なお、sshなどで作業している場合はfirewallの許可が出ませんので、local-desktopで作業してください。または手動でruleを更新してください。
```sh
./$project/Windows/app.exe -AudioMixer -RenderOffScreen -PixelStreamingSignallingURL="ws://127.0.0.1:8888"
```
次にserverの設定です。
```sh
# git clone https://github.com/EpicGamesExt/PixelStreamingInfrastructure.git
$ git clone --branch UE5.5 https://github.com/EpicGamesExt/PixelStreamingInfrastructure.git
$ cd PixelStreamingInfrastructure/SignallingWebServer/platform_scripts/cmd
$ ./setup.bat
$ ./start.bat
```
`PixelStreamingInfrastructure/SignallingWebServer/config.json`の書き換えと起動。特に注意すべきは`http_root`です。Publicからwwwに変更されています。path(パス)にも注意してください。
```sh
$ cd PixelStreamingInfrastructure/SignallingWebServer
$ vim config.json
$ npm start -- --public_ip localhost
```

32
book/plan/01_flying.md Normal file
View File

@ -0,0 +1,32 @@
# superhero flight animations
[superhero flight animations](https://www.fab.com/ja/listings/41185c19-5191-4153-8293-8cc9901efa95)
GASと連携するには飛行モードを有効にするときだけABPを切り替えます。いくつかの調整が必要になります。
<iframe src="https://blueprintue.com/render/thxeju-z" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
## スピードとカメラ設定
|component|name|body|
|---|---|---|
|Character Movement|Max Fly Speed|基本スピード。これを上げてスピードを調整する|
|SFA|Sprint Fly Speed|基本スピード。現時点では機能しないみたい|
|SFA|Sprint Acceleration|徐々にスピードを上げていく値。大きいほどすぐに上昇する|
|SFA|Flight Breaking Deceleration|小さいと飛行後のダウンタイムが発生|
|SprintArm|Target Arm Length|最大でどれだけカメラを離すか|
|SprintArm|Camera Lag Speed|ターゲットに到達する速度。大きいほど遅くなる|
|SprintArm|Camera Lag Max Distance|遅れを取る最大距離|
## アニメーションの変更
これはBPで変更できるものもあれば、ABPで変更しなければいけないものもあります。
例えば、idleのanimを変更します。
1. `/Content/SuperheroFlight/Characters/Mannequins/Animations/ABP_Player_UE5`を開いて、AnimGraphのHoverFlightIdleを見ます。
2. そこにSequence Playerがありますが、`A_Flight_Idle_A`を変更します。
3. 私はMagicalAnimSet(有料)を使いました。`/Content/MagicalAnimSet/Animations/locomotion/Inplace/run_f_loop`を右クリックして、アニメリターゲットで`Content/SuperheroFlight/Characters/Mannequins/Meshes/SKM_Quinn`をターゲットに参照します。superheroで動くanimの`run_f_loop`が作成されます。
4. `HoverFlightIdle`のところで`A_Flight_Idle_A -> run_f_loop`と入れ替えます。
この要領でanimを変更していきます。

56
book/plan/02_uds.md Normal file
View File

@ -0,0 +1,56 @@
# ultra dynamic sky
[ultra dynamic sky](https://docs.google.com/document/d/1xAr0Hd3mY7Mp0g0waKLUvJaddUPaVxEeRoEEFXctCE0/)
blueprintなどでも`uds`と略されます。
1. `/Content/UltraDynamicSky/Blueprints/Ultra_Dynamic_Sky`, `Ultra_Dynamic_Weather`をlevelに置きます。
2. `Ultra_Dynamic_Weather(Self)`の詳細から`Random Weather Variation:Hourly`にします。これで天候がすぐに変わります。
## planet systemを作る
地上から宇宙にシームレスに移動できるmapを作ります。といっても様々な問題があり、完全には難しいです。一応、[WorldScape Plugin](https://www.fab.com/listings/0ef85bf8-a0be-4b74-87f8-b66bb44d6ae2)というものがあります。
1. `/Content/UltraDynamicSky/Blueprints/Ultra_Dynamic_Sky`を開きます。
2. そこに地球と月と太陽のBPを入れます。各自が用意してください。なお、地球は`SkyAtmosphere`の下に置いてください。
> 名前は 地球(BP_Earth), 月(BP_Moon), 太陽(BP_Sun) としておきます。
3. `BP_Earth`は詳細から`transform-location-z:-636000000`, `transform-scale:6360000`にします。
4. `Sky_Sphere_Mesh``transform-scale:50000`にします。
5. 関数の`Current Star Color(pure)`にて高度を取得できるため、各componentの表示と非表示(visibility)を切り替えます。
<iframe src="https://blueprintue.com/render/k3xgicx_/1" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
- `BP_Earth`: `transform-location-z:-636000000`, `transform-scale:6370000`
- `Sky_Sphere_Mesh`: `transform-scale:50000`
## issue: mapのcollisionがおかしくなる
これはearthを`SkyAtmosphere`の下に置くと発生します。親子関係を解除しましょう。
## issue: earthの下に黒丸(影)がある
earthのscaleを636から637に変更することで解消できます。
earthを下に見ると、黒い丸が映り込みます。これは、udsをupdateすると発生し始めました。
また、`Captured Scene Sky Lightの`Real Time Capture`をdisableにすると雲も影も無くなります。したがって、条件でon/offを切り変える方法で緩和できます。この方法は使用しなくても良いです。
> リアルタイムキャプチャが有効なスカイライトがシーンにあります。少なくともskyatmosphereコンポーネント、volumetriccloudコンポーネント、またはisksyとしてマテリアルタグが付いたメッシュが必要です。これらがない場合は黒になります。
## issue: 地平線を消す
これは`Fog Max Opacity:0.0`にします。
## issue: 透明な地上が目立つ
Fogを消すと透明な地上が目立つようになります。特に目立つのは夜ですね。
これは`SkyAtmosphere`の色合いで調整しましょう。
## 雪を積もらせる
1. landscapeにあるmaterialを編集します。
2. ultra dynamic weatherと検索して追加します。
3. base color, normalなどのpinがあればつなげます。
<iframe width="100%" height="415" src="https://www.youtube.com/embed/ENMuqbNSLTs?start=912&&rel=0&showinfo=0&controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

28
book/plan/03_ocean.md Normal file
View File

@ -0,0 +1,28 @@
# ocean waves
[ocean waves](https://www.unrealengine.com/marketplace/ja/product/ocean-waves)
必要なものを`/Content/OceanWaves/Levels/EarthSizedOceanPlanet`からcopyして持ってきましょう。
- `BP_EarthSizedSphericalMesh`
- `BP_EarthSizedOcean`
- `WaterVolume`
`BP_EarthSizedSphericalMesh``transform-location-z:-63600000`にします。`Sphere Radius:63600000`にします。`SphereEdge Length:16000000`になるはずです。
次に海上の影問題を修正するため`Material Overrides`, `Material Outer/Inner`をすべて変更します。私は`/Vefects/Water/VFX/WaterMaterials`を使用しました。
次に`BP_EarthSizedOcean``Volume Maaterials``WaterVolume`をセットします。`Above/Underwater``/Vefects/Water/VFX/UnderWater`に変更します。`height:0`にします。これは海に入って出たときに海中を適用する高さを設定します。
## city sampleで使うと空間にロードされていないアクタを参照
> WaterVolume: 空間にロードされていないアクタを参照しています。
これは`BP_EarthSizedOcean`, `BP_EarthSizedSphericalMesh`の詳細から`is spatially loaded`のチェックを外します。
## ocean wavesが遅い理由
これは`/Content/OceanWaves/Blueprints/BP_SphericalMesh``CreateMeshAsyncIteration`にある`Set Timer for Next Tick by Event`が原因です。
しかし、取り除くと海が消えます。ロードを待つほかありません。

10
book/plan/04_item.md Normal file
View File

@ -0,0 +1,10 @@
# nice interaction system
[nice interaction system](https://www.fab.com/ja/listings/63b61e4a-dc11-4ee0-a6b1-f4860bd29198)
1. [docs](https://niceshadow.gitbook.io/nice-interaction-system)があります。基本的にGame Modeの設定に入っているPlayer Controller, Game Stateのファイルを開きます。GASは`GM_Snadbox`などがそれにあたります。これらのBPにcomponentを追加します。
2. Player Controller: `AC_PC_Interaction`
> The only thing you need to do now is open your Player Controller and add the AC_PC_Interaction component:
3. Game State: `AC_GS_Interaction`
> Now just add the AC_GS_Interaction component to your game state:
4. project設定にてcollisionのtrace channelに`LookAtTrace``ignore`で追加します。

57
book/plan/05_chair.md Normal file
View File

@ -0,0 +1,57 @@
# replicated interaction kit vol 3
その後、動作が気に入らなかったので[replicated interaction kit vol 3](https://www.fab.com/ja/listings/3ce13688-fd10-462f-b90d-964c85a090ad)というassetを購入しました。しかし、キャラの背丈が合わない場合の調整が難しく、あまりおすすめしません。
また、用意されているものすべてを使わないと設定できません。難易度は高めです。具体的には`BP_Chair`, `BP_InteractKitVol3`, `ABP_Manny`, `BP_ThirdPersonCharacter`を使ってGASPの`CBP_SandboxCharacter`に組み込みます。
```sh
/Content/InteractionKitVol3/Blueprint/Blueprint/BP_Chair --> map(level)
/Content/InteractionKitVol3/Blueprint/ActorComponent/BP_InteractKitVol3 --> CBP_SandboxCharacter[Component]
/Content/InteractionKitVol3/Demo/ThirdPerson/Blueprints/BP_ThirdPersonCharacter --> CBP_SandboxCharacter[key-E, key-Space]
/Content/InteractionKitVol3/Demo/Characters/Mannequins/Animations/ABP_Manny --> CBP_SandboxCharacter[Set Anim Instance Class]
```
もしanimを作りたい場合は、`/Content/InteractionKitVol3/Demo/Characters/Mannequins/Rigs/RTG_UE5toUE5`を利用してください。
まずcomponentを`CBP_SandboxCharacter`に入れて、ABPを呼び出す方法があります。GASPの`Pre CMC Tick`の処理に注意してください。`InteractionKitVol3`を使用する場合は停止しなければなりません。
<iframe src="https://blueprintue.com/render/9e2ls2nx/2" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
しかし、ABPを呼び出して椅子から降りるときにもとに戻す方法では、その後動作がおかしくなります。
## 椅子から降りるとなにかにぶつかる
椅子から降りるとなにかにぶつかるようになるのは、`/Content/InteractionKitVol3/Blueprint/ActorComponent/BP_InteractKitVol3``Set Collision Response to Channel`の処理が原因です。
この処理をすべて削除しましょう。
しかし、座っている間は動けるようになるので、`IA_Move`に処理を入れます。
<iframe src="https://blueprintue.com/render/9e2ls2nx/4" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
## 背の低いキャラを座らせる
椅子とアニメーションを改造してちょうどいいように座らせることができます。矢印の向きが座る方向になります。これを逆にしてください。
<iframe width="100%" height="415" src="https://www.youtube.com/embed/0YFpV-sUups?si=aTNoK5NTO17ab-Rz&amp;mute=1&rel=0&showinfo=0&controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
色々と問題が多いです。collisionを一時的に無効化する処理を削除しているため、`manny`は椅子と距離が離れています。これ以上近づけると、逆に椅子の上に浮き上がってしまうためです。
## Enable Auto Blend Outを使わない
ABPを利用せずGASPと統合する方法を紹介します。
そのままだと椅子に座ったあとにすぐ立ち上がってしまいます。これを修正するには`/Content/InteractionKitVol3/Animations/AnimationMontage/AS_F_Start`に以下の設定を行います。
> `/Content/InteractionKitVol3/Animations/AnimationMontage/AS_F_Start`
1. `Enable Auto Blend Out`をfalseにする
2. 終了時に通知で`End`という名前を作る
3. `/Content/InteractionKitVol3/Blueprint/ActorComponent/BP_InteractKitVol3`を修正する
`Enable Auto Blend Out`にすると終了を受け取れなくなります。なので通知から受け取って処理するように書き換えます。
<iframe src="https://blueprintue.com/render/9e2ls2nx/3" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
これで正常に椅子に座る、椅子から降りる、という動作ができるようになりました。

23
book/plan/06_dragonik.md Normal file
View File

@ -0,0 +1,23 @@
# dragon ik plugin
[dragon ik plugin](https://www.fab.com/ja/listings/d3f8d256-d8d9-4d27-91c1-c61e55e984a6)を使って、`chinese dragon`を動かします。
1. [codehawk64/dragonik-exampleproject](https://github.com/codehawk64/dragonik-exampleproject)を自分のprojectの`$project/Content/`にcopyします。
```sh
$ git clone https://github.com/codehawk64/DragonIK-ExampleProject.git
$ cp -rf DragonIK-ExampleProject/Content $project/
```
2. pluginで`dragon ik`を有効にする。
3. `/Content/Maps/ChineseDragonSolver_Map`を開く。
4. `/Content/CharacterExamples/Quadruped/ChineseDragonSolverExamples/ChineseDragon2/ChineseDragon2_Control`を開いて編集する。
<iframe src="https://blueprintue.com/render/i9d2qt45/1" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
> [ InputAxis -> EnhancedInput ] 修正されているかもしれません。
ue5.3では、"InputAxis Turn"は通常マウスの横方向の移動量を取得するために使用されます。これは、カメラやキャラクターの水平回転(ヨー)を制御するのに適しています。
しかし、ue5.5でInputAxisを使うと`不明な軸を...`というerrorが出るので、`EnhancedInput`を使います。ここではGASPの`/Content/Input/IMC_Sandbox`を使用します。
Enhanced Inputシステムを使用している場合、これは2D軸入力アクションとして設定できます。この場合、X軸の値がTurnに対応し、Y軸の値がLookUp縦方向の視点変更に対応します。

11
book/plan/07_wsp.md Normal file
View File

@ -0,0 +1,11 @@
# worldscape plugin
[worldscape plugin](https://www.fab.com/listings/0ef85bf8-a0be-4b74-87f8-b66bb44d6ae2)
本格的な惑星を構築できます。
現在、ue5.5をsupportしていませんので、まだ使用できていません。購入者は[discord](https://discord.gg/JD8jvKpmkh)でベータ版の提供を受けることが可能です。
## city sampleや他のmapと統合できるのか
わかりません。

54
book/plan/README.md Normal file
View File

@ -0,0 +1,54 @@
# 有料アセット
|name|rank|latest|body|docs|
|---|---|---|---|---|
|[ultra dynamic sky](https://www.fab.com/ja/listings/84fda27a-c79f-49c9-8458-82401fb37cfb)|<span style="color:red">3</span>|20250203|空や天候を自動化|[docs](https://docs.google.com/document/d/1xAr0Hd3mY7Mp0g0waKLUvJaddUPaVxEeRoEEFXctCE0/)|
|[nice interaction system](https://www.fab.com/ja/listings/63b61e4a-dc11-4ee0-a6b1-f4860bd29198)|<span style="color:red">3</span>|20250206|アイテムを取得する|[docs](https://niceshadow.gitbook.io/nice-interaction-system)|
|[magicalanimset](https://www.fab.com/ja/listings/a63386b8-7cad-42cd-8b81-a9de147e1f08)|<span style="color:red">3</span>|20241222|少女の戦闘アニメーション||
|[logicdriver](https://www.fab.com/ja/listings/a3e2fc1f-2aaa-49a1-bc26-4d5d38f7d82f)|<span style="color:red">3</span>|20241212|ロジックのシステム|[docs](https://logicdriver.com/docs/pages/prochangelog/)|
|[dragon ik plugin](https://www.fab.com/ja/listings/d3f8d256-d8d9-4d27-91c1-c61e55e984a6)|<span style="color:red">3</span>|20250122|animをターゲットに追従|[docs](https://dragonik.eternalmonke.com/)|
|[superhero flight animations](https://www.fab.com/ja/listings/41185c19-5191-4153-8293-8cc9901efa95)|2|20241217|空を飛ぶシステム||
|[clazy runner action pack](https://www.fab.com/ja/listings/3f4f4475-c9d1-46e8-992c-4a8f3aff58ed)|1|20240518|ダッシュのシステム||
|[rts camera system](https://www.fab.com/ja/listings/d063c9c9-6df3-4eeb-b7f3-797b5507379e)|1|20231123|カメラシステム|[docs](https://docs.google.com/document/d/e/2PACX-1vQevvLmKDkw0Z6okftdwGCTTLYOYFO-71mvyV6co4wN8oMuJFJDQAGXCx4CckKcpd-FQEUz5i8QHeQS/pub)|
|[space frontier stations & ships](https://www.fab.com/listings/79323b40-dc56-43bf-8aea-b13800266329)|1|20241114|宇宙船のシステム|[docs](https://docs.google.com/document/d/1p5MY13cpTlVtqP7sCQpAoE_k5VHklmndZ4cHeBy105Y/)|
|[replicated interaction kit vol 3](https://www.fab.com/ja/listings/3ce13688-fd10-462f-b90d-964c85a090ad)|1|20241115|椅子に座るシステム||
|[ocean waves](https://www.fab.com/ja/listings/bfb5c9f8-4e57-4cbe-8273-c88540965412)|1|20241217|惑星の海を作る|[docs](https://www.youtube.com/playlist?list=PLvRH9sjZUdXfuLpvStHfpKyESQoOq28R7)|
|[overlay outline material](https://www.fab.com/ja/listings/5d42ff7a-6198-4443-b1a1-eb60348407fe)|1|20241124|アウトラインのエフェクト||
|[worldscape plugin](https://www.fab.com/listings/0ef85bf8-a0be-4b74-87f8-b66bb44d6ae2)|1|5.4|惑星を構築するplugin|[docs](https://iolacorp-1.gitbook.io/worldscape-plugin)|
`rank`は更新頻度(追加)や価格から判断されます。`3`のassetがオススメです。
## アセット購入の基本
私のasset購入の基本指針を紹介します。
- saleのときだけ購入する
saleのときだけ購入するようにします。それ以外で購入することはありません。年末のsaleがおすすめです。
- mapは購入しない
mapを見ていると買いたくなるのはわかります。しかし、mapのassetは購入すべきではありません。無料で使えるものがたくさんありますし、ゲームの本質ではないので、完成後に購入するか、付属品を使うようにします。
- 高いassetを購入しない
高いものには良いものもあります。が、良くないもの、使えないものもたくさんあります。最初は手を出すべきではありません。安くて良いassetがたくさんあります。高いものより結局そっちを使うことになることのほうが多いです。ある程度わかってきたら購入するのはいいかもしれません。その際は独自性を見るようにしています。
- 長らく更新されているassetを購入する
更新されていないものを購入してもいずれ動かなくなります。
- 作者を確認する
assetを購入する際は必ず作者を確認してください。他にどのようなassetを出しているか、評価はどうか、今も活動しているかがわかります。
- 機能をまとめる
使うassetは少なければ少ないほど良いです。依存関係は少なくしましょう。`epic games`が提供するdefault(デフォルト)のものだけで作るのが一番ですが、それだけでは時間がかかったり、クオリティが低かったりします。そんなとき有料assetに頼ることになります。しかし、「使うassetを少なくする」のは有効です。シンプルな設定で使えるもの、たくさんの機能をまとめて使えるものがオススメです。
## 検討中
|name|latest|body|docs|
|---|---|---|---|
|[mocap tools](https://www.fab.com/ja/listings/7608fd4d-4c2c-40be-9a06-274e6f7ef6cc)|5.4|root motionの修正|[docs](https://docs.google.com/document/d/1OVx8H7VGQ1_XdaPFxRNlVYDktbdolx7KWTXBbxJLyac/)|

122
book/project/01_ep.md Normal file
View File

@ -0,0 +1,122 @@
# 自己紹介
自己紹介では、自分の紹介と、何をやっているか、何をやっていきたいかを明確にします。
長くてはいけません。できれば1行で動画の枠に収まるよう短くします。配色も考えておきます。
## 名前
`syui`という名前で活動していること。youtubeチャンネルが`syai`となっている理由。`syui`という名前は既に他の人が使っており、選択できなかったので、使用するキャラクターの`ai`を合体させた名前。または`syui.ai`というドメインの略。
[youtube](/project/01_youtube.html)に関しては、ゲーム制作を紹介したり、活動していく上で必要かもしれないので、考えを残しておくことにします。
## ゲーム開発
目指すゲームは、現実をゲームに反映すること。
最初に取り掛かったのはゲーム作りそのものではなく、現実をゲームに反映するためのアカウントシステムを考えることだった。
## なぜアカウントが重要
これからのゲームは、ゲーム性よりも、より個人に近いアカウントが重要になると考えている。
どれほどすごいゲーム、面白いゲームでも、その記録が残らないのは悲しい。
ゲーム作りで最も重要、最初に始めるべきことはなんだろう。
私は記録(を残す)システムを作ることだと思った。
より現実の個人に近いアカウントにゲームプレイの内容が反映される方法を考え、実装することにした。
## 記録装置を作ったあとは
記録するシステム、つまりアカウントシステムを作ったあとは、特徴のあるゲームを作ろうと思った。
特徴のあるゲームとは「このゲームは何なのか、他のゲームとの違いは」を一言で表すことができる。
例えば、立ち絵一つで表現できればそれで合格だと思っている。ゼルダや原神、ゲームのパッケージを見れば作品のことがひと目で分かる。
既存のゲームをそのまま真似してそっくりなものを作っても意味がない。
誰にでも好きなものはあるはずで、原点がある。それは普遍的、自然的なもの。そういったものの組み合わせ。
私の場合は`宇宙`だった。宇宙とアイ、一枚の青写真を描いた。
## 宇宙とアイ
ゲームは基本的に平面で作られていて、それはどこまで行っても地平線が広がっているだけの世界。月や太陽があっても背面の絵を動かしているだけだったりする。
このゲームは現実の反映を目指している。だからマップを作る際も現実に合わせた形にすることを目指す。空の上を高く高く飛んでいくと、そこには大気圏が広がり、それを抜けると宇宙に出られる。そこには実際に行ける月があり、太陽がある。全てはつながっていて、そこに行くことができる世界を目指します。これを`planet system`と呼んでいる。
ゲームプレイ中に行けないような場所、見えないようなところもちゃんと作る。そのような思いで開発に取り組む。
## 体験はどこに
体験はどこに帰属し、どこにあるのだろう。
私は、プレイヤーが持つ唯一性だと思う。だから、このゲームでは、プレイヤーはゲーム内で唯一性を持つようにしたいと考えている。
しかし、これは難しい。よって、現実的に可能な範囲で、プレイヤーがゲーム内で唯一性を持てるようにすること。現実世界とゲームを強く結びつけることを目指していきたい。
例えば、ゲーム内キャラクター追加に関するルールがある。vtuberのような個人モデルを持つ者が申請でき、申請が通ると新たなキャラクターが追加される。キャラクターは原則通りの1攻撃、1スキル、1バーストというステータスを持つ。ただし、本人にしか使えないユニークスキルがあり、それは一人のプレイヤーにしか使えない。
## システム
現在作っているシステムを紹介。システム名は今後変更されるかもしれない。
- `at system`: atproto(atmosphere)を採用するアカウントシステム
- `yui system`: プレイヤーの唯一性を担保するためのシステム
- `ai system`: キャラクターの属性に関するシステム。キャラクターは1つの属性を持つ。原子、陽子、中性子など。
- `planet system`: 宇宙の物理方式(マップ)を目指すシステム
## 物語
物語はこの世界で最も小さい物質の探求から始まる。
量子というものがある。観測すると結果が変わるらしい。でもじつは違う。結果が変わるのは物質が当たるからだ。物質が当たると結果が変わるのは当然のこと。物質を小さくしていくと、それは意識の領域に到達する。それは物質でもあり、意識でもあった。特に違いはない。そして、これ以上分割できない最小単位、この世界で最も小さい物質を「存在の意識」という。つまり、物質は意識が集まってできている。これをアイと名付けよう。
キャラクターの属性について
各属性は1つの次属性と関連反応を起こし、ダメージ倍率が変換します。属性には原子核、陽子、電子、中性子、アクシオン、クォークなどがあります。
```json
{
"system": {
"text": "各システムの名前と概要",
"body": "現実をゲームに反映",
"enum": [ "ai", "yui", "at", "planet","story" ],
"ai": {
"text": "ability",
"lang": {
"ja": "属性"
},
"body": "キャラクターの属性。キャラクターは1属性を持つ",
"enum": [ "ai", "yui", "axion", "quark", "atom", "proton", "neutron", "atomic", "electron" ]
},
"yui": {
"text": "unique",
"lang": {
"ja": "唯一性"
},
"body": "プレイヤーの唯一性。ユニークスキル"
},
"at": {
"text": "account",
"lang": {
"ja": "アカウント"
},
"body": "ゲームのプレイ履歴はat protocolのpdsに保存される",
"tag": [ "atproto", "atmosphere", "@", "bluesky" ]
},
"planet": {
"text": "map",
"lang": {
"ja": "マップ"
},
"body": "惑星形式でマップを作る"
}
}
}
```

View File

@ -0,0 +1,27 @@
# youtube
youtubeに投稿するとしたら、どのような内容がいいのかを考え、その下書きを投稿することにします。
1. 成功より失敗を見せる
2. 完成より進捗を見せる
3. 文字と配色
4. 投稿の継続
## 成功より失敗を見せる
正確に言うと配信者が行う配信内容は、成功したことより、失敗したことを見せるほうが重要だと感じます。
そして、ただ失敗を見せるのではなく、見せ方も大切です。
つまり、失敗したことを笑い話に変え話すこと、そういった演出が視聴者が面白いと思うポイントだと感じます。
実際の例でいうと、unrealengineの解説動画を検索すると、より多く再生された動画が表示されます。そして、ただ解説しているだけ、成功した実装を見せるだけの動画よりも、うまくいかなかったゲーム開発のシーンを面白おかしく見せているだけの動画のほうが、より多く再生されているようです。また、私が視聴して面白いと思う動画もこのタイプになります。
## 完成より進捗を見せる
視聴者といっしょにゴールに向かっている感じがいいと思いました。
配信者の技術が完成されたあと、それを教えるという方向性の動画よりも、配信者はまだまだ成長過程で、その成長する姿を見てもらう、視聴者とともに成長していく、という方向性の動画のほうが面白いと感じます。
その他重要な要素として、`文字と配色``投稿の継続`が挙げられます。

72
book/project/02_ep.md Normal file
View File

@ -0,0 +1,72 @@
# 最初の体験
どんな作品でも一番重要なのが第一話だと思う。それはゲームであっても変わらない。
だからゲーム開発では、最初の体験にそのゲームのすべてを詰め込まなければならない。
ただ詰め込むだけではなく、そのゲームでできることや考え方、何を楽しめばいいのかをプレイヤーにちゃんと伝えるということ。
このゲームではミッション(mission)というシステムを作り実現を目指す。ゲームを開始するとミッションがあり、ミッションをクリアするまでが第一話となる。
```json
{
"system": {
"enum": [ "ai", "yui", "at", "planet", "mission" ],
"mission": {
"text": "story",
"lang": {
"ja": "物語"
},
"body": "物語はこの世界で最も小さい物質の探求から始まる"
}
}
}
```
## 最初のミッションは月に行くこと
プレイヤーは最初、アイというキャラクターを扱うことになる。物語があり、アイを使って月に行き、ボスを倒すとクリアとなる。
ボスのドロップアイテムは個人のsnsアカウントに保存される。と同時にゲーム内でも確認できる。例えば、アイの家には白い机と椅子があり、獲得したものは机に置かれる。
ここまでで、このゲームではどんな事ができるのか、何をテーマにしているのか伝えることができると思う。
1. blueskyのアカウントでログイン
2. ミッション月に行く
3. ボス戦
4. 獲得したアイテムをアカウントに反映
ちなみに、物語はこんな構成(シーン)を考えている。
> 幻獣(動物)たちが宇宙船の中にある檻に入れられているようだ。黄色い光が窓の外に見えたような気がした。
>
> 「ぼくたちどうなっちゃうのかな」「あれ、今なんか光ったよ」「お前そんなこと言ってる場合か」
>
> 動物たちはお互いを知っているようだった。
>
> しばらくすると、船内、外の見張りがざわつきだした。
>
> 「おい、あれが出たって?交渉はどうなってる」と慌てている様子だ。
>
> 船内が大きく揺れ、遠くで爆発が起こる。
>
> そして、地面が傾き、宇宙船は下の星に落ちていった。
>
> 動物たちは小さな浜辺にいた。橋が見える。大きな街があるようだ。
>
> 「助けを求めよう」「でも怖い人達だったらどうしよう」
>
> そんな話をしながら橋を歩いた。
>
> するとみすぼらしい身なりの人間の子供が道路の真ん中で寝転んでいる。寝ているようだ。
>
> 「あれこんなところに人がいるよ」「こんな子どもが放置されてるなんて、この星は大丈夫か」「え、きみあれが人間の子供だってよくわかったね。ぼくなんてみんな同じに見える」
>
> 動物たちは寝ている子どもを通り越して街に向かった。
>
> 数時間前...。
>
> ドライ「ねえ、ぼくのいとこが誘拐されたみたいなんだ。今君がいるところの上の方を飛んでるらしい。なんとかしてよ」
>
> アイ「うん、いいよ」

Some files were not shown because too many files have changed in this diff Show More