Compare commits
2 Commits
abdc9c7a21
...
7799ca632e
Author | SHA1 | Date | |
---|---|---|---|
7799ca632e | |||
3d1c8cd688 |
33
.github/workflows/gh-pages.yml
vendored
Normal 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
@ -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
|
1
book/CNAME
Normal file
@ -0,0 +1 @@
|
||||
ue-book.syui.ai
|
5
book/README.md
Normal file
@ -0,0 +1,5 @@
|
||||

|
||||
|
||||
# Unreal Engine 5 Guide Book
|
||||
|
||||
<a href="/book.pdf" target=”_blank”>download</a> | <a href="https://ue-book.syui.ai" target="_blank">web</a>
|
35
book/SUMMARY.md
Normal file
@ -0,0 +1,35 @@
|
||||
# Summary
|
||||
|
||||
* [Unreal Engine 5 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](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)
|
||||
* [アニメーションを作成する](gas/07_anim.md)
|
||||
* [niagaraでダメージを出す](gas/08_niagara.md)
|
||||
* [椅子に座る](gas/09_chair.md)
|
||||
* [control rig sample](crs/README.md)
|
||||
* [CRでキャラクターを動かす](crs/01_character.md)
|
||||
* [ボスを作る](crs/02_boss.md)
|
||||
* [city sample](city/README.md)
|
||||
* [惑星形式のmapを作る](city/01_remove.md)
|
||||
* [橋を作る](city/02_bridge.md)
|
||||
* [建造物を作る](city/03_house.md)
|
||||
* [json blueprint utilities](json/README.md)
|
||||
* [apiから情報を取得する](json/01_varest.md)
|
||||
* [pixel streaming](pixel/README.md)
|
||||
* [基本事項](pixel/01_server.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)
|
||||
* [end](end/README.md)
|
43
book/city/01_remove.md
Normal file
@ -0,0 +1,43 @@
|
||||
# 惑星形式のmapを作る
|
||||
|
||||
game engineのmapは基本的に平面で作られています。どこまで行っても地平線が広がっているだけで、そこから抜け出すことはできません。月や太陽があっても背面の絵を動かしているだけです。
|
||||
|
||||
これを現実に合わせた形を独自に作っています。これを`planet system`と呼びます。
|
||||
|
||||
地球があって、上に飛ぶと大気圏があり、大気圏を抜けると宇宙があり、月があり、太陽があるという形にすることを目指します。全てはつながっていて、そこに行くことができます。
|
||||
|
||||
## 海の境界を消す
|
||||
|
||||
海には境界があってそれが惑星システム(planet system)を構築する際に邪魔になるので消します。
|
||||
|
||||
## 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`にします。これは海に入って出たときに海中を適用する高さを設定します。
|
||||
|
||||
## ultra dynamic skyで天候と惑星を作る
|
||||
|
||||
[ultra dynamic sky](https://docs.google.com/document/d/1xAr0Hd3mY7Mp0g0waKLUvJaddUPaVxEeRoEEFXctCE0/)
|
||||
|
||||
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:6360000`
|
||||
- `Sky_Sphere_Mesh`: `transform-scale:50000`
|
9
book/city/02_bridge.md
Normal 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`にして透明にします。
|
||||
|
||||

|
9
book/city/03_house.md
Normal 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>
|
37
book/city/README.md
Normal file
@ -0,0 +1,37 @@
|
||||
# city sample
|
||||
|
||||
[city sample](https://www.unrealengine.com/marketplace/ja/product/city-sample)
|
||||
|
||||
ニューヨーク(NY)をモデルに都市が作られています。人と自動車が動いています。自動車は乗ることや破壊することができます。
|
||||
|
||||
## AutomatedPerfTesting
|
||||
|
||||
`AutomatedPerfTesting`は5.5で追加されたpluginです。
|
||||
|
||||
> 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 project’s 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
|
||||
|
||||
そのうち解消されると思いますが、現在(2024-11-18)、city sampleはbuildできません。`Engine/Plugins/Performance/AutomatedPerfTestingにAutomatedPerfTestConfig.cs`, `AutomatedPerfTestNode.cs`が含まれていないため`${project}/Build/Script/CitySample.Automation.csproj`に記述されているcompileが通らないのです。
|
||||
|
||||
```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>
|
||||
```
|
||||
|
||||
これはgithubにあるsrcから持ってくるしかありません。アクセスするにはorgに参加します。
|
||||
|
||||
https://github.com/EpicGames/UnrealEngine/tree/release/Engine/Plugins/Performance/AutomatedPerfTesting/Build/Scripts
|
||||
|
BIN
book/cover.jpg
Normal file
After Width: | Height: | Size: 250 KiB |
BIN
book/cover_b.jpg
Normal file
After Width: | Height: | Size: 128 KiB |
21
book/crs/01_character.md
Normal 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
@ -0,0 +1,91 @@
|
||||
# ボスを作る
|
||||
|
||||
敵(enemy)やボス(boss)には必要なものが多いです。動きや攻撃パターン、エフェクト、ステータスやドロップアイテム、ゲージ表示、BGMなどが必要になります。場合によっては演出も必要です。
|
||||
|
||||
<iframe width="100%" height="415" src="https://www.youtube.com/embed/BsLOlAr-wBY?si=jahPUVD8YMMfefvm&start=20&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>
|
||||
|
||||
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)
|
||||
|
||||
ここでは`AnimGraph -> Locomotion -> Idle`を編集します。
|
||||
|
||||
動きはABPの`Look At`が使えます。boneを指定するとPlayerに追従します。
|
||||
|
||||
`[Mech_Idle] --> [Look At](Bone to Modify:cannon_01) --> Output Animation Pose`
|
||||
|
||||
[](../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>
|
||||
|
6
book/crs/README.md
Normal 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を動かすことができます。
|
||||
|
38
book/default/00_asset.md
Normal file
@ -0,0 +1,38 @@
|
||||
# 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|人間以外のキャラクター|
|
||||
|
||||
## 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を作る|
|
||||
|
||||
## 有料
|
||||
|
||||
[こちら](/plan/README.md)
|
||||
|
||||
## link
|
||||
|
||||
こちらで最新情報を取り扱っています。
|
||||
|
||||
- https://git.syui.ai/ai/ue/
|
||||
- https://blueprintue.com/profile/ai/
|
||||
- https://dev.epicgames.com/community/profile/organization/gdkg/ai/
|
58
book/default/01_start.md
Normal file
@ -0,0 +1,58 @@
|
||||
# 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/|
|
||||
|github|https://github.com/EpicGames/UnrealEngine|
|
||||
|
||||
ソース(source)からビルド(build)して使うこともできます。一部でbuildしないと使えない機能があります。private repoなので[こちら](https://www.unrealengine.com/ja/ue-on-github)からアクセス権をもらいます。
|
||||
|
||||
## ueの特徴と注意
|
||||
|
||||
`c++`か`blueprint`で書きます。
|
||||
|
||||
ueの特徴はグラフィックが綺麗なことです。と言ってもきれいなグラフィックはunityなどでも実現可能です。しかし、ueは初期設定でもそれが実現できるので、主にグラフィック用途で使用されています。
|
||||
|
||||
ueはバグ(bug)が多く基本的に動きません。これはアップデート(update)が速く、3Dを扱うソフトウェア(software)なので仕方ありません。複雑なのです。
|
||||
|
||||
ueを長く使っているとわかることですが、ゲーム制作にはあまり向きません。unityのほうがおすすめです。ueはきれいな画像やシーンを作る用途におすすめです。
|
||||
|
||||
「ueはバグが多く基本的に壊れている」このことを最初に理解しておかないと「おかしいなあ」と時間を無駄にしてしまいます。また、保存せず長時間コードを書き続けるのは危険です。クラッシュ(crash)すると消えてしまいます。プロジェクト(project)そのものが壊れることもよくあります。注意しましょう。
|
||||
|
||||
## 用語の解説
|
||||
|
||||
|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の`x.5`の部分を言う ex: 5.4 -> 5.5|
|
||||
|upgrade||アップグレード、5.5の`5.x`の部分を言う ex: 4.0 -> 5.0|
|
||||
|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|変数、一時的な値の保存場所|
|
||||
|
||||
基本的に英語で書けるものは英語で書きます。ueのmenuは英語にするのがおすすめです。様々な単語に慣れておきましょう。
|
53
book/default/02_install.md
Normal file
@ -0,0 +1,53 @@
|
||||
# install
|
||||
|
||||
srcからbuildしない場合は`epicgames launcher`からinstallします。
|
||||
|
||||
https://www.unrealengine.com/download
|
||||
|
||||
また、[vsinstaller](https://visualstudio.microsoft.com/ja/downloads/)を使用して必要なpackageを入れてください。
|
||||
|
||||

|
||||
|
||||
[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
@ -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>
|
||||
|
25
book/default/README.md
Normal file
@ -0,0 +1,25 @@
|
||||
# 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|ゲームエンジン|
|
||||
|
||||
## 使用するタグ
|
||||
|
||||
```html
|
||||
# youtube
|
||||
## https://www.youtube.com/embed/${id}?start=0&end=10&mute=1&rel=0&showinfo=0&controls=0
|
||||
<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>
|
||||
```
|
||||
|
||||
```html
|
||||
# blueprint
|
||||
## https://blueprintue.com/render/${id}/${n}
|
||||
<iframe src="https://blueprintue.com/render/" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
|
||||
```
|
2
book/end/README.md
Normal file
@ -0,0 +1,2 @@
|
||||

|
||||
|
11
book/gas/01_character.md
Normal 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/gas/02_jump.md
Normal 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`にします。
|
||||
|
105
book/gas/03_vrm.md
Normal file
@ -0,0 +1,105 @@
|
||||
# キャラクターの見た目を変える
|
||||
|
||||
キャラクターの見た目を変えるには`.vrm`を使うと便利です。これは`pixiv`が作っている規格です。
|
||||
|
||||
ueで読み込むには`vrm4u`というpluginを使用します。
|
||||
|
||||
<iframe width="100%" height="415" src="https://www.youtube.com/embed/0Ig_-JSRV0M?si=Kz_jCbYTHr_OzPpP&start=0&end=23&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>
|
||||
|
||||
## vrm4u
|
||||
|
||||
1. [vrm4u](https://github.com/ruyo/VRM4U/releases)をダウンロード(download)して、`$project/Plugins`に入れる。
|
||||
> $project/Plugins/VRM4U/VRM4U.uplugin
|
||||
2. editorのファイルエクスプローラーでモデルファイルの`.vrm`をD&Dします。色々と聞かれますが適当にokや選択します。配色タイプが聞かれます。例えば、`$project/Content/Characters`に`model`フォルダを作り`model.vrm`をimport(インポート)した場合で解説します。
|
||||
> $project/Content/Characters/$model
|
||||
|
||||
重要なファイルは`$project/Content/Characters/$model/SK_$model`, `ABP_Post_$model`, `RTG_UEFN_$model`になります。なお、`vrm 1.0`を使用します。
|
||||
|
||||
https://vrm.dev/vrm1/
|
||||
|
||||
## 指の角度を調整する
|
||||
|
||||
これは`RTG_UEFN_$model`で調整します。各指にある線を選択して値を変更します。
|
||||
|
||||
- `回転アルファ:0.5`
|
||||
- `ボールベクターオフセットを維持:false`
|
||||
|
||||
## 前髪の角度を調整する
|
||||
|
||||
これは`/Content/Character/$model/VM_${model}_VrmMeta`で調整します。具体的には以下のような値にすればいいでしょう。
|
||||
|
||||
```json
|
||||
[
|
||||
{
|
||||
"bone Name": "J_Sec_Hair1_03",
|
||||
"Hit Radius": 0
|
||||
},
|
||||
{
|
||||
"bone Name": "J_Sec_Hair2_03",
|
||||
"Hit Radius": 0.01
|
||||
},
|
||||
{
|
||||
"bone Name": "J_Sec_Hair3_03",
|
||||
"Hit Radius": 0.01
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"bone Name": "J_Sec_Hair1_04",
|
||||
"Hit Radius": 0
|
||||
},
|
||||
{
|
||||
"bone Name": "J_Sec_Hair2_04",
|
||||
"Hit Radius": 0.01
|
||||
},
|
||||
{
|
||||
"bone Name": "J_Sec_Hair3_04",
|
||||
"Hit Radius": 0.01
|
||||
}
|
||||
],
|
||||
[
|
||||
{
|
||||
"bone Name": "J_Sec_Hair1_05",
|
||||
"Hit Radius": 0
|
||||
},
|
||||
{
|
||||
"bone Name": "J_Sec_Hair2_05",
|
||||
"Hit Radius": 0.01
|
||||
},
|
||||
{
|
||||
"bone Name": "J_Sec_Hair3_05",
|
||||
"Hit Radius": 0.01
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
飛行時に髪が爆散する問題は以下です。
|
||||
|
||||
```json
|
||||
{
|
||||
"bone Name": "J_Sec_Hair2_03",
|
||||
"Hit Radius": 0.0
|
||||
},
|
||||
{
|
||||
"bone Name": "J_Sec_Hair1_09",
|
||||
"Hit Radius": 0.01
|
||||
},
|
||||
{
|
||||
"bone Name": "J_Sec_Hair1_10",
|
||||
"Hit Radius": 0.01
|
||||
}
|
||||
```
|
||||
|
||||
## アウトラインを追加する
|
||||
|
||||
アウトライン(outline)
|
||||
|
||||
1. `/Content/Blueprints/RetargetedCharacters/CBP_SandboxCharacter_$model`を作成します。前と同じ要領で新しいキャラクターを追加し、GASで使えるようにします。
|
||||
2. componentで`BP_VrmOutlineComponent`を追加します。
|
||||
|
||||
## 見た目をきれいにする
|
||||
|
||||
これには様々なやり方が存在します。調べた限りではちゃんと機能するやり方がわからないように感じます。
|
||||
|
||||
私はcomponentの`VrmPoseableMesh`を追加して、そこに配色タイプの`custom`を当てることで調整しています。ベースは配色タイプの`unlit`を使用します。もし`unlit`で`.vrm`をimportしていない場合は再度importしてください。
|
||||
|
62
book/gas/04_vmc.md
Normal 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/gas/05_kawaii.md
Normal 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/gas/06_camera.md
Normal file
@ -0,0 +1,15 @@
|
||||
# カメラワークを設定する
|
||||
|
||||
スキル発動したときカメラをぐるっと回す演出です。
|
||||
正面カメラを設置し、タイムラインで動かしたあとに通常(後方)カメラに切り替えることで実現しています。
|
||||
|
||||
<iframe width="100%" height="415" src="https://www.youtube.com/embed/BsLOlAr-wBY?si=jahPUVD8YMMfefvm&start=29&end=34&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(スキル)`の実行につながるようにしてください。
|
22
book/gas/07_anim.md
Normal file
@ -0,0 +1,22 @@
|
||||
# アニメーションを作成する
|
||||
|
||||
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
|
||||
|
5
book/gas/08_niagara.md
Normal file
@ -0,0 +1,5 @@
|
||||
# niagaraでダメージを出す
|
||||
|
||||
- https://www.youtube.com/watch?v=wYq2SR63vkM
|
||||
|
||||
|
16
book/gas/09_chair.md
Normal file
@ -0,0 +1,16 @@
|
||||
# 椅子に座る
|
||||
|
||||
椅子に座る動作を設定します。大変ですが以下のcomponentを使うと簡単にできます。調整は難しいですね。私の場合はgame animation sampleを使っていますが、最新版では勝手に動きが制御されるためanim montageをそのまま再生できません。したがって、別にabpを作成し、それを呼び出します。
|
||||
|
||||
- https://www.youtube.com/watch?v=VzyvpFvon0g
|
||||
- https://blueprintue.com/blueprint/wg_vyr4o/
|
||||
|
||||
その後、動作が気に入らなかったため[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です。
|
||||
|
||||
まずcomponentを`CBP_SandboxCharacter`に入れて、ABPを呼び出し、keyを設定します。なお、anim montageはcomponentの方にも別のものを設定できますので、キャラによって背丈などが合わない場合には個別に設定します。
|
||||
|
||||
<iframe src="https://blueprintue.com/render/9e2ls2nx/1" scrolling="no" allowfullscreen style="width:100%;height:400px"></iframe>
|
||||
|
||||
用意されているanim montageは後ろ向きになっているため、animを180度回してから録画して新たに作ります。この際、高さなども調整してください。anim montageはloopさせるため、立ち上がり(front_end)が反対になってしまいます。これはBP_Chairにある矢印方向を180度回せばokでした。
|
63
book/gas/README.md
Normal 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でGASと略すことがあります。
|
||||
|
||||
なお、[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
@ -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
After Width: | Height: | Size: 264 KiB |
BIN
book/img/0002.png
Normal file
After Width: | Height: | Size: 454 KiB |
BIN
book/img/0003.png
Normal file
After Width: | Height: | Size: 960 KiB |
BIN
book/img/0004.png
Normal file
After Width: | Height: | Size: 415 KiB |
BIN
book/img/0005.png
Normal file
After Width: | Height: | Size: 498 KiB |
BIN
book/img/0006.png
Normal file
After Width: | Height: | Size: 68 KiB |
5
book/json/01_varest.md
Normal 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
@ -0,0 +1,3 @@
|
||||
# json blueprint utilities
|
||||
|
||||
`json`を扱う。
|
8
book/package.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"dependencies": {
|
||||
"got": "^14.4.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"honkit": "^6.0.2"
|
||||
}
|
||||
}
|
5
book/pixel/01_server.md
Normal file
@ -0,0 +1,5 @@
|
||||
# 基本事項
|
||||
|
||||
pcのdisplay(ディスプレイ)が必要になる。画面の電源もつけておく必要があります。
|
||||
|
||||
|
32
book/pixel/README.md
Normal 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
|
||||
```
|
3
book/plan/01_flying.md
Normal file
@ -0,0 +1,3 @@
|
||||
# superhero flight animations
|
||||
|
||||
[superhero flight animations](https://www.fab.com/ja/listings/41185c19-5191-4153-8293-8cc9901efa95)
|
9
book/plan/02_uds.md
Normal file
@ -0,0 +1,9 @@
|
||||
# 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`にします。これで天候がすぐに変わります。
|
||||
|
3
book/plan/03_ocean.md
Normal file
@ -0,0 +1,3 @@
|
||||
# ocean waves
|
||||
|
||||
[ocean waves](https://www.unrealengine.com/marketplace/ja/product/ocean-waves)
|
9
book/plan/04_item.md
Normal file
@ -0,0 +1,9 @@
|
||||
# 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:
|
12
book/plan/README.md
Normal file
@ -0,0 +1,12 @@
|
||||
# 有料アセット
|
||||
|
||||
|name|rank|latest|body|docs|
|
||||
|---|---|---|---|---|
|
||||
|[ultra dynamic sky](https://www.fab.com/ja/listings/84fda27a-c79f-49c9-8458-82401fb37cfb)|3|20250203|空や天候を自動化|[docs](https://docs.google.com/document/d/1xAr0Hd3mY7Mp0g0waKLUvJaddUPaVxEeRoEEFXctCE0/)|
|
||||
|[superhero flight animations](https://www.fab.com/ja/listings/41185c19-5191-4153-8293-8cc9901efa95)|2|20241217|空を飛ぶ||
|
||||
|[ocean waves](https://www.fab.com/ja/listings/bfb5c9f8-4e57-4cbe-8273-c88540965412)|1|20241217|惑星の海を作る|[docs](https://www.youtube.com/playlist?list=PLvRH9sjZUdXfuLpvStHfpKyESQoOq28R7)|
|
||||
|[nice interaction system](https://www.fab.com/ja/listings/63b61e4a-dc11-4ee0-a6b1-f4860bd29198)|3|20250206|アイテムを取得する|[docs](https://niceshadow.gitbook.io/nice-interaction-system)|
|
||||
|[magicalanimset](https://www.fab.com/ja/listings/a63386b8-7cad-42cd-8b81-a9de147e1f08)|3|20241222|少女の戦闘アニメーション||
|
||||
|[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/)|
|
||||
|
||||
`rank`は更新頻度(追加)や価格から判断されます。`3`のassetがオススメです。
|
52
github/PixelStreamingInfrastructure/Public/player.html
Normal file
@ -0,0 +1,52 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html style="width: 100%; height: 100%">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<!-- Optional: apply a font -->
|
||||
<!--
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Michroma&family=Montserrat:wght@600&display=swap" rel="stylesheet">
|
||||
-->
|
||||
<!-- Optional: set some favicons -->
|
||||
<link rel="shortcut icon" href="43ef81525e6853dc.ico" type="image/x-icon">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="images/favicon-96x96.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="images/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="images/favicon-16x16.png">
|
||||
|
||||
<!-- Optional: set a title for your page -->
|
||||
<title>Pixel Streaming</title>
|
||||
<script defer src="player.js"></script></head>
|
||||
|
||||
<!-- The Pixel Streaming player fills 100% of its parent element but body has a 0px height unless filled with content. As such, we explicitly force the body to be 100% of the viewport height -->
|
||||
<body style="width: 100vw; height: 100vh; min-height: -webkit-fill-available; font-family: 'Montserrat'; margin: 0px">
|
||||
|
||||
<style>
|
||||
button#settingsBtn {
|
||||
display:none;
|
||||
}
|
||||
button#statsBtn {
|
||||
display:none;
|
||||
}
|
||||
button#fullscreen-btn {
|
||||
display:none;
|
||||
}
|
||||
div#connection{
|
||||
display:none;
|
||||
}
|
||||
.comment {
|
||||
text-align: right;
|
||||
padding: 10px;
|
||||
}
|
||||
a{
|
||||
text-decoration: none;
|
||||
color: #ccc;
|
||||
}
|
||||
</style>
|
||||
<div class="comment">
|
||||
<a href="https://bsky.app/profile/yui.syui.ai/feed/cmd">/comment</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
13
github/restreamer/compose.yaml
Normal file
@ -0,0 +1,13 @@
|
||||
services:
|
||||
|
||||
restreamer:
|
||||
image: datarhei/restreamer
|
||||
#image: datarhei/restreamer:cuda-latest
|
||||
ports:
|
||||
- 8080:8080
|
||||
- 1935:1935
|
||||
- 6000:6000/udp
|
||||
restart: always
|
||||
volumes:
|
||||
- ./data/config:/core/config
|
||||
- ./data/data:/core/data
|
11
github/rust-bbs/Cargo.toml
Normal file
@ -0,0 +1,11 @@
|
||||
[package]
|
||||
name = "rust-bbs"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
actix-web = "4.0"
|
||||
url = "2.3.1"
|
||||
rusqlite = { version = "0.28", features = ["bundled"] }
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
askama = "*"
|
8
github/rust-bbs/Dockerfile
Normal file
@ -0,0 +1,8 @@
|
||||
FROM syui/aios
|
||||
|
||||
WORKDIR /app
|
||||
COPY ./src ./src
|
||||
COPY ./templates ./templates
|
||||
COPY ./Cargo.toml ./Cargo.toml
|
||||
RUN cargo build --release
|
||||
CMD ["/app/target/release/rust-bbs"]
|
7
github/rust-bbs/compose.yml
Normal file
@ -0,0 +1,7 @@
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
ports:
|
||||
- 8080:8080
|
||||
volumes:
|
||||
- ./sqlite.db:/app/sqlite.db
|
127
github/rust-bbs/src/main.rs
Normal file
@ -0,0 +1,127 @@
|
||||
use askama::Template;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use rusqlite::{Connection, Result as SqliteResult};
|
||||
use actix_web::{web, App, HttpServer, HttpResponse, Responder, HttpRequest, Error};
|
||||
use actix_web::error::{ErrorInternalServerError};
|
||||
|
||||
use std::fmt;
|
||||
impl fmt::Display for Post {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "@{} {}", self.handle.as_deref().unwrap_or("anonymous"), self.content)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Default)]
|
||||
struct QueryParams {
|
||||
handle: Option<String>,
|
||||
}
|
||||
#[derive(Serialize, Deserialize)]
|
||||
struct Post {
|
||||
id: i32,
|
||||
handle: Option<String>,
|
||||
content: String,
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "index.html")]
|
||||
struct IndexTemplate {
|
||||
posts: Vec<Post>,
|
||||
}
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "post.html")]
|
||||
struct PostTemplate {}
|
||||
|
||||
fn init_db() -> SqliteResult<()> {
|
||||
let conn = Connection::open("sqlite.db")?;
|
||||
conn.execute(
|
||||
"CREATE TABLE IF NOT EXISTS posts (
|
||||
id INTEGER PRIMARY KEY,
|
||||
handle TEXT NOT NULL,
|
||||
content TEXT NOT NULL
|
||||
)",
|
||||
[],
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn index() -> impl Responder {
|
||||
let conn = Connection::open("sqlite.db").unwrap();
|
||||
let mut stmt = conn.prepare("SELECT id, handle, content FROM posts ORDER BY id DESC").unwrap();
|
||||
let posts = stmt.query_map([], |row| {
|
||||
Ok(Post {
|
||||
id: row.get(0)?,
|
||||
handle: row.get(1)?,
|
||||
content: row.get(2)?,
|
||||
})
|
||||
}).unwrap().filter_map(Result::ok).collect::<Vec<Post>>();
|
||||
|
||||
let template = IndexTemplate { posts };
|
||||
HttpResponse::Ok().body(template.render().unwrap())
|
||||
}
|
||||
|
||||
async fn post_form() -> impl Responder {
|
||||
let template = PostTemplate {};
|
||||
HttpResponse::Ok().body(template.render().unwrap())
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct FormData {
|
||||
handle: String,
|
||||
content: String,
|
||||
}
|
||||
|
||||
async fn submit_post(
|
||||
req: HttpRequest,
|
||||
form: web::Form<FormData>
|
||||
) -> Result<impl Responder, Error> {
|
||||
let query = web::Query::<QueryParams>::from_query(req.query_string())
|
||||
.unwrap_or_else(|_| web::Query(QueryParams { handle: None }));
|
||||
//let handle = query.handle.clone().filter(|h| !h.is_empty());
|
||||
//println!("Debug: Extracted handle: {:?}", handle);
|
||||
let handle = if !form.handle.is_empty() {
|
||||
form.handle.clone()
|
||||
} else {
|
||||
query.handle.clone().unwrap_or_default()
|
||||
};
|
||||
|
||||
println!("Debug: Using handle: {:?}", handle);
|
||||
|
||||
let conn = Connection::open("sqlite.db")
|
||||
.map_err(|_| ErrorInternalServerError("Database connection failed"))?;
|
||||
let result = conn.execute(
|
||||
"INSERT INTO posts (handle, content) VALUES (?1, ?2)",
|
||||
&[&form.handle, &form.content],
|
||||
);
|
||||
match result {
|
||||
Ok(_) => {
|
||||
let redirect_url = if !handle.is_empty() {
|
||||
format!("/?handle={}", handle)
|
||||
} else {
|
||||
"/".to_string()
|
||||
};
|
||||
Ok(HttpResponse::SeeOther()
|
||||
.append_header(("Location",
|
||||
redirect_url))
|
||||
.finish())
|
||||
},
|
||||
|
||||
//Ok(_) => Ok(web::Redirect::to("/" + "?handle=" + handle).see_other()),
|
||||
Err(_) => Err(ErrorInternalServerError("Failed to insert post")),
|
||||
}
|
||||
}
|
||||
|
||||
#[actix_web::main]
|
||||
async fn main() -> std::io::Result<()> {
|
||||
init_db().unwrap();
|
||||
|
||||
HttpServer::new(|| {
|
||||
App::new()
|
||||
.route("/", web::get().to(index))
|
||||
.route("/post", web::get().to(post_form))
|
||||
.route("/submit", web::post().to(submit_post))
|
||||
})
|
||||
.bind("0.0.0.0:8080")?
|
||||
.run()
|
||||
.await
|
||||
}
|
79
github/rust-bbs/templates/index.html
Normal file
@ -0,0 +1,79 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Simple BBS</title>
|
||||
</head>
|
||||
<body>
|
||||
<div class="post-form" id="post-form">
|
||||
<form action="/submit" method="post">
|
||||
<input type="hidden" name="handle" id="handleInput">
|
||||
<textarea name="content" required></textarea>
|
||||
<input type="submit" value="Post">
|
||||
</form>
|
||||
</div>
|
||||
<div class="post-list">
|
||||
<ul>
|
||||
{% for post in posts %}
|
||||
<li><span class="user-post">{{ post }}</span></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<script>
|
||||
function getHandleFromUrl() {
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
return urlParams.get('handle');
|
||||
}
|
||||
window.onload = function() {
|
||||
const handle = getHandleFromUrl();
|
||||
if (handle) {
|
||||
document.getElementById('handleInput').value = handle;
|
||||
} else {
|
||||
document.getElementById('handleInput').value = "anonymous";
|
||||
var post = document.getElementById('post-form');
|
||||
post.style.display = 'none';
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style>
|
||||
ul {
|
||||
overflow-y: scroll;
|
||||
white-space: normal;
|
||||
word-break: break-word;
|
||||
}
|
||||
li {
|
||||
width: 100%;
|
||||
list-style: none;
|
||||
padding: 10px 0px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
textarea {
|
||||
width: 100%;
|
||||
border-radius: 5px;
|
||||
resize: none;
|
||||
border-bottom: 3px solid #2060df;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
input[type="submit"] {
|
||||
border-radius: 5px;
|
||||
width: 100%;
|
||||
color: #fff;
|
||||
background: #2060df;
|
||||
border: none;
|
||||
padding: 10px;
|
||||
font-size 20px;
|
||||
}
|
||||
ul {
|
||||
border-radius: 5px;
|
||||
padding: 0px;
|
||||
margin: 0 auto;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
span.user-post {
|
||||
padding: 0px 10px;
|
||||
}
|
||||
</style>
|
||||
|
||||
</html>
|
14
github/rust-bbs/templates/post.html
Normal file
@ -0,0 +1,14 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>New Post</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>New Post</h1>
|
||||
<form action="/submit" method="post">
|
||||
<textarea name="content" required></textarea>
|
||||
<br>
|
||||
<input type="submit" value="Post">
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
7
github/slidev/.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
node_modules
|
||||
.DS_Store
|
||||
dist
|
||||
*.local
|
||||
.vite-inspect
|
||||
.remote-assets
|
||||
components.d.ts
|
3
github/slidev/.npmrc
Normal file
@ -0,0 +1,3 @@
|
||||
# for pnpm
|
||||
shamefully-hoist=true
|
||||
auto-install-peers=true
|
15
github/slidev/README.md
Normal file
@ -0,0 +1,15 @@
|
||||
# Welcome to [Slidev](https://github.com/slidevjs/slidev)!
|
||||
|
||||
To start the slide show:
|
||||
|
||||
- `npm install`
|
||||
- `npm run dev`
|
||||
- visit <http://localhost:3030>
|
||||
|
||||
Edit the [slides.md](./slides.md) to see the changes.
|
||||
|
||||
Learn more about Slidev at the [documentation](https://sli.dev/).
|
||||
|
||||
```sh
|
||||
$ slidev build --base /slide
|
||||
```
|
37
github/slidev/components/Counter.vue
Normal file
@ -0,0 +1,37 @@
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
|
||||
const props = defineProps({
|
||||
count: {
|
||||
default: 0,
|
||||
},
|
||||
})
|
||||
|
||||
const counter = ref(props.count)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div flex="~" w="min" border="~ main rounded-md">
|
||||
<button
|
||||
border="r main"
|
||||
p="2"
|
||||
font="mono"
|
||||
outline="!none"
|
||||
hover:bg="gray-400 opacity-20"
|
||||
@click="counter -= 1"
|
||||
>
|
||||
-
|
||||
</button>
|
||||
<span m="auto" p="2">{{ counter }}</span>
|
||||
<button
|
||||
border="l main"
|
||||
p="2"
|
||||
font="mono"
|
||||
outline="!none"
|
||||
hover:bg="gray-400 opacity-20"
|
||||
@click="counter += 1"
|
||||
>
|
||||
+
|
||||
</button>
|
||||
</div>
|
||||
</template>
|
16
github/slidev/netlify.toml
Normal file
@ -0,0 +1,16 @@
|
||||
[build]
|
||||
publish = "dist"
|
||||
command = "npm run build"
|
||||
|
||||
[build.environment]
|
||||
NODE_VERSION = "20"
|
||||
|
||||
[[redirects]]
|
||||
from = "/.well-known/*"
|
||||
to = "/.well-known/:splat"
|
||||
status = 200
|
||||
|
||||
[[redirects]]
|
||||
from = "/*"
|
||||
to = "/index.html"
|
||||
status = 200
|
17
github/slidev/package.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "slidev",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "slidev build",
|
||||
"dev": "slidev --open",
|
||||
"export": "slidev export"
|
||||
},
|
||||
"dependencies": {
|
||||
"@slidev/cli": "^0.49.29",
|
||||
"@slidev/theme-default": "latest",
|
||||
"@slidev/theme-seriph": "latest",
|
||||
"slidev-theme-eloc": "^1.0.2",
|
||||
"vue": "^3.4.38"
|
||||
}
|
||||
}
|
27
github/slidev/pages/imported-slides.md
Normal file
@ -0,0 +1,27 @@
|
||||
# Imported Slides
|
||||
|
||||
You can split your slides.md into multiple files and organize them as you want using the `src` attribute.
|
||||
|
||||
#### `slides.md`
|
||||
|
||||
```markdown
|
||||
# Page 1
|
||||
|
||||
Page 2 from main entry.
|
||||
|
||||
---
|
||||
|
||||
## src: ./subpage.md
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
#### `subpage.md`
|
||||
|
||||
```markdown
|
||||
# Page 2
|
||||
|
||||
Page 2 from another file.
|
||||
```
|
||||
|
||||
[Learn more](https://sli.dev/guide/syntax.html#importing-slides)
|
135
github/slidev/slides.md
Normal file
@ -0,0 +1,135 @@
|
||||
---
|
||||
theme: eloc
|
||||
class: text-center
|
||||
highlighter: shiki
|
||||
lineNumbers: false
|
||||
info: |
|
||||
## Slidev Starter Template
|
||||
Presentation slides for developers.
|
||||
|
||||
Learn more at [Sli.dev](https://sli.dev)
|
||||
drawings:
|
||||
persist: false
|
||||
transition: slide-left
|
||||
title: Unreal Engine 5.5 | aiue
|
||||
---
|
||||
|
||||
# `aiue`
|
||||
|
||||
物語は空と海に囲まれた西の都(みやこ)からはじまる...
|
||||
|
||||
---
|
||||
|
||||
## 配信で使える最新技術の紹介
|
||||
|
||||
### `unreal engine`
|
||||
|
||||
- vrm4u, vmc, livelink, streaming
|
||||
- chatgpt, atproto
|
||||
- `ai` + `ue`
|
||||
|
||||
---
|
||||
|
||||
## `unreal engine`
|
||||
|
||||
- ue 5.5.0p
|
||||
- ue 5.4.4
|
||||
|
||||
---
|
||||
|
||||
## `vrm4u`
|
||||
|
||||
キャラクターを表示しよう
|
||||
|
||||
---
|
||||
|
||||
`vmc`と`livelink`で体の動きを反映
|
||||
|
||||
- vmcはABP
|
||||
- livelinkはCBP
|
||||
|
||||
---
|
||||
|
||||
## `web browser`
|
||||
|
||||
WBPからwebを使おう
|
||||
|
||||
---
|
||||
|
||||
- widget3dをworldに表示させると画質が悪いので`EngineMaterials/Widget3DPassThrough`以外のmaterialを使います
|
||||
|
||||
<iframe src="https://blueprintue.com/render/-49_059w/"></iframe>
|
||||
|
||||
https://blueprintue.com/blueprint/-49_059w/
|
||||
|
||||
---
|
||||
|
||||
## `pixel streaming`
|
||||
|
||||
webでゲーム配信や操作ができる
|
||||
|
||||
```sh
|
||||
$ git clone https://github.com/EpicGamesExt/PixelStreamingInfrastructure
|
||||
$ cd ./PixelStreamingInfrastructure/SignallingWebServer/platform_scripts/cmd/
|
||||
$ ./Start_SignallingServer_nopublic.ps1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## `atproto`
|
||||
|
||||
blueskyが使っているprotocol
|
||||
|
||||
---
|
||||
|
||||
## `game animation sample`
|
||||
|
||||
キャラクターの基本操作をカスタマイズ
|
||||
|
||||
---
|
||||
|
||||
## `city sample`
|
||||
|
||||
人や車が動く最先端の街
|
||||
|
||||
---
|
||||
|
||||
## `ultra dynamic sky`
|
||||
|
||||
- `sky atmoshpere` + `volumetric cloud`
|
||||
|
||||
---
|
||||
|
||||
## `whisper` + `chatgpt` + `elevenlabs`
|
||||
|
||||
キャラ設定と会話
|
||||
|
||||
- whisper : RuntimeSpeechRecognizer
|
||||
|
||||
---
|
||||
|
||||
```sh
|
||||
# perplexity.ai
|
||||
$ curl -X POST "https://api.elevenlabs.io/v1/text-to-speech/VOICE_ID" \
|
||||
-H "xi-api-key: YOUR_API_KEY" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"text": "Hello world!",
|
||||
"model_id": "eleven_monolingual_v1",
|
||||
"voice_settings": {
|
||||
"stability": 0.5,
|
||||
"similarity_boost": 0.5
|
||||
}
|
||||
}' \
|
||||
--output output.mp3
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@syui.ai
|
||||
|
||||
<br/>
|
||||
<img src="https://yui.syui.ai/icon/ai.svg" width="50px">
|
||||
<!--
|
||||
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/7/7a/Bluesky_Logo.svg/1200px-Bluesky_Logo.svg.png" width="30px">
|
||||
-->
|
12
github/slidev/snippets/external.ts
Normal file
@ -0,0 +1,12 @@
|
||||
/* eslint-disable no-console */
|
||||
|
||||
// #region snippet
|
||||
// Inside ./snippets/external.ts
|
||||
export function emptyArray<T>(length: number) {
|
||||
return Array.from<T>({ length })
|
||||
}
|
||||
// #endregion snippet
|
||||
|
||||
export function sayHello() {
|
||||
console.log('Hello from snippets/external.ts')
|
||||
}
|
7
github/slidev/vercel.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"rewrites": [
|
||||
{ "source": "/(.*)", "destination": "/index.html" }
|
||||
],
|
||||
"buildCommand": "npm run build",
|
||||
"outputDirectory": "dist"
|
||||
}
|
BIN
img/control_rig_sample_dragon_abp.mp4
Normal file
BIN
img/issue-9-0001.png
Executable file
After Width: | Height: | Size: 174 KiB |
BIN
img/issue-9-0002.png
Executable file
After Width: | Height: | Size: 93 KiB |
BIN
img/issue-9-0003.png
Executable file
After Width: | Height: | Size: 792 KiB |
BIN
img/issue-9-0004.png
Executable file
After Width: | Height: | Size: 64 KiB |
BIN
img/ue-2024-10-31-151413.png
Normal file
After Width: | Height: | Size: 960 KiB |
BIN
img/ue-2024-11-18-220316.png
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
img/ue-2024-11-18-220359.png
Normal file
After Width: | Height: | Size: 510 KiB |
BIN
img/ue-2024-11-18-220524.png
Normal file
After Width: | Height: | Size: 964 KiB |
BIN
img/ue-2024-11-18-220605.png
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
img/ue5.5-2024-12-02 093031.png
Normal file
After Width: | Height: | Size: 427 KiB |
BIN
img/ue5.5-2024-12-02 093116.png
Normal file
After Width: | Height: | Size: 372 KiB |
BIN
img/ue5.5-2024-12-02 093118.png
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
img/ue5.5-2024-12-02 093119.png
Normal file
After Width: | Height: | Size: 225 KiB |
BIN
img/ue5.5-2024-12-02 093130.png
Normal file
After Width: | Height: | Size: 255 KiB |
BIN
img/ue5.5-2024-12-21 093031.png
Normal file
After Width: | Height: | Size: 760 KiB |
BIN
img/ue5.5-2024-12-21 093032.png
Normal file
After Width: | Height: | Size: 675 KiB |
BIN
img/wiki-frontpage-0001.png
Normal file
After Width: | Height: | Size: 266 KiB |
56
plugins/vmc4ue/VMC4UEBlueprintFunctionLibrary.cpp.patch
Normal file
@ -0,0 +1,56 @@
|
||||
--- ./VMC4UE/VMC4UE/Source/VMC4UE/Source/VMC4UEBlueprintFunctionLibrary.cpp
|
||||
+++ ./VMC4UEBlueprintFunctionLibrary.cpp
|
||||
@@ -119,27 +119,29 @@ UVMC4UEStreamingSkeletalMeshTransform* UVMC4UEBlueprin
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
-
|
||||
+
|
||||
+ UVMC4UEStreamingSkeletalMeshTransform* StreamingSkeletalMeshTransform = nullptr;
|
||||
+
|
||||
+ // Try to get existing transform
|
||||
{
|
||||
- // Get
|
||||
FRWScopeLock RWScopeLock(OSCManager->RWLock, FRWScopeLockType::SLT_ReadOnly);
|
||||
- auto StreamingSkeletalMeshTransform = OSCManager->StreamingSkeletalMeshTransformMap.Find(Port);
|
||||
- if (StreamingSkeletalMeshTransform != nullptr)
|
||||
+ auto FoundTransform = OSCManager->StreamingSkeletalMeshTransformMap.Find(Port);
|
||||
+ if (FoundTransform != nullptr)
|
||||
{
|
||||
- return *StreamingSkeletalMeshTransform;
|
||||
+ return *FoundTransform;
|
||||
}
|
||||
}
|
||||
+
|
||||
+ // Create new transform if not found
|
||||
{
|
||||
- // Create
|
||||
FRWScopeLock RWScopeLock(OSCManager->RWLock, FRWScopeLockType::SLT_Write);
|
||||
- auto StreamingSkeletalMeshTransform = OSCManager->StreamingSkeletalMeshTransformMap.Find(Port);
|
||||
- if (StreamingSkeletalMeshTransform != nullptr)
|
||||
+ auto FoundTransform = OSCManager->StreamingSkeletalMeshTransformMap.Find(Port);
|
||||
+ if (FoundTransform != nullptr)
|
||||
{
|
||||
- return *StreamingSkeletalMeshTransform;
|
||||
+ return *FoundTransform;
|
||||
}
|
||||
- UVMC4UEStreamingSkeletalMeshTransform* NewStreamingSkeletalMeshTransform = NewObject<UVMC4UEStreamingSkeletalMeshTransform>();
|
||||
|
||||
- //FRWScopeLock RWScopeLock2(NewStreamingSkeletalMeshTransform->RWLock, FRWScopeLockType::SLT_Write);
|
||||
+ UVMC4UEStreamingSkeletalMeshTransform* NewStreamingSkeletalMeshTransform = NewObject<UVMC4UEStreamingSkeletalMeshTransform>();
|
||||
OSCManager->StreamingSkeletalMeshTransformMap.Emplace(Port, NewStreamingSkeletalMeshTransform);
|
||||
|
||||
// Bind Port
|
||||
@@ -149,9 +151,10 @@ UVMC4UEStreamingSkeletalMeshTransform* UVMC4UEBlueprin
|
||||
|
||||
OSCManager->OscReceivers.Emplace(OscReceiver);
|
||||
|
||||
- return NewStreamingSkeletalMeshTransform;
|
||||
+ StreamingSkeletalMeshTransform = NewStreamingSkeletalMeshTransform;
|
||||
}
|
||||
- return nullptr;
|
||||
+
|
||||
+ return StreamingSkeletalMeshTransform;
|
||||
}
|
||||
|
||||
void UVMC4UEBlueprintFunctionLibrary::RefreshConnection(float Seconds)
|
25
plugins/vmc4ue/VMC4UEBoneMappingAssetFactory.cpp.patch
Normal file
@ -0,0 +1,25 @@
|
||||
--- ./VMC4UE/Source/VMC4UEEd/Source/VMC4UEBoneMappingAssetFactory.cpp
|
||||
+++ ./VMC4UEBoneMappingAssetFactory.cpp
|
||||
@@ -5,6 +5,8 @@
|
||||
#include "../../VMC4UE/Include/VMC4UEStreamingData.h"
|
||||
#include "Dom/JsonObject.h"
|
||||
#include "JsonObjectConverter.h"
|
||||
+#include "UObject/ConstructorHelpers.h"
|
||||
+#include "UObject/UObjectGlobals.h"
|
||||
|
||||
UVMC4UEBoneMappingAssetFactory::UVMC4UEBoneMappingAssetFactory(const FObjectInitializer &ObjectInitializer)
|
||||
: Super(ObjectInitializer)
|
||||
@@ -26,11 +28,12 @@
|
||||
return UVMC4UEVRMMapping::StaticClass();
|
||||
}
|
||||
|
||||
+
|
||||
UObject *UVMC4UEBoneMappingAssetFactory::FactoryCreateText(UClass *InClass, UObject *InParent, FName InName, EObjectFlags Flags, UObject *Context, const TCHAR *Type, const TCHAR *&Buffer, const TCHAR *BuferEnd, FFeedbackContext *Warn)
|
||||
{
|
||||
FString TextData = FString(Buffer);
|
||||
|
||||
- UVMC4UEVRMMapping *NewAsset = CastChecked<UVMC4UEVRMMapping>(StaticConstructObject_Internal(InClass, InParent, InName, Flags));
|
||||
+ UVMC4UEVRMMapping* NewAsset = NewObject<UVMC4UEVRMMapping>(InParent, InClass, InName, Flags);
|
||||
if (!IsValid(NewAsset))
|
||||
{
|
||||
return nullptr;
|
23
plugins/vmc4ue/readme.md
Normal file
@ -0,0 +1,23 @@
|
||||
vmc4ue patch rebuild for `ue5.4`
|
||||
|
||||
- https://github.com/HAL9HARUKU/VMC4UE
|
||||
- https://github.com/HAL9HARUKU/ueOSC
|
||||
- https://github.com/HAL9HARUKU/VRMMapExporter
|
||||
- https://github.com/vrm-c/UniVRM
|
||||
|
||||
[unity](https://unity.com/)で`VRMMapExporter`から`$model.vrmmap`を作る。ABPで読み込む。
|
||||
|
||||
`VMC4UE`は`$project.sln`を生成して`visual studio solution`でrebuildする。
|
||||
|
||||
ただし、この方法で表情を動かすことはできない。
|
||||
|
||||
```sh
|
||||
$ git clone https://github.com/HAL9HARUKU/VMC4UE
|
||||
$ cd VMC4UE
|
||||
$ git reset --hard b5a6cf96e5928551d8e3e20b74705e3e8f22a1df
|
||||
$ cd ..
|
||||
|
||||
# example
|
||||
$ patch -u ./VMC4UE/VMC4UE/Source/VMC4UE/Source/VMC4UEBlueprintFunctionLibrary.cpp < VMC4UEBlueprintFunctionLibrary.cpp.patch
|
||||
$ patch -u ./VMC4UE/VMC4UE/Source/VMC4UEEd/Source/VMC4UEBoneMappingAssetFactory.cpp < VMC4UEBoneMappingAssetFactory.cpp.patch
|
||||
```
|
114
readme.md
@ -1,41 +1,91 @@
|
||||
# yui
|
||||
|
||||
- pixel streaming : https://ue.syui.ai
|
||||
- support : `windows 64bit`
|
||||
- [aiverse](https://git.syui.ai/ai/ue/wiki/project) project
|
||||
- [aiue](https://git.syui.ai/ai/ue/wiki/system) system
|
||||
|
||||
|title|推奨スペック|
|
||||
|---|---|
|
||||
|cpu|AMD Ryzen 7 5700X|
|
||||
|memory|32GB / DDR4-3200 DIMM (PC4-25600)|
|
||||
|gpu|GeForce RTX 4060Ti 8GB|
|
||||
|storage|1TB M.2 NVMe SSD|
|
||||
|
||||
ハイスペックなパソコンが必要です。
|
||||
|
||||
## help
|
||||
|
||||
web板は同じ画面と操作が共有されています。他の人がログインしてプレイしているときは邪魔しないようにしましょう。
|
||||
|
||||
## download & start
|
||||
|
||||
ダウンロードは数時間かかります。
|
||||
|
||||
```sh
|
||||
# ダウンロード
|
||||
$ git clone https://git.syui.ai/ai/ue
|
||||
$ cd ue
|
||||
|
||||
# 解凍
|
||||
$ aunpack yui.zip
|
||||
|
||||
# 実行
|
||||
$ ./Windows/yui.exe
|
||||
```
|
||||
see [ue.json](https://git.syui.ai/ai/ue/src/branch/main/ue.json)
|
||||
|
||||
## log
|
||||
|
||||
|version|commit|
|
||||
|---|---|
|
||||
|v0.1 β|世界を作っているところ|
|
||||
|v0.2 β|物語を作った。webに対応|
|
||||
|v0.1 β|world create|
|
||||
|v0.2 β|support web|
|
||||
|v0.3 β|support vmc|
|
||||
|v0.4 β|support at|
|
||||
|v0.5 β|support battle|
|
||||
|
||||
## at
|
||||
|
||||
the player data is stored in the pds.
|
||||
|
||||
```sh
|
||||
├── [yui.syui.ai]
|
||||
│ ├── ai.syui.game.user
|
||||
│ │ ├── lv
|
||||
│ │ ├── hp
|
||||
│ │ └── coin
|
||||
│ └── ai.syui.game.login
|
||||
│ ├── login <bool>
|
||||
│ ├── updatedAt
|
||||
│ └── username
|
||||
└─── [user.bsky.social]
|
||||
└── ai.syui.game
|
||||
├── account <at://yui.syui.ai...>
|
||||
└── createdAt
|
||||
```
|
||||
|
||||
```sh
|
||||
# https://git.syui.ai/ai/at/src/branch/main/lexicons/ai/syui/game
|
||||
$ ./at.zsh u at://did:plc:4hqjfn7m6n5hno3doamuhgef/ai.syui.game.user/syui
|
||||
{
|
||||
"uri": "at://did:plc:4hqjfn7m6n5hno3doamuhgef/ai.syui.game.user/syui",
|
||||
"cid": "bafyreigijd4vonyzgjkzotrbtq5j5gyoecokoij3u7jw4sqnx6wkh7attq",
|
||||
"value": {
|
||||
"did": "did:plc:uqzpqmrjnptsxezjx4xuh2mn",
|
||||
"$type": "ai.syui.game.user",
|
||||
"aiten": 0,
|
||||
"limit": false,
|
||||
"login": false,
|
||||
"gender": "male",
|
||||
"handle": "syui.ai",
|
||||
"character": {
|
||||
"ai": {
|
||||
"hp": 9,
|
||||
"lv": 1,
|
||||
"exp": 0,
|
||||
"img": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:4hqjfn7m6n5hno3doamuhgef/bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy@jpeg",
|
||||
"mode": 0,
|
||||
"rank": 0,
|
||||
"group": "origin",
|
||||
"attach": 0,
|
||||
"season": 0,
|
||||
"critical": 1,
|
||||
"critical_d": 0,
|
||||
"attach_post": 14102
|
||||
}
|
||||
},
|
||||
"createdAt": "2024-11-29T21:34:27.833Z",
|
||||
"updatedAt": "2024年12月8日 11:25:17 GMT"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## service
|
||||
|
||||
|title|url|
|
||||
|---|---|
|
||||
|game|https://ue.syui.ai|
|
||||
|live|https://live.syui.ai|
|
||||
|chat|https://o.syui.ai|
|
||||
|
||||
## support
|
||||
|
||||
`windows 64bit`
|
||||
|
||||
|title|spec|
|
||||
|---|---|
|
||||
|cpu|AMD Ryzen 7 5700X|
|
||||
|memory|32GB / DDR4-3200 DIMM (PC4-25600)|
|
||||
|gpu|GeForce RTX 4060Ti 8GB|
|
||||
|storage|1TB M.2 NVMe SSD|
|
||||
|
BIN
texture/T__02.PNG
Normal file
After Width: | Height: | Size: 63 KiB |
928
ue.json
Normal file
@ -0,0 +1,928 @@
|
||||
{
|
||||
"aiue": {
|
||||
"name": "aiue",
|
||||
"description": "aiue system",
|
||||
"repo": "https://git.syui.ai/ai/ue",
|
||||
"ref": "https://git.syui.ai/ai/ue/wiki/system",
|
||||
"body": {
|
||||
"text": "[ai] [u]nreal [e]ngine, system overview, game naming conventions",
|
||||
"lang": {
|
||||
"ja": "ai Unreal Engine, システムの概要, ゲームの命名規則"
|
||||
}
|
||||
},
|
||||
"lexicon": {
|
||||
"ai.syui.game": {
|
||||
"uri": "https://git.syui.ai/ai/ue/src/branch/main/lexicons/ai/syui/game.json"
|
||||
},
|
||||
"ai.syui.game.user": {
|
||||
"uri": "https://git.syui.ai/ai/ue/src/branch/main/lexicons/ai/syui/game/user.json"
|
||||
},
|
||||
"ai.syui.game.character": {
|
||||
"uri": "https://git.syui.ai/ai/ue/src/branch/main/lexicons/ai/syui/game/character.json"
|
||||
}
|
||||
},
|
||||
"system": {
|
||||
"enum": [
|
||||
"character",
|
||||
"atmosphere",
|
||||
"universe"
|
||||
],
|
||||
"atmosphere": {
|
||||
"name": "atmosphere",
|
||||
"repo": "https://github.com/bluesky-social/atproto",
|
||||
"uri": "https://atproto.com/ja/guides/glossary",
|
||||
"ref": "https://en.wikipedia.org/wiki/atmosphere_of_earth",
|
||||
"lang": {
|
||||
"ja": "大気圏"
|
||||
},
|
||||
"exoshere": {
|
||||
"name": "exo",
|
||||
"lang": {
|
||||
"ja": "外気圏"
|
||||
},
|
||||
"km": [
|
||||
{
|
||||
"min": 700,
|
||||
"max": 10000
|
||||
}
|
||||
],
|
||||
"enum": [
|
||||
"universe"
|
||||
]
|
||||
},
|
||||
"thermoshere": {
|
||||
"name": "thermo",
|
||||
"lang": {
|
||||
"ja": "熱圏"
|
||||
},
|
||||
"km": [
|
||||
{
|
||||
"min": 80,
|
||||
"max": 700
|
||||
}
|
||||
],
|
||||
"enum": [
|
||||
"aurora"
|
||||
]
|
||||
},
|
||||
"mesoshere": {
|
||||
"name": "meso",
|
||||
"lang": {
|
||||
"ja": "中間圏"
|
||||
},
|
||||
"km": [
|
||||
{
|
||||
"min": 50,
|
||||
"max": 80
|
||||
}
|
||||
],
|
||||
"enum": [
|
||||
"meteor",
|
||||
"aimoji",
|
||||
"plc"
|
||||
],
|
||||
"aimoji": {
|
||||
"name": "aimoji",
|
||||
"repo": "https://git.syui.ai/ai/moji",
|
||||
"body": {
|
||||
"text": "aimoji takes the first character from the at-uri domain. each character is assigned to a different domain",
|
||||
"lang": {
|
||||
"ja": "アイ文字はat-uriのドメインから最初の一文字を取ります。ドメインを名前とした各キャラクターが割り当てられます"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"ai",
|
||||
"com",
|
||||
"org",
|
||||
"jp",
|
||||
"us",
|
||||
"io",
|
||||
"social"
|
||||
]
|
||||
},
|
||||
"plc": {
|
||||
"name": "plc",
|
||||
"repo": "https://github.com/did-method-plc/did-method-plc/tree/main/packages/server",
|
||||
"tag": [
|
||||
"did"
|
||||
]
|
||||
}
|
||||
},
|
||||
"stratoshere": {
|
||||
"name": "strato",
|
||||
"lang": {
|
||||
"ja": "成層圏"
|
||||
},
|
||||
"km": [
|
||||
{
|
||||
"min": 12,
|
||||
"max": 50
|
||||
}
|
||||
],
|
||||
"enum": [
|
||||
"ozone",
|
||||
"bigsky"
|
||||
],
|
||||
"bigsky": {
|
||||
"name": "bgs",
|
||||
"service": [
|
||||
{
|
||||
"name": "bgs",
|
||||
"repo": "https://github.com/bluesky-social/indigo/tree/main/cmd/bigsky"
|
||||
}
|
||||
]
|
||||
},
|
||||
"ozone": {
|
||||
"service": [
|
||||
{
|
||||
"name": "ozone",
|
||||
"repo": "https://github.com/bluesky-social/atproto/tree/main/services/ozone"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"troposhere": {
|
||||
"name": "tropo",
|
||||
"lang": {
|
||||
"ja": "対流圏"
|
||||
},
|
||||
"km": [
|
||||
{
|
||||
"min": 0,
|
||||
"max": 12
|
||||
}
|
||||
],
|
||||
"enum": [
|
||||
"bluesky"
|
||||
],
|
||||
"bluesky": {
|
||||
"name": "bsky",
|
||||
"service": [
|
||||
{
|
||||
"name": "pds",
|
||||
"repo": "https://github.com/bluesky-social/atproto/tree/main/services/pds"
|
||||
},
|
||||
{
|
||||
"name": "bsky",
|
||||
"repo": "https://github.com/bluesky-social/atproto/tree/main/services/bsky",
|
||||
"tag": [
|
||||
"api",
|
||||
"appview"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "bsync",
|
||||
"repo": "https://github.com/bluesky-social/atproto/tree/main/services/bsync"
|
||||
},
|
||||
{
|
||||
"name": "social-app",
|
||||
"repo": "https://github.com/bluesky-social/social-app",
|
||||
"tag": [
|
||||
"web"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "oauth",
|
||||
"repo": "https://github.com/bluesky-social/cookbook/tree/main/python-oauth-web-app"
|
||||
},
|
||||
{
|
||||
"name": "feed",
|
||||
"repo": "https://github.com/bluesky-social/feed-generator"
|
||||
},
|
||||
{
|
||||
"name": "stream",
|
||||
"repo": "https://github.com/bluesky-social/jetstream"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"character": {
|
||||
"body": {
|
||||
"text": "character system is the core of this game",
|
||||
"lang": {
|
||||
"ja": "キャラクターシステムはこのゲームの核。yui, evolution, attributeの3つのシステムで構成される"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"yui",
|
||||
"evolution",
|
||||
"attribute",
|
||||
"status"
|
||||
],
|
||||
"status": {
|
||||
"name": "status",
|
||||
"body": {
|
||||
"text": "the status system determines the overall status of the character",
|
||||
"lang": {
|
||||
"ja": "ステータスシステムはキャラクター全般のステータスを規定する"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"lv",
|
||||
"constellation",
|
||||
"nature",
|
||||
"stone"
|
||||
],
|
||||
"lv": {
|
||||
"lang": {
|
||||
"ja": "レベル"
|
||||
},
|
||||
"min": 1,
|
||||
"max": 7,
|
||||
"body": {
|
||||
"text": "character level system",
|
||||
"lang": {
|
||||
"ja": "キャラクターのレベルシステム"
|
||||
}
|
||||
}
|
||||
},
|
||||
"constellation": {
|
||||
"lang": {
|
||||
"ja": "星座"
|
||||
},
|
||||
"min": 0,
|
||||
"max": 3,
|
||||
"body": {
|
||||
"text": "character duplication system. in japanese it is called convex, but in english it is often abbreviated to [c]",
|
||||
"lang": {
|
||||
"ja": "キャラクターの重複システム。日本語では凸と言われるが、英語では[c]と略されることが多い"
|
||||
}
|
||||
}
|
||||
},
|
||||
"natrue": {
|
||||
"lang": {
|
||||
"ja": "天性"
|
||||
},
|
||||
"enum": [
|
||||
"skill",
|
||||
"burst",
|
||||
"attack"
|
||||
],
|
||||
"min": 1,
|
||||
"max": 7
|
||||
},
|
||||
"stone": {
|
||||
"lang": {
|
||||
"ja": "石"
|
||||
},
|
||||
"body": {
|
||||
"text": "stone system modeled after birthstones",
|
||||
"lang": {
|
||||
"ja": "誕生石をモデルにした石システム"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"garnet",
|
||||
"amethyst",
|
||||
"aquamarine",
|
||||
"diamond",
|
||||
"emerald",
|
||||
"pearl",
|
||||
"ruby",
|
||||
"peridot",
|
||||
"sapphire",
|
||||
"opal",
|
||||
"topaz",
|
||||
"turquoise"
|
||||
],
|
||||
"min": 1,
|
||||
"max": 12
|
||||
}
|
||||
},
|
||||
"yui": {
|
||||
"body": {
|
||||
"text": "yui system that aims to guarantee [unique]ness for characters",
|
||||
"lang": {
|
||||
"ja": "キャラクターに唯一性の担保を目指す、唯システム"
|
||||
}
|
||||
},
|
||||
"rule": {
|
||||
"text": "characters are divided into groups. groups change with each season. they do not return to the previous season. the number of pickups starts at 1, and when it reaches 0, the chance to get that character disappears. the first character assigned will have a unique skill. characters acquired through pickups will not be able to use unique skills.",
|
||||
"lang": {
|
||||
"ja": "キャラクターはグループに分けられる。グループはシーズンで移行する。前シーズンに戻ることはない。ピックアップ数は1から始まり0になると手に入れる機会が消滅。最初に割り当てられたキャラクターはユニークスキルを持つ。ピックアップで手に入れたものはユニークスキルを使えない"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"color",
|
||||
"skill",
|
||||
"constellation"
|
||||
],
|
||||
"color": {
|
||||
"name": "color",
|
||||
"body": {
|
||||
"text": "the color system determines the color of the character",
|
||||
"lang": {
|
||||
"ja": "色システムはキャラクターの色を規定する。ガチャで手に入れたキャラクターはすべて色違いとなる。色違いは2種類あり、特殊なエフェクトが付いている。なお、低確率でオリジナルに近い色違いが排出される。rankが高い色で上書きされる"
|
||||
}
|
||||
}
|
||||
},
|
||||
"skill": {
|
||||
"name": "unique-skill"
|
||||
},
|
||||
"constellation": {
|
||||
"name": "c4"
|
||||
}
|
||||
},
|
||||
"evolution": {
|
||||
"enum": [
|
||||
"animal",
|
||||
"human",
|
||||
"divinity"
|
||||
],
|
||||
"body": {
|
||||
"text": "each character has three stages of evolution",
|
||||
"lang": {
|
||||
"ja": "1キャラクターにつき3段階の進化[変身]がある"
|
||||
}
|
||||
}
|
||||
},
|
||||
"attribute": {
|
||||
"enum": [
|
||||
"ai",
|
||||
"atom",
|
||||
"molecule"
|
||||
],
|
||||
"body": {
|
||||
"text": "each character has one attribute",
|
||||
"lang": {
|
||||
"ja": "1キャラクターにつき1属性を持つ。id+1と連鎖反応。id=idは無効。id-1は弱点。その属性グループの最後のidはグループ全体にバフ/デバフ"
|
||||
}
|
||||
},
|
||||
"ai": {
|
||||
"name": "ai",
|
||||
"group": [
|
||||
"origin"
|
||||
],
|
||||
"lang": {
|
||||
"ja": "アイ"
|
||||
},
|
||||
"ref": "at://syui.ai",
|
||||
"body": {
|
||||
"text": "the smallest unit in this world, smaller than a quark. the smaller it is, the more it can gather together. it generates enormous gravity, and black holes are made up of these particles. this world is the world of existence. existence is made up of the consciousness of existence. the consciousness of existence is the smallest thing in this world, and all matter is a collection of this consciousness.",
|
||||
"lang": {
|
||||
"ja": "クォークよりも小さいこの世界の最小単位。小さいほど集まることができる。膨大な重力が発生し、ブラックホールはこの粒子で構成されている。この世界は存在の世界。存在は存在の意識で構成される。存在の意識はこの世界で最も小さいもので、あらゆる物質はこの意識の集合体"
|
||||
},
|
||||
"effect": {
|
||||
"enum": [
|
||||
"gravity",
|
||||
"all"
|
||||
],
|
||||
"gravity": {
|
||||
"body": {
|
||||
"text": "immediately before attacking, perform a powerful pull",
|
||||
"lang": {
|
||||
"ja": "攻撃の直前、強力な引き寄せを行う"
|
||||
}
|
||||
}
|
||||
},
|
||||
"all": {
|
||||
"body": {
|
||||
"lang": {
|
||||
"ja": "すべてのid+1(すべての属性と連鎖反応を起こす)"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"ai",
|
||||
"yui"
|
||||
],
|
||||
"ai": {
|
||||
"name": "ai",
|
||||
"id": 0,
|
||||
"color": "#fff700",
|
||||
"effect": {
|
||||
"gravity": 1,
|
||||
"all": 1
|
||||
},
|
||||
"lang": {
|
||||
"ja": "アイ"
|
||||
},
|
||||
"body": {
|
||||
"text": "there is nothing the same in this world. even though we may seem to be looking at the same thing, we are actually looking at something different. there is uniqueness in everything",
|
||||
"lang": {
|
||||
"ja": "この世に同じものは何一つない。同じものを見ているように見えても、実は違うものを見ている。すべての存在は唯一性を持つ"
|
||||
}
|
||||
}
|
||||
},
|
||||
"yui": {
|
||||
"name": "yui",
|
||||
"id": 1,
|
||||
"color": "#313131",
|
||||
"lang": {
|
||||
"ja": "ユイ"
|
||||
}
|
||||
}
|
||||
},
|
||||
"atom": {
|
||||
"name": "atom",
|
||||
"group": [
|
||||
"fantasy"
|
||||
],
|
||||
"lang": {
|
||||
"ja": "原子"
|
||||
},
|
||||
"ref": "https://en.wikipedia.org/wiki/atom",
|
||||
"body": {
|
||||
"text": "the word atom comes from the greek word atmos, which means indivisible. an atom consists of an atomic nucleus, which is made up of protons and neutrons, and electrons distributed around the nucleus",
|
||||
"lang": {
|
||||
"ja": "アトムはギリシャ語のアトモス、これ以上分割できないという単語が由来。原子は陽子と中性子からなる原子核と、その周囲に分布する電子から構成される"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"proton",
|
||||
"neutron",
|
||||
"atomic",
|
||||
"electron",
|
||||
"quark"
|
||||
],
|
||||
"quark": {
|
||||
"name": "quark",
|
||||
"id": 2,
|
||||
"color": "#9b59b6",
|
||||
"lang": {
|
||||
"ja": "クォーク"
|
||||
},
|
||||
"effect": {
|
||||
"gravity": 0.5
|
||||
}
|
||||
},
|
||||
"proton": {
|
||||
"name": "proton",
|
||||
"id": 3,
|
||||
"color": "#e74c3c",
|
||||
"lang": {
|
||||
"ja": "陽子"
|
||||
},
|
||||
"effect": {
|
||||
"gravity": 0.1
|
||||
}
|
||||
},
|
||||
"neutron": {
|
||||
"name": "neutron",
|
||||
"id": 4,
|
||||
"color": "#cacfd2",
|
||||
"lang": {
|
||||
"ja": "中性子"
|
||||
},
|
||||
"effect": {
|
||||
"gravity": 0.4
|
||||
}
|
||||
},
|
||||
"atomic": {
|
||||
"name": "atomic",
|
||||
"id": 5,
|
||||
"color": "#1abc9c",
|
||||
"lang": {
|
||||
"ja": "核"
|
||||
},
|
||||
"effect": {
|
||||
"gravity": 0.3
|
||||
}
|
||||
},
|
||||
"electron": {
|
||||
"name": "electron",
|
||||
"id": 6,
|
||||
"color": "#3498db",
|
||||
"lang": {
|
||||
"ja": "電子"
|
||||
},
|
||||
"effect": {
|
||||
"gravity": 0.2
|
||||
}
|
||||
}
|
||||
},
|
||||
"molecule": {
|
||||
"name": "molecule",
|
||||
"group": [
|
||||
"animal"
|
||||
],
|
||||
"lang": {
|
||||
"ja": "分子"
|
||||
},
|
||||
"ref": "https://en.wikipedia.org/wiki/molecule",
|
||||
"body": {
|
||||
"text": "a neutrally charged substance made up of two or more atoms",
|
||||
"lang": {
|
||||
"ja": "2つ以上の原子から構成される電荷的に中性な物質"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"water",
|
||||
"wind",
|
||||
"rock",
|
||||
"ice",
|
||||
"fire"
|
||||
],
|
||||
"water": {
|
||||
"name": "water",
|
||||
"id": 7,
|
||||
"color": "#blue",
|
||||
"lang": {
|
||||
"ja": "水"
|
||||
}
|
||||
},
|
||||
"fire": {
|
||||
"name": "fire",
|
||||
"id": 8,
|
||||
"color": "#red",
|
||||
"lang": {
|
||||
"ja": "火"
|
||||
}
|
||||
},
|
||||
"ice": {
|
||||
"name": "ice",
|
||||
"id": 9,
|
||||
"color": "#ebf5fb",
|
||||
"lang": {
|
||||
"ja": "氷"
|
||||
}
|
||||
},
|
||||
"rock": {
|
||||
"name": "rock",
|
||||
"id": 10,
|
||||
"color": "#f0b27a",
|
||||
"lang": {
|
||||
"ja": "岩"
|
||||
}
|
||||
},
|
||||
"wind": {
|
||||
"name": "wind",
|
||||
"id": 11,
|
||||
"color": "#green",
|
||||
"lang": {
|
||||
"ja": "風"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"universe": {
|
||||
"name": "universe",
|
||||
"lang": {
|
||||
"ja": "宇宙"
|
||||
},
|
||||
"body": {
|
||||
"text": "mainly the map (level) system, aim to reflect reality. create as many invisible and inaccessible areas as possible",
|
||||
"lang": {
|
||||
"ja": "主にマップ(レベル)のシステム。現実の反映を目指す。できる限り見えない部分、行けない場所を作る"
|
||||
}
|
||||
},
|
||||
"system": {
|
||||
"enum": [
|
||||
"choices",
|
||||
"diagnosis",
|
||||
"fate"
|
||||
],
|
||||
"body": {
|
||||
"text": "this world is made up of three elements: choices, diagnosis, and fate",
|
||||
"lang": {
|
||||
"ja": "この世界はchoices(選択), diagnosis(診断)、fate(運)という3つの要素で構成されます"
|
||||
}
|
||||
}
|
||||
},
|
||||
"uri": "https://eyes.nasa.gov/apps/solar-system",
|
||||
"ref": "https://en.wikipedia.org/wiki/universe",
|
||||
"enum": [
|
||||
"earth",
|
||||
"moon",
|
||||
"sun",
|
||||
"mercury",
|
||||
"venus",
|
||||
"mars",
|
||||
"jupiter",
|
||||
"saturn",
|
||||
"uranus",
|
||||
"neptune",
|
||||
"neutronstar",
|
||||
"blackhole",
|
||||
"galaxy"
|
||||
],
|
||||
"earth": {
|
||||
"name": "earth",
|
||||
"lang": {
|
||||
"ja": "地球"
|
||||
},
|
||||
"mass": 1.0
|
||||
},
|
||||
"moon": {
|
||||
"name": "moon",
|
||||
"lang": {
|
||||
"lang": {
|
||||
"ja": "月"
|
||||
},
|
||||
"mass": 0.0123
|
||||
},
|
||||
"sun": {
|
||||
"name": "sun",
|
||||
"enum": [
|
||||
"solar"
|
||||
],
|
||||
"lang": {
|
||||
"ja": "太陽"
|
||||
},
|
||||
"mass": 333000.0
|
||||
},
|
||||
"mars": {
|
||||
"name": "mars",
|
||||
"lang": {
|
||||
"ja": "火星"
|
||||
},
|
||||
"mass": 0.107
|
||||
},
|
||||
"mercury": {
|
||||
"name": "mercury",
|
||||
"lang": {
|
||||
"ja": "水星"
|
||||
},
|
||||
"mass": 0.055
|
||||
},
|
||||
"venus": {
|
||||
"name": "venus",
|
||||
"lang": {
|
||||
"ja": "金星"
|
||||
},
|
||||
"mass": 0.815
|
||||
},
|
||||
"jupiter": {
|
||||
"name": "jupiter",
|
||||
"lang": {
|
||||
"ja": "木星"
|
||||
},
|
||||
"mass": 317.8
|
||||
},
|
||||
"saturn": {
|
||||
"name": "saturn",
|
||||
"lang": {
|
||||
"ja": "土星"
|
||||
},
|
||||
"mass": 95.16
|
||||
},
|
||||
"uranus": {
|
||||
"name": "uranus",
|
||||
"lang": {
|
||||
"ja": "天王星"
|
||||
},
|
||||
"mass": 14.54
|
||||
},
|
||||
"neptune": {
|
||||
"name": "neptune",
|
||||
"lang": {
|
||||
"ja": "海王星"
|
||||
},
|
||||
"mass": 17.15
|
||||
},
|
||||
"neutronstar": {
|
||||
"name": "neutronstar",
|
||||
"lang": {
|
||||
"ja": "中性子星"
|
||||
},
|
||||
"mass": 466666.0
|
||||
},
|
||||
"blackhole": {
|
||||
"name": "blackhole",
|
||||
"lang": {
|
||||
"ja": "ブラックホール"
|
||||
},
|
||||
"mass": 1000000000000.0
|
||||
},
|
||||
"galaxy": {
|
||||
"name": "galaxy",
|
||||
"ref": "https://en.wikipedia.org/wiki/galaxy",
|
||||
"lang": {
|
||||
"ja": "銀河"
|
||||
},
|
||||
"enum": [
|
||||
"milkyway",
|
||||
"andromeda",
|
||||
"ringnebula"
|
||||
],
|
||||
"milkyway": {
|
||||
"name": "milkyway",
|
||||
"lang": {
|
||||
"ja": "天の川"
|
||||
}
|
||||
},
|
||||
"andromeda": {
|
||||
"name": "andromeda",
|
||||
"lang": {
|
||||
"ja": "アンドロメダ"
|
||||
}
|
||||
},
|
||||
"ringnebula": {
|
||||
"name": "ringnebula",
|
||||
"lang": {
|
||||
"ja": "環状"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"character": {
|
||||
"ref": "https://git.syui.ai/ai/ue/src/branch/main/lexicons/ai/syui/game/user.json",
|
||||
"lang": {
|
||||
"ja": "キャラクター"
|
||||
},
|
||||
"body": {
|
||||
"text": "character status, groups, attributes, etc.",
|
||||
"lang": {
|
||||
"ja": "キャラクターのステータス、グループ、属性など"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"ai",
|
||||
"chinese",
|
||||
"manny",
|
||||
"quinn",
|
||||
"phoenix",
|
||||
"kirin",
|
||||
"leviathan",
|
||||
"wyvern",
|
||||
"cerberus",
|
||||
"dragon",
|
||||
"kitsune",
|
||||
"pegasus",
|
||||
"whale",
|
||||
"lion",
|
||||
"elephant",
|
||||
"eagle",
|
||||
"snake"
|
||||
],
|
||||
"ai": {
|
||||
"lang": {
|
||||
"ja": "アイ"
|
||||
},
|
||||
"body": {
|
||||
"text": "ai age and origin are unknown. she is described as having lived longer than a dragon. she calls herself ai. she is registered in the government system as [tsukimi yui] her birthday is 01/23, and she is also the same height. this is a reference to the mass of the moon. she has black hair and black eyes. she likes pineapples and dislikes mushrooms.",
|
||||
"lang": {
|
||||
"ja": "年齢や出身は不明。ドラゴンより長く生きているという描写がある。自らをアイと名乗る。政府のシステムには[月見唯(つきみゆい)]で登録されている。誕生日は01/23、身長も同じ。月の質量が由来。黒髪、黒い瞳をしている。パイナップルが好物でキノコが苦手"
|
||||
}
|
||||
},
|
||||
"img": "bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy",
|
||||
"season": 0,
|
||||
"group": "origin",
|
||||
"attribute": "ai",
|
||||
"day": "0123"
|
||||
},
|
||||
"manny": {
|
||||
"lang": {
|
||||
"ja": "マニー"
|
||||
},
|
||||
"img": "bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy",
|
||||
"season": 1,
|
||||
"group": "test",
|
||||
"attribute": "test"
|
||||
},
|
||||
"quinn": {
|
||||
"lang": {
|
||||
"ja": "クイーン"
|
||||
},
|
||||
"img": "bafkreie34pjuc6coenzcdwrgrh4fbacq7bkhsz263g5vpbsqxwaz37kkwy",
|
||||
"season": 1,
|
||||
"group": "test",
|
||||
"attribute": "test"
|
||||
},
|
||||
"chinese": {
|
||||
"lang": {
|
||||
"ja": "シンリュウ"
|
||||
},
|
||||
"img": "bafkreidlealfybajqzwv5eoz4jshnsijc2vnktlhpw4ph47krwj6aigqby",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "quark"
|
||||
},
|
||||
"phoenix": {
|
||||
"lang": {
|
||||
"ja": "フェニックス"
|
||||
},
|
||||
"img": "bafkreich7fsumke2yvumvixkruonzrcevk3f6g2cntzfwdn4n2c2vox5dm",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "proton"
|
||||
},
|
||||
"kirin": {
|
||||
"lang": {
|
||||
"ja": "キリン"
|
||||
},
|
||||
"img": "bafkreiegpqedlrfa4ljhssdnkrr5hyd5huy2xhh2zszj5wq2wuuzejggmq",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "neutron"
|
||||
},
|
||||
"leviathan": {
|
||||
"lang": {
|
||||
"ja": "リヴァイアサン"
|
||||
},
|
||||
"img": "bafkreig6vszkx3c4dcortjwfsz6sa6zwqgj7zpxj4lxfrrkwql4xhiu5ou",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "electron"
|
||||
},
|
||||
"wyvern": {
|
||||
"lang": {
|
||||
"ja": "ワイバーン"
|
||||
},
|
||||
"img": "bafkreiacjvagsekhiiljz3j237b6klrt6pkptxljt7kltprgg5276gv25q",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "proton"
|
||||
},
|
||||
"cerberus": {
|
||||
"lang": {
|
||||
"ja": "ケルベロス"
|
||||
},
|
||||
"img": "bafkreihpni4lp55jysalcntulzal5rbhidtbseanlucpyucagzxmv6xj24",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "atomic"
|
||||
},
|
||||
"dragon": {
|
||||
"lang": {
|
||||
"ja": "ドラゴン"
|
||||
},
|
||||
"img": "bafkreia3huw2gdenqatoobx3hcft74chced46bw4znfgepo5aenegobkri",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "atomic"
|
||||
},
|
||||
"kitsune": {
|
||||
"lang": {
|
||||
"ja": "キュウビ"
|
||||
},
|
||||
"img": "bafkreidy74aieb6ie646xhosginox5zbnbnrtd76cnt4pbn73hrxgfnple",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "neutron"
|
||||
},
|
||||
"pegasus": {
|
||||
"lang": {
|
||||
"ja": "ペガサス"
|
||||
},
|
||||
"img": "bafkreifnbfj27fr6nv7qeqqmwdibf7qrw4lauvzoknw5hexbifmwqt6kmq",
|
||||
"season": 1,
|
||||
"group": "fantasy",
|
||||
"attribute": "electron"
|
||||
},
|
||||
"lion": {
|
||||
"lang": {
|
||||
"ja": "ライオン"
|
||||
},
|
||||
"season": 2,
|
||||
"group": "animal",
|
||||
"attribute": "fire"
|
||||
},
|
||||
"elephant": {
|
||||
"lang": {
|
||||
"ja": "ゾウ"
|
||||
},
|
||||
"season": 2,
|
||||
"group": "animal",
|
||||
"attribute": "rock"
|
||||
},
|
||||
"eagle": {
|
||||
"lang": {
|
||||
"ja": "ワシ"
|
||||
},
|
||||
"season": 2,
|
||||
"group": "animal",
|
||||
"attribute": "wind"
|
||||
},
|
||||
"snake": {
|
||||
"lang": {
|
||||
"ja": "ヘビ"
|
||||
},
|
||||
"season": 2,
|
||||
"group": "animal",
|
||||
"attribute": "ice"
|
||||
},
|
||||
"whale": {
|
||||
"lang": {
|
||||
"ja": "クジラ"
|
||||
},
|
||||
"season": 2,
|
||||
"group": "animal",
|
||||
"attribute": "water"
|
||||
}
|
||||
}
|
||||
},
|
||||
"aiverse": {
|
||||
"name": "aiverse",
|
||||
"description": "aiverse project",
|
||||
"repo": "https://git.syui.ai/ai/ue/src/branch/main/verse",
|
||||
"ref": "https://git.syui.ai/ai/ue/wiki/project",
|
||||
"body": {
|
||||
"text": "ideas and philosophies when building a system. aiming to fuse games and reality",
|
||||
"lang": {
|
||||
"ja": "システムを構築する際の思想と哲学。個人(現実)とゲームの融合を目指す"
|
||||
}
|
||||
},
|
||||
"enum": [
|
||||
"unique",
|
||||
"game",
|
||||
"real"
|
||||
]
|
||||
}
|
||||
}
|
BIN
verse/bgm/aiend.mp3
Normal file
BIN
verse/bgm/aiend.wav
Normal file
BIN
verse/bgm/aihouse.mp3
Normal file
BIN
verse/bgm/aihouse.wav
Normal file
BIN
verse/bgm/aiverse.mp3
Normal file
BIN
verse/bgm/aiverse.wav
Normal file
BIN
verse/bgm/test.wav
Normal file
BIN
verse/img/aiverse.png
Normal file
After Width: | Height: | Size: 95 KiB |
BIN
verse/img/ep.mdp
Normal file
BIN
verse/img/ep.png
Normal file
After Width: | Height: | Size: 433 KiB |
BIN
verse/img/fantasy.png
Normal file
After Width: | Height: | Size: 709 KiB |