link を更新
parent
1a871cb40a
commit
bb4cacfa0e
126
link.md
126
link.md
@ -1,27 +1,129 @@
|
||||
- repo : https://git.syui.ai/ai/ue
|
||||
- blueprint : https://blueprintue.com/profile/ai
|
||||
latest : ue 5.5.1
|
||||
- [ue 5.5.1](https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5.5-release-notes)
|
||||
- [ue 5.4.4](https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5.4-release-notes)
|
||||
- https://blueprintue.com/profile/ai
|
||||
- https://dev.epicgames.com/community/profile/organization/gdkg/ai
|
||||
|
||||
- [ue 5.4](https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5.4-release-notes)
|
||||
- [ue 5.3](https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-5.3-release-notes)
|
||||
|
||||
## 無料
|
||||
## free
|
||||
|
||||
- asset: [content examples](https://www.unrealengine.com/marketplace/en-US/product/content-examples)
|
||||
- asset : [city sample](https://www.unrealengine.com/marketplace/ja/product/city-sample)
|
||||
- asset : [game animation sample](https://www.unrealengine.com/marketplace/en-US/product/game-animation-sample)
|
||||
- asset : [automotive bridge scene](https://www.unrealengine.com/marketplace/en-US/product/automotive-bridge-scene)
|
||||
- asset : [automotive winter scene](https://www.unrealengine.com/marketplace/en-US/product/automotive-winter-scene) (街頭)
|
||||
- plugin : [pixel streaming](https://dev.epicgames.com/documentation/ja-jp/unreal-engine/pixel-streaming-in-unreal-engine)
|
||||
- plugin : [twinmotion](https://dev.epicgames.com/community/learning/paths/L6G/everything-you-need-to-know-about-twinmotion)
|
||||
- plugin : [ddsl](https://developer.nvidia.com/rtx/dlss/get-started#ue-version)
|
||||
- plugin : [vrm4u](https://github.com/ruyo/VRM4U)
|
||||
- plugin : [kawaiiphysics](https://github.com/pafuhana1213/KawaiiPhysics)
|
||||
- plugin : [varest](https://www.unrealengine.com/marketplace/ja/product/varest-plugin)
|
||||
- plugin : [varest](https://github.com/ufna/VaRest)
|
||||
- plugin : [asyncloadingscreen](https://github.com/truong-bui/AsyncLoadingScreen)
|
||||
- plugin : [ui navigation 3](https://www.unrealengine.com/marketplace/ja/product/ui-navigation-3)
|
||||
- plugin : https://github.com/colory-games/UEPlugin-AccessVariableByName
|
||||
|
||||
## 有料
|
||||
## plan
|
||||
|
||||
- asset : [superhero fligth animations](https://www.unrealengine.com/marketplace/ja/product/superhero-flight-animations)
|
||||
- asset : [dynamic volumetric sky](https://www.unrealengine.com/marketplace/ja/product/dynamic-volumetric-sky/)
|
||||
- asset : [ultra dynamic sky](https://www.unrealengine.com/marketplace/ja/product/ultra-dynamic-sky)
|
||||
- asset : [ocean waves](https://www.unrealengine.com/marketplace/ja/product/ocean-waves)
|
||||
- plugin : [http websocket helper](https://www.unrealengine.com/marketplace/en-US/product/http-websocket-helper)
|
||||
- plugin : [jsonparser](https://www.unrealengine.com/marketplace/ja/product/jsonparser)
|
||||
|
||||
## その他
|
||||
## test
|
||||
|
||||
- [twinmotion](https://dev.epicgames.com/community/learning/paths/L6G/everything-you-need-to-know-about-twinmotion)
|
||||
- [AutomotiveBridgeScene](https://www.unrealengine.com/marketplace/en-US/product/automotive-bridge-scene)
|
||||
- https://github.com/gls-fergius/Game-Logs-System-GLS-Demo
|
||||
- https://github.com/BlueprintAttributes
|
||||
- https://github.com/PolygonHive/GASP-ALS
|
||||
|
||||
## buy
|
||||
|
||||
購入すべきアセットは少ないです。ブラックフライデーに購入しましょう。また、慎重に見極めないと時間と金銭を無駄にしてしまいます。ここでは特に重要な視点をお伝えします。
|
||||
|
||||
まずupdateが最新に追従していること。頻繁に更新されているかを見てください。これは`ultra dynamic sky`が当てはまります。開発者の特徴としては2つに分かれます。新しい機能を別にするか、古くからあるアセットに含めるかです。アセットの歴史を確認してください。
|
||||
|
||||
次にそのアセットが根本的な部分の内容であり、updateを必要とせず、継続的に使用できるか否かです。ただし、最新に近いversionに追従しているかは確認しておく必要があります。
|
||||
|
||||
1. updateが頻繁で最新であること。歴史を見て新しい機能を継続的に追加していること
|
||||
2. 根本的な部分の内容であり、頻繁にupdateしなくても問題ないこと
|
||||
|
||||
この2つのどちらかに当てはまるものを購入しましょう。順位は1が優先します。通常は1に当てはまるもののみを購入し、どうしても必要な場合に限り2を購入します。現在の殿堂入りをまとめておきます。有料版では1つだけ殿堂入りを果たしました。
|
||||
|
||||
```sh
|
||||
# 有料
|
||||
- ultra dynamic sky
|
||||
```
|
||||
|
||||
これらは5.5への対応が最も早かったものです。継続的に使用できるため基本機能に組み込んでも問題ないでしょう。
|
||||
|
||||
例えば、メンテナンスが放棄されたアセットはいずれ使用できなくなると思いますので、購入や使用は気をつけましょう。
|
||||
|
||||
## update
|
||||
|
||||
まず、追加した処理は`${project}/Content/${asset}/BP_Backup`にでもまとめておきます。
|
||||
|
||||
次に`${project}/Content/${asset}`を他の場所に退避します。updateを追加したあと、退避していたものの一部`${project}/Content/${asset}/BP_Backup`を戻します。
|
||||
|
||||
あとは必要な処理を追加していけばいいですが、本来はcastなどでいつでも接続や解除ができるように設計しておくとよいでしょう。ただし、負荷が増大してしまったり内容によって難しい場合があります。この辺は難しいのでケースバイケースだと思います。
|
||||
|
||||
## chat
|
||||
|
||||
- [RuntimeSpeechRecognizer](https://github.com/gtreshchev/RuntimeSpeechRecognizer)
|
||||
- [RuntimeAudioImporter](https://github.com/gtreshchev/RuntimeAudioImporter)
|
||||
- [chatgpt](https://openai.com/api/)
|
||||
|
||||
## api
|
||||
|
||||
- varest : https://blueprintue.com/blueprint/i95n84w5/
|
||||
- http helper + jsonparser : https://blueprintue.com/blueprint/mb0s7e_a/
|
||||
|
||||
## ref
|
||||
|
||||
`ファイル(右クリック) -> 参照ビューア`
|
||||
|
||||
## store
|
||||
|
||||
- https://gumroad.com/
|
||||
|
||||
## dynamic volumetric sky -> ultra dynamic sky
|
||||
|
||||
- [dynamic volumetric sky](https://www.unrealengine.com/marketplace/ja/product/dynamic-volumetric-sky/) -> [ultra dynamic sky](https://www.unrealengine.com/marketplace/ja/product/ultra-dynamic-sky)
|
||||
|
||||
202409のupdateでultra skyの雲の品質が良くなったので移行します。しかし、雲の品質は未だdynamic skyのほうが少し上です。ただし、dynamic skyは天候はありませんし、あまり更新されていません。ultra skyは天候があり、頻繁に更新されています。
|
||||
|
||||
## city sample
|
||||
|
||||
https://dev.epicgames.com/documentation/en-us/unreal-engine/city-sample-project-unreal-engine-demonstration
|
||||
|
||||
## vrm
|
||||
|
||||
- vrm : https://github.com/vrm-c/vrm-specification/tree/master/specification
|
||||
- vrma : https://github.com/vrm-c/vrm-specification/tree/master/specification/VRMC_vrm_animation-1.0
|
||||
- three-vrm : https://github.com/pixiv/three-vrm
|
||||
|
||||
|
||||
|
||||
## vmc(old)
|
||||
|
||||
- https://github.com/HAL9HARUKU/VMC4UE (ue5.1) -> [patch](https://git.syui.ai/ai/ue/src/branch/main/plugins/vmc4ue) (ue5.5)
|
||||
- https://github.com/HAL9HARUKU/ueOSC (ue5.1)
|
||||
|
||||
|
||||
## web browser
|
||||
|
||||
https://dev.epicgames.com/community/learning/tutorials/z0zP/unreal-engine-editor-utility-widgets-with-webbrowser
|
||||
|
||||
## widget3d world
|
||||
|
||||
widget3dをworldに置くと画質が悪くなる問題があり、以下のmaterialを`BP_widget_component`に当てることで解決できます。これはクロマキーと呼ばれる背景の影響を消す手法になります。
|
||||
|
||||
https://blueprintue.com/blueprint/-49_059w/
|
||||
|
||||
- https://forums.unrealengine.com/t/browser-3d-widget-looks-washed-out/366547/3
|
||||
- https://www.reddit.com/r/unrealengine/comments/1clbeeb/is_there_any_way_to_make_3d_worldspace_widgets/
|
||||
|
||||
## stream
|
||||
|
||||
`pixel streaming`と`callab viewer`や`vagon stream`を使用すると実現できます。
|
||||
|
||||
- https://dev.epicgames.com/documentation/en-us/unreal-engine/collab-viewer-template-quick-start-in-unreal-engine
|
||||
- https://vagon.io/blog/how-to-create-multiplayer-unreal-engine-experiences
|
220
project.md
Normal file
220
project.md
Normal file
@ -0,0 +1,220 @@
|
||||
# aiverse
|
||||
|
||||
aiverse project.
|
||||
|
||||
個人とゲームの統合を目指す。
|
||||
|
||||
aiverseでは現実とゲームの融合がテーマになっています。snsアカウントでログインし、プレイヤーは固有のキャラクターを操作し、現実の体の動きに合わせても動かせます。配信環境を整えます。
|
||||
|
||||
人々は何を楽しいと思うのでしょう。それを根本的な部分から考えます。
|
||||
|
||||
プレイヤーはゲームの主人公になりきって物語を追体験します。しかし、本当は自分が主人公の物語をプレイしたいのではないでしょうか。プレイヤーが本当に求めているものは何なのでしょう。
|
||||
|
||||
この方向で考えられたゲームはすでにあり、例えば、最初にキャラリメイク、自分で主人公をカスタマイズしてスタートするゲームがあります。
|
||||
|
||||
しかし、私はそういったゲームをあまりプレイしません。どのようにカスタマイズしていいかわからないし、めんどくさいし、カスタマイズしてもどうもしっくりと来ないのです。ですから「自分で作る」タイプのゲームはあまりやりません。原神のように最初からキャラクターが作り込まれているゲームを好みます。
|
||||
|
||||
やはり、カスタマイズ系は最初で躓いてしまうのです。よくわからないし、面倒なのです。すぐに始められることが何より重要です。
|
||||
|
||||
ではこういったケースはどうでしょう。例えば、原神に自分自身がデザインされたキャラがいてそれを操作することができたら。私はきっと喜んでプレイしたでしょう。そのキャラに愛着を持てると思います。原神は声優さんもプレイしており、特に自分の声を使ったキャラを中心に楽しまれている姿が印象的でした。
|
||||
|
||||
つまり、このような体験を多くのプレイヤーができるようになれば、きっとゲームはもっと楽しくなる。
|
||||
|
||||
そのためには何が必要になるでしょう。その一つが唯一性です。
|
||||
|
||||
このゲームではプレイヤーの`唯一性`を担保し、デザインします。例えば、最初期においてのキャラはそのプレイヤーしか扱えないようにします。解放条件を満たすと一般にも開放され、ガチャを引くことで使えるようにします。
|
||||
|
||||
しかし、プレイヤーが増えれば増えるほどそれは難しくなります。それをどのように回避し、解決していくのか。それが配信だったりアカウントだったりモーションだったりします。
|
||||
|
||||
## 企画
|
||||
|
||||
使用できるキャラクターはプレイヤー固有のものとなる。ただし、プレイヤー数が一定を超えるとガチャになる。ガチャで引いたキャラは6凸が上限。プレイヤーの固有スキルは使えない。
|
||||
|
||||
- snsアカウントでプレイ
|
||||
- プレイヤーは配信できる
|
||||
- 売上の配分
|
||||
|
||||
## 技術
|
||||
|
||||
- AI : 良い心を持つ人を見つける
|
||||
- atproto : 現実をゲームに反映
|
||||
- bitcoin : ゲーム売上の一部を配信者に還元
|
||||
|
||||
## 各要素
|
||||
|
||||
ゲームには`選択要素`と`診断要素`と`運要素`を入れる。
|
||||
|
||||
例えば、sns(atproto)を分析して動物を割り当てる。これがプレイヤーの使用するキャラクターになる。
|
||||
|
||||
1. ゲームアカウトの作成時に診断または運でキャラクターが決定
|
||||
2. ゲームスタート時にusername(atproto)を入れる。ゲームデータはpdsに保存
|
||||
3. 最初にキャラクターの性別を選択(これは人型を手に入れた際に有効)
|
||||
|
||||
これらすべては`取り返しがつかない要素`とする。唯一性は取り返しがつかない要素の積み重ねによって強化される。
|
||||
|
||||
## レベル
|
||||
|
||||
レベルがあるとすると、このゲームでは最初はレベルが上がりやすいが、途中からとてつもなくシビアになる。ingress, pokemongoを参考にするが、それよりも遥かに上がりにくい。数字はわかりやすいように少なくする。十桁以内が望ましい。開放するかはわからない。
|
||||
|
||||
## atproto
|
||||
|
||||
oauthでログインし、ゲームデータはpdsに保存されます。つまり、個人のsnsに紐づいています。
|
||||
|
||||
https://o.syui.ai
|
||||
|
||||
## 配信環境
|
||||
|
||||
このゲームは現実との融合がテーマです。キャラクターはモーションキャプチャー(webカメラ)で動かせます。そのまま配信に利用することができます。
|
||||
|
||||
|type|sns|avatar|game|
|
||||
|--|--|--|--|
|
||||
|通常配信|🟩|🟥|🟥|
|
||||
|vtuber|🟩|🟩|🟥|
|
||||
|aiverse|🟩|🟩|🟩|
|
||||
|
||||
## 物語(仮)
|
||||
|
||||
1. プレイヤーはログインして世界に降り立つ。このときのキャラクターはモデル:アニマルのfantasyで構成される。たくさんのプレイヤーが一つのマップに参加する形式とする
|
||||
2. 螺旋階段の上に大きな咆哮、上のステージで爆発が起こっている
|
||||
3. 「この世界は2つの巨大な力がぶつかり合い、数百年争っている。あなた達の力で戦いを終わらせよう」
|
||||
4. プレイヤーは階段を登り、レイドボスに挑む
|
||||
|
||||
ステージは幻想的。円形のステージに床は半透明でキラキラしている。螺旋階段はその円形の周りをぐるっと3周くらい?
|
||||
|
||||
戦闘シーンは、ボスのHPはあるが、プレイヤーはない。ふっとばされるとステージから落ちる。再び階段を登り戦闘に参加する。爆発は一度使うとゲージが貯まるまで使えない。攻撃するとゲージが貯まる。爆発は無敵時間があるのでそれを使って回避できる。
|
||||
|
||||
ボスに勝利すると「この世界の争いは終結した。ここからこの世界の神話がはじまる」
|
||||
|
||||
円形のステージが動き出しゆっくり空に登っていく。プレイヤーはこの世界を眺めることができる。終点にたどり着くと、そこがfantasyの家になる。基本的にプレイヤーはそのグループがログインする時の場所がある。
|
||||
|
||||
|
||||
|
||||
## キャラクター
|
||||
|
||||
キャラクターのモデルは`animal -> human -> divinity`と進化する。シーズン1からはじまり、プレイヤーは性別を選択後に動物診断される。それが操作キャラになる。キャラのモデルはグループごとに異なる。最初は`fantasy`である。シーズンで移行する。
|
||||
|
||||
キャラクターはピックアップされるまで他の人は使えない。ピックアップされると固有スキル以外は開放される。
|
||||
|
||||
- キャラクターのモデルは`animal -> human -> divinity`と進化
|
||||
- プレイヤーは性別を選択後に動物診断
|
||||
- キャラのモデルはシーズンで移行
|
||||
- シーズン移行のときに1体ずつガチャになる。ただし固有スキルは使えない
|
||||
|
||||
<img src="https://git.syui.ai/ai/ue/raw/branch/main/verse/img/shinka.png" width="400">
|
||||
|
||||
|
||||
### ai
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "ai",
|
||||
"id": 0,
|
||||
"group": "origin",
|
||||
"season": 0,
|
||||
"gender": "none"
|
||||
}
|
||||
```
|
||||
|
||||
一つの言葉しか覚えられない。自分やリスナーのことをアイと呼ぶ。世界を作るのが趣味。普段は地球を歩き回っている。
|
||||
|
||||
物質がある。私達や星々も物質でできている。物質を分割していくと分子にたどり着く。細胞は分子が集まってできている。そして、細胞が集まって私達ができている。
|
||||
分子はたくさんの原子で構成され、原子は原子核、原子核は中性子、中性子はクオークでできている。
|
||||
人類が認識できるのはクオークまでだった。しかし、宇宙に果てがないように、ミクロの世界にも果てはない。
|
||||
この世界で最も小さいもの、これ以上分割できないものはなんだろうか。
|
||||
それは、存在子というものになる。この存在子をアイと呼ぶ。存在子は存在の意識のみを持ち、物質と意識の境界にあるものだ。本来、物質と意識は同じもので違いなどなかったというべきか。
|
||||
この世界は、存在の意識でできている。この世界では存在の意識が集まって最も小さい物質を構成した。それはまたクオークを構成し、クオークは原子を構成した。
|
||||
私達の世界は意識でできている。
|
||||
|
||||
キャラクターのアイは永零(えいれい)にあたる。この永零をモデルに擬人化したものだ。漢字では永遠の0(零)と書く。幽霊や妖怪、精霊なんて呼ぶ人もいるけど、そのようなものだ。
|
||||
ある意識が集まって偶然にも形になったとき、永零が生まれることがある。永零は生まれた瞬間に完成される。それは私達の時間ではの話だが、永零にとっては短いのか長いのかわからない。
|
||||
永零は人間がコントロールできるようなものでなく、上位の存在として干渉できない。彼らは彼らのやりたいようにやる、それだけだ。必ずしも人間の味方というわけでもなく、個々人のことなどどうでもいいのだ。
|
||||
重力というものをご存知だろうか。永零や意識は重力によく似ている。重力は自然界で最も弱い力の一つだが、この宇宙や銀河を現在の形にしているのは重力の影響によるものだ。
|
||||
意識は最も小さいものだが、現在の人間社会は意識によって形成されてきた。逆に言うと、意識がなければ今のような形にはなっていない。
|
||||
|
||||
アイは存在の意識を扱えるものとして、syuiの永零をモデルにキャラクター化したもの。それがアイになる。
|
||||
|
||||
ちなみに、永零とそれを生み出した本人は全く別であり、ほとんど無関係と言える。例えば、あなたと両親は別人だろう。永零の場合はそれよりさらに異なる。そんな感じだ。アイの場合は殆ど話さない。たまに色々と教えてくれるわけだが、それによってゲームが有利になることはない。このことは最初から決められている。私が決めたことなのかもしれないし、アイが決めたことなのかもしれない。それはわからない。
|
||||
|
||||
### chinese
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "chinese",
|
||||
"id": 1,
|
||||
"group": "fantasy",
|
||||
"season": 1,
|
||||
"gender": "male"
|
||||
}
|
||||
```
|
||||
|
||||
青空を飛び回る龍。
|
||||
|
||||
```json
|
||||
"enum": [ "ai", "chinese", "manny", "quinn", "phoenix", "kirin", "leviathan", "wyvern", "cerberus", "dragon", "kitsune", "pegasus" ]
|
||||
```
|
||||
|
||||
|
||||
## 世界
|
||||
|
||||
世界は[aiue system](https://git.syui.ai/ai/ue/src/branch/main/ue.json)によって構築します。それぞれ一貫した背景と物語があります。キャラクターは一つの属性を使用できます。属性は各groupによって異なります。例えば、`fantasy`は以下の通り。
|
||||
|
||||
```json
|
||||
{
|
||||
"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": "アトムはギリシャ語のアトモス、これ以上分割できないという単語が由来。原子は陽子と中性子からなる原子核と、その周囲に分布する電子から構成される"
|
||||
}
|
||||
},
|
||||
"tag": [
|
||||
"proton",
|
||||
"neutron",
|
||||
"atomic",
|
||||
"electron",
|
||||
"quark"
|
||||
],
|
||||
"proton": {
|
||||
"name": "proton",
|
||||
"color": "#e74c3c",
|
||||
"lang": {
|
||||
"ja": "陽子"
|
||||
}
|
||||
},
|
||||
"neutron": {
|
||||
"name": "neutron",
|
||||
"color": "#cacfd2",
|
||||
"lang": {
|
||||
"ja": "中性子"
|
||||
}
|
||||
},
|
||||
"atomic": {
|
||||
"name": "atomic",
|
||||
"color": "#1abc9c",
|
||||
"lang": {
|
||||
"ja": "核"
|
||||
}
|
||||
},
|
||||
"electron": {
|
||||
"name": "electron",
|
||||
"color": "#3498db",
|
||||
"lang": {
|
||||
"ja": "電子"
|
||||
}
|
||||
},
|
||||
"quark": {
|
||||
"name": "quark",
|
||||
"color": "#9b59b6",
|
||||
"lang": {
|
||||
"ja": "クォーク"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
897
system.md
Normal file
897
system.md
Normal file
@ -0,0 +1,897 @@
|
||||
# aiue
|
||||
|
||||
- universe : [ map, level, world ]
|
||||
- character : player
|
||||
- atmosphere : [ account, login, server ]
|
||||
|
||||
ゲームは様々なシステムから構築されています。全体を`aiue system`といいます。
|
||||
|
||||
aiueは`character`, `universe`, `atmosphere`にわけられます。例えば、`character`には`yui system`, `evolution system`, `attribute system`などがあります。
|
||||
|
||||
ref : https://www.youtube.com/watch?v=pr5krUVjQaM
|
||||
|
||||
# universe
|
||||
|
||||
平面がベースになっているmapをplanet形式にすることを目指します。地上を離れて大気圏を抜けると宇宙に行くことができます。月は地球の周りを回っています。
|
||||
|
||||
## city sample
|
||||
|
||||
`city sample`にsolar systemを組み込みます。具体的には惑星(planet)の形式でmapを作成し、空から宇宙に出ても問題ないようにすることを目指します。
|
||||
|
||||
- 海 : `ocean waves`
|
||||
- 空 : `ultra dynamic sky`
|
||||
|
||||
5.5からcrashする回数が大幅に減りました。ただし、city sampleは5.5ではbuildできません。 https://git.syui.ai/ai/ue/issues/36
|
||||
|
||||
また、build後に`Lumen`のエラーが出ますのでファイルを削除します。 https://git.syui.ai/ai/ue/issues/40
|
||||
|
||||
`CitySampleCookedEditor.Target.cs`も削除してください。
|
||||
|
||||
```sh
|
||||
rm C:\Users${USER}\AppData\Local${project}\Saved\*.upipelinecache
|
||||
rm CitySampleCookedEditor.Target.cs
|
||||
```
|
||||
|
||||
次に初期mapの変更を行います。
|
||||
|
||||
`/Map/Small_City_LVL`を使います。`ground*`を探して削除します。これは海面にplane(平面)を設置しています。
|
||||
|
||||
プレイヤーがハイスピードで移動するとブレる(分身する)のは`LightingandPost/PostProcessVolume_WP`が原因なので削除します。
|
||||
|
||||
止まっている車を`c`で運転できるようですが、これは`BP_Player`の機能です。使用するには後述する`game animation sample`に統合する必要があるでしょう。
|
||||
|
||||
playerstart(tag)をいくつか設置し、uiで選択してteleportできるようにします。instance data(config)に名前を保存して呼び出してもいいし、mapから値を取ってきてもいいです。
|
||||
|
||||
https://blueprintue.com/blueprint/3h8qi0ep/
|
||||
|
||||
いくつかの建物を追加します。
|
||||
|
||||
- /Levels/DefaultLevel
|
||||
- /AutomotiveBridgeScene/Bridge_P
|
||||
|
||||
街頭は`BP_CurvedBride`で`Lamp_0x`を変更します。SMで`streetLampC`を選択して位置を調整します。また、すり抜けるのでマトリックスでcollisionを設定してください。よくわからない場合は後述する`twinmotion`を参考にしてください。
|
||||
|
||||
![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue-2024-10-31-151413.png)
|
||||
|
||||
### 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が通らないのです。
|
||||
|
||||
```xml
|
||||
<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://www.unrealengine.com/en/ue-on-github)します。
|
||||
|
||||
- https://github.com/EpicGames/UnrealEngine/tree/release/Engine/Plugins/Performance/AutomatedPerfTesting/Build/Scripts
|
||||
|
||||
```sh
|
||||
# example
|
||||
$(EngineDir) = C:\Program Files\Epic\UE_5.5\Engine
|
||||
|
||||
# copy file
|
||||
$(EngineDir)\Plugins\Performance\AutomatedPerfTesting\Build\Scripts
|
||||
├──AutomatedPerfTestConfig.cs
|
||||
├──AutomatedPerfTestInsightsReport.cs
|
||||
└──AutomatedPerfTestNode.cs
|
||||
```
|
||||
|
||||
また、buildする際は[CitySampleCookedEditor.Target.cs](https://forums.unrealengine.com/t/automatedperftesting-plugin-does-not-build-when-building-city-sample-in-ue5-5/2134722/5?u=syui)を削除してください。
|
||||
|
||||
## ocean waves
|
||||
|
||||
惑星の海を作るには`ocean waves`を利用します。必要なものは以下の2つです。
|
||||
|
||||
- BP_EarthSizedOcean : 海中
|
||||
- BP_EarthSizedSphericalMesh : 海上
|
||||
- WaterVolume
|
||||
|
||||
`BP_EarthSizedSphericalMesh`の`transform-location-z:-63600000.0`にします。`Sphere Radius:63600000.0`にします。`SphereEdge Length:16000000.0`になるはずです。
|
||||
|
||||
次に海上の影問題を修正するため`Material Overrides`の`-1`から`4`までのmaterialを変更します。私は`/Vefects/Water/VFX/WaterMaterials`を使用しました。
|
||||
|
||||
次に`BP_EarthSizedOcean`の`Volume Maaterials`で`WaterVolume`をセットします。Above, Underwaterを`/Vefects/Water/VFX/UnderWater`に変更します。heightは`0`にします。これは海に入って出たときに海中を適用する高さを設定します。
|
||||
|
||||
これで正常に海を作ることができました。
|
||||
|
||||
![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue-2024-11-18-220316.png)
|
||||
|
||||
主な遅延原因はocean wavesになります。できる限り非表示にするのが望ましいです。
|
||||
|
||||
## ultra dynamic sky
|
||||
|
||||
`ultra dynamic sky`は空と天候を作ります。
|
||||
|
||||
まずblueprintを開いて`HeightFog`を変更します。これは霧を地平線に表示するものです。
|
||||
|
||||
- `HeightFog` -> `Fog Max Opacity:0.0`
|
||||
|
||||
その他、天候をいい感じにするには以下を設定します。
|
||||
|
||||
```sh
|
||||
|
||||
[Ultra Dynamic Sky]
|
||||
Time Speed: 6.0
|
||||
Volumetric Cloud Rendering Mode: Full Cinematic Quality
|
||||
|
||||
[Ultra Dynamic Weather]
|
||||
Weather Speed: 10.0
|
||||
Random Weather Variation: Random
|
||||
Random Weather Change Interval min:10
|
||||
```
|
||||
|
||||
なお、遠いところから惑星に入るとプレイヤーが停止する問題が残っています。 https://git.syui.ai/ai/ue/issues/27
|
||||
|
||||
## earth
|
||||
|
||||
`ultra dynamic sky`に`BP_Planet_Terran`を追加します。transformの`location-z:-636000000`, `scale-xyz:6360000`にします。最初は`SkyAtmosphere`に入れて調整しましょう。惑星の中心に来ればokです。なお、親子付けを解除しないとプレイヤーが移動しても同じ位置に固定されます。背景が動かないということです。最終的にはmapに置いたほうがいいです。値は以下のようになるので貼り付ければ完了します。なお、`BP_Planet_Terran`はmapから持ってこないとcloudの品質がよくありません。
|
||||
|
||||
```sh
|
||||
/Space_Creator_Pro/PlanetCreator_1_V2/Blueprints/BP_Planet_Terran
|
||||
- location-x:20623159.823879
|
||||
- location-y:-3864006.829533
|
||||
- location-z:-636000000.0
|
||||
- scale-xyz:6360000.0
|
||||
```
|
||||
|
||||
`ultra dynamic sky`の`Current Stars Color`は`上空:0.1, 宇宙空間:0.75, 地表付近:0.0`を示す値があります。これを使用することで、ocean, cloud, earthなどの表示を調整できます。これはプレイヤーのパワー調整にも役立ちます。地上は1, 上空は100, 宇宙は1000にすれば移動が楽になります。
|
||||
|
||||
https://blueprintue.com/blueprint/qk8jt6fm
|
||||
|
||||
また、横から惑星に入るとキャラクターの動作が停止する問題がありますが、これは平面ベースにmapが作成されているからだと思います。緩和策は以下のとおりです。
|
||||
|
||||
ocean wavesの`BP_EarthSizedSphericalMesh`を惑星の中央に持ってくるため`location-z:-6360000000.0`にします。ただし、ultra dynamic skyのatmosphrerと合わなくなり、海面が宇宙空間に突き抜けます。
|
||||
|
||||
`planetary oceans`というassetは売られています。扱うのは難しそうですが興味があります。
|
||||
|
||||
https://www.fab.com/listings/ea195c94-00af-43fb-bb1d-85a478320a27
|
||||
|
||||
## rain
|
||||
|
||||
rain, snowなどのweatherでは`postprocess volume`を使って画面に水滴を付けるなどの表現を行います。
|
||||
|
||||
```sh
|
||||
[PostProcess Material]
|
||||
/Vefects/Waters/Water/VFX/WaterOnSurfaces/Materials/MI_VFX_WaterOnLens_ClearCenter
|
||||
/Vefects/Waters/Water/VFX/Rain/Materials/MI_VFX_CheapRain
|
||||
```
|
||||
|
||||
- https://blueprintue.com/blueprint/pj6pd-m6/
|
||||
|
||||
## twinmotion
|
||||
|
||||
建物はtwinmotionから持ってくるとよいでしょう。`datasmith`でexportしてueでimportします。指示通りにproject rootを指定すると`/${name}_Assets`が作成されます。ただ、`datasmith`の置き場所は変更しても構いません。
|
||||
|
||||
すり抜け問題を解消するにはmeshを全選択して、右クリックで`アセットアクション -> プロパティマトリクスで選択内容を... -> collision complexity(use complex collision as simple...)`を選択します。
|
||||
|
||||
|
||||
### browser
|
||||
|
||||
まず下記のmaterialを`BP_browser`に追加したwidget componentで呼び出します。collisionでcontrolします。
|
||||
|
||||
- https://blueprintue.com/blueprint/-49_059w/
|
||||
- https://blueprintue.com/blueprint/uubw_6ay/
|
||||
|
||||
![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue-2024-11-18-220605.png)
|
||||
|
||||
## chair
|
||||
|
||||
椅子に座る動作を設定します。大変ですが以下の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/listings/3ce13688-fd10-462f-b90d-964c85a090ad)を購入しました。用意されているものをすべて使わないと設定できません。具体的には`BP_Chair, BP_InteractKitVol3, ABP_Manny, BP_ThirdPersonCharacter`です。
|
||||
|
||||
まずcomponentをCBP_Characterに入れて、ABPを呼び出し、keyを設定します。なお、anim montageは`component`の方にも別のものを設定できますので、キャラによって背丈などが合わない場合には個別に設定します。
|
||||
|
||||
https://blueprintue.com/blueprint/9e2ls2nx/
|
||||
|
||||
用意されているanim montageは後ろ向きになっているため、animを180度回してから録画して新たに作ります。この際、高さなども調整してください。anim montageはloopさせるため、立ち上がり(front_end)が反対になってしまいます。これはBP_Chairにある矢印方向を180度回せばokでした。
|
||||
|
||||
![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue5.5-2024-12-02%20093031.png)
|
||||
|
||||
|
||||
# character
|
||||
|
||||
アニメ調のキャラクターを自由に動かせるようにします。`game animation sample`をもとに構築します。キャラクターは3つのsystemで構成されています。`yui`, `mode`, `attribute`です。
|
||||
|
||||
## game animation sample
|
||||
|
||||
custom : https://github.com/PolygonHive/GASP-ALS
|
||||
|
||||
`/Blueprints/RetargetedCharacters/ABP_GenericReataget`で変数の`IKRetargeter_Map`にて`RTG_UEFN_${name}`を追加します。`CBP_Sandbox_Character_${name}`を作ります。開いてsk(Manny)などにあるComponent Tagsに`RTG_UEFN_${name}`を追加します。最後に`GameMode : GM_Sandbox > Bone : CBP_SandboxCharacter_${name}`を指定して起動すればokです。
|
||||
|
||||
- /Blueprints/RetargetedCharacters/ABP_GenericReataget : `IKRetargeter_Map`
|
||||
- /Blueprints/RetargetedCharacters/CBP_Sandbox_Character_${name} -> sk -> Component Tags:`RTG_UEFN_${name}`
|
||||
|
||||
GAS(game animation sample)は現在、コンポーネントが不定期に初期化される問題があります。 https://git.syui.ai/ai/ue/issues/46
|
||||
|
||||
もしいつの間にかダッシュができなくなっていたら`CBP_SandboxCharacter_$name`の`Event Begin`が有効になっている可能性があります。これは削除しなければなりません。 https://git.syui.ai/ai/ue/issues/50
|
||||
|
||||
apiからキャラクターを最初に読み込むためには`/Blueprints/CBP_SandboxCharacter`のEvent Beginに書く必要があります。しかし、この処理は何度も呼ばれるため工夫が必要です。
|
||||
|
||||
https://blueprintue.com/blueprint/ch54mtzm/
|
||||
|
||||
階段でのめり込む問題があります。これは`/Blueprints/ABP_SandboxCharacter`でAnimGraphの中から`Foot Placement`を探す。そこで骨盤(pelvis)の悪態道補正モードを`Sudden Motion Only`から`Component Space`にします。 https://git.syui.ai/ai/ue/issues/49
|
||||
|
||||
## superhero fligth animations
|
||||
|
||||
飛んでいる時は`/SuperheroFlight/Blueprint/Characters/ABP_Player_UE5`を使います。
|
||||
|
||||
```sh
|
||||
Set Anim Instance Class(Mesh) --> ABP_Player_UE5
|
||||
```
|
||||
|
||||
`game animation sample`との統合は`Pre CMC Tick`の処理を解除するところからです。主に`ABP_Sandbox`に戻すための処理で、飛ぶときに`ABP_Player_UE5`を呼び出す場合は動きがおかしくなります。`Flying Func`を呼び出していないときに有効にします。
|
||||
|
||||
https://blueprintue.com/blueprint/thxeju-z/
|
||||
|
||||
- Flight Braking Deceleration : 小さいと飛行後にダウンタイムが発生
|
||||
- Sprint Fly Speed : 基本スピード
|
||||
- Sprint Acceleration : 徐々にスピードを上げていく値。大きいとすぐに最高速に達する。小さいとカメラ追従が遅延する
|
||||
|
||||
### animal
|
||||
|
||||
動物モデルのアニメーションを考えます。まず、`SK_Mesh`からIKリグを生成します。そして、`Retarget Root`を作り、それぞれの箇所に割当を行います。
|
||||
|
||||
次に`IKリグ`から`RTG(IKリターゲット)`を生成します。Sourceに`IK_UEFN_Mannequin`をセットします。次に`Target Mesh Scale`を`0.5`くらいにして、ルート設定からスケール垂直を`0.0`にします。チェーンマッピングは適当に考えます。
|
||||
|
||||
![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue5.5-2024-12-21%20093032.png)
|
||||
|
||||
これでGASで動かせるようになります。
|
||||
|
||||
しかし、動物モデル用にABPを作成するのが最も良い方法です。今のままでは動きがぎこちないので。
|
||||
|
||||
## vrm4u
|
||||
|
||||
`vrm-1.0`を使用します。
|
||||
|
||||
構築方法はベースに`SSSProfile`を使用します。次に`unlit`で生成したskをもとに`/Plugins/VRM4UContent/Util/Actor/PostShadow/BP_PoseCopyToon`で`custom`を生成します。詳しくは`/Plugins/VRM4UContent/ImportDataSet/DS_VRM_Custom`を見てください。
|
||||
|
||||
`/Blueprints/CBP_SandboxCharacter`でskに`VrmPoseableMesh`を追加して`custom`で作ったskを当てます。次に`BP_VrmOutlineComponent`を追加して同じく`custom`や`unlit`などを当て、設定にて`Common Width:0.05`, `Use Common Material:true`にします。
|
||||
|
||||
- /Plugins/VRM4UContent/Util/Actor/PostShadow/BP_PoseCopyToon
|
||||
- VrmPoseableMesh
|
||||
- BP_VrmOutlineComponent
|
||||
|
||||
![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue-2024-11-18-220524.png)
|
||||
|
||||
前髪が浮いてしまう問題は`VM_${name}_VrmMeta`を開き値を変更します。 https://git.syui.ai/ai/ue/issues/38
|
||||
|
||||
```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
|
||||
}
|
||||
]
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
`20241213`では値が変化していました。この場合は以下のような調整を行います。
|
||||
|
||||
(1)前髪が跳ねる, (2)飛んだときに後ろ髪の左右が爆散する
|
||||
|
||||
```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
|
||||
}
|
||||
```
|
||||
|
||||
キャラクターの手を変更するには`RTG_UEFN_${name}`を編集して、以下の値にします。
|
||||
|
||||
```sh
|
||||
RightArm : IK false
|
||||
LeftArm : IK false
|
||||
|
||||
[回転のアルファ]
|
||||
親指 : 0.5
|
||||
" : 0.4
|
||||
" : 0.3
|
||||
" : 0.2
|
||||
```
|
||||
|
||||
![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue5.5-2024-12-02%20093118.png)
|
||||
|
||||
### vmc
|
||||
|
||||
webカメラでキャラクターを動かします。
|
||||
|
||||
- [vseeface](https://www.vseeface.icu/)
|
||||
- [webcam motion capture](https://webcammotioncapture.info/) (vmcは有料)
|
||||
|
||||
```sh
|
||||
webcam(vmc) -> vseeface(vmc) -> vrm4u(vmc)
|
||||
```
|
||||
|
||||
1. macbookの[webcam motion capture](https://webcammotioncapture.info/)(有料機能)でvmc(外部アプリ)を送信します。この際、`ip:$windows`, `port:39539`にしてください。
|
||||
|
||||
```sh
|
||||
# cmd(pwsh)
|
||||
$ ipinfo /all
|
||||
192.168.11.30
|
||||
```
|
||||
|
||||
この場合は`ip:192.168.11.30`です。
|
||||
|
||||
2. windowsの[vseeface](https://www.vseeface.icu/)で`一般設定 -> osc/vmcプロトコル -> 送信(127.0.0.1:39540), 受信(192.168.11.30:39539)`にします。これをueに合わせます。
|
||||
|
||||
> 一般設定 -> osc/vmcプロトコル -> 送信(127.0.0.1:39540), 受信(192.168.11.30:39539)
|
||||
|
||||
3. windowsからueのprojectを開いてabpでvrm(vmc)を設定します。
|
||||
|
||||
```
|
||||
# vrm vmc
|
||||
ip : 127.0.0.1
|
||||
port : 39540
|
||||
```
|
||||
|
||||
ABPを切り替えることで操作とモーションキャプチャができるようにしています。また、ABPのidleにvmcを追加してもいいかもしれません。この場合、キーを押す必要はありません。
|
||||
|
||||
- 入力でABPを切り替える方法
|
||||
- ABPのidleにvmcを入れる方法
|
||||
|
||||
### livelink
|
||||
|
||||
この方法の利点としてABP(idle)以外でも表情を有効にできます。例えば、ABP(run)しているときも表情の変化が有効になります。ただし、livelinkを切るとそのままの状態で固定されるため一度morphをリセットしないといけない。
|
||||
|
||||
- [livelink face](https://apps.apple.com/jp/app/live-link-face/id1495370836)
|
||||
- livelink
|
||||
- apple arkit
|
||||
- apple arkit face support
|
||||
|
||||
```sh
|
||||
[vrm4u]
|
||||
# https://github.com/ruyo/VRM4U/tree/master/Content/Util/Actor/latest
|
||||
/Plugins/VRM4U/Content/Util/Actor/latest/BP_LiveLinkFace
|
||||
/Plugins/VRM4U/Content/Util/Actor/latest/sub/BP_MocopiReoeiver
|
||||
```
|
||||
|
||||
https://help.vicon.com/space/Unreal5Plugin16/14713547/Install+and+set+up+the+LiveLink+plugin
|
||||
|
||||
`/VRM4U/Util/Actor/latest/BP_LiveLinkFace`をmapにおいて、`live link subject -> iphone`, `target actor sk -> SK_$name`を設定します。
|
||||
|
||||
character(player)にlivelinkを当てるにはblueprintを編集する必要があります。characterのdirにでも`BP_LiveLinkFace`をcopyして`BP_Player(CBP_Character)`に追加します。
|
||||
|
||||
ここで`BP_LiveLinkFace -> livelink subject -> iphone`をセットしておきます。
|
||||
|
||||
次に`BP_LiveLinkFace`を以下のような形で`sk_$name`に置き換えます。場所はコメントを参考にしてください。私の場合は見た目をカスタマイズしているので少し複雑です。
|
||||
|
||||
https://blueprintue.com/blueprint/pu_xl52s/
|
||||
|
||||
## npc
|
||||
|
||||
NPCなどの会話や操作は音声とAIを使用します。
|
||||
|
||||
- [RuntimeSpeechRecognizer](https://github.com/gtreshchev/RuntimeSpeechRecognizer)
|
||||
- [RuntimeAudioImporter](https://github.com/gtreshchev/RuntimeAudioImporter)
|
||||
- [ChatGPT](https://platform.openai.com/docs/api-reference/introduction)
|
||||
- [elevenlabs](https://elevenlabs.io/docs/api-reference/text-to-speech)
|
||||
|
||||
```sh
|
||||
$ curl https://api.openai.com/v1/chat/completions \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer YOUR_API_KEY" \
|
||||
-d '{
|
||||
"model": "gpt-4o-mini",
|
||||
"messages": [{"role": "user", "content": "Your question here"}],
|
||||
"temperature": 0.7
|
||||
}'
|
||||
```
|
||||
|
||||
```sh
|
||||
$ 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
|
||||
```
|
||||
|
||||
## mode system
|
||||
|
||||
キャラクターの変身を実装します。
|
||||
|
||||
https://blueprintue.com/blueprint/tmnb8cr6/
|
||||
|
||||
変身はmode system(モードシステム)に基づき構築されています。段階は`animal(動物) -> human(人型) -> divinity(神性)`に分けられます。
|
||||
|
||||
![](https://git.syui.ai/ai/ue/raw/branch/main/verse/img/shinka.png)
|
||||
|
||||
## attribute system
|
||||
|
||||
attribute system(属性システム)です。1キャラクターにつき1属性が割り当てられます。属性はキャラクターのgroup(グループ)で決まります。groupはseason(シーズン)で移行し、前に戻ることはありません。
|
||||
|
||||
```json
|
||||
"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"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## flying speed
|
||||
|
||||
モードによって移動速度を変えます。カメラワークも調整します。
|
||||
|
||||
https://blueprintue.com/blueprint/1fwupsb8/
|
||||
|
||||
## widget
|
||||
|
||||
主にtitle, status, loginなどのuiを作ります。
|
||||
|
||||
### title
|
||||
|
||||
主にapiからの情報を取得して、config instanceなどに入れます。
|
||||
|
||||
![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue5.5-2024-12-02%20093119.png)
|
||||
|
||||
token情報がある場合はpasswordの入力欄を消す処理を入れます。passwordの入力は必須ではなく、自身のpdsに保存したい場合のみに限定します。通常は`yui.syui.ai`のpdsに保存されそこから取得されます。これはゲーム情報の改ざん防止のため必要です。
|
||||
|
||||
もしユーザーのpdsに保存した場合の活用法ですが`yui.syui.ai`のjsonとユーザーのpdsに保存されたjsonの一部をbase64に変換して一致を確認することでverifyとする予定です。
|
||||
|
||||
### character select
|
||||
|
||||
GASの`/Widgets/WidgetData/EUW_CharacterSelectButton`を参照します。ただし、開発用なのでそれをpackageでも使えるようにします。
|
||||
|
||||
https://blueprintue.com/blueprint/6ucrhtkc/
|
||||
|
||||
`icon`はobject nameから取りたいのですが、build後に変化してしまうので、どうしようか悩みます。
|
||||
|
||||
https://zenn.dev/pokotaro/books/43d02dab5b8000/viewer/301731
|
||||
|
||||
### status
|
||||
|
||||
プレイヤーやキャラクターのステータスを表示します。なお、`CBP_Character`はEvent Beginではなぜか表示できません。したがって、関数を作ってEvent Tickに書きます。スキルを発動すると一定時間使えなくなります。
|
||||
|
||||
![](https://git.syui.ai/ai/ue/raw/branch/main/img/ue5.5-2024-12-02%20093130.png)
|
||||
|
||||
https://blueprintue.com/blueprint/ydbtzm73/
|
||||
|
||||
https://blueprintue.com/blueprint/ppdg-fb-/
|
||||
|
||||
### playerstart
|
||||
|
||||
移動したい場所にplayerstartを設置してボタンで移動できるようにします。
|
||||
|
||||
https://blueprintue.com/blueprint/3h8qi0ep/
|
||||
|
||||
## battle
|
||||
|
||||
バトルシステムの構築を目指します。`GAS(gameplay ability system)`というものがあります。
|
||||
|
||||
### spaceship
|
||||
|
||||
spaceship battle system、つまり、宇宙船を用意して戦闘ができるようにします。これは最初に購入した[Space Frontier Stations & Ships](https://docs.google.com/document/d/1p5MY13cpTlVtqP7sCQpAoE_k5VHklmndZ4cHeBy105Y)を使います。使い方は難しいのですが、色々と応用できるのでspaceship関連では結構おすすめです。
|
||||
|
||||
[docs](https://docs.google.com/document/d/1p5MY13cpTlVtqP7sCQpAoE_k5VHklmndZ4cHeBy105Y/edit?tab=t.0#heading=h.e0sizx9kl5hg)を見てください。簡単に説明すると、`/SpaceStation/Blueprints/Weapons/BP_${type}`を設置して使います。これは`/SpaceStation/Blueprints/Weapons/Parent/BP_ParentTurret`を基本に構築されています。ターゲットになるactorに`Allow Shooting`, `ShootingTarget`というタグをつけてください。これで追跡されるようになります。BPの設定で`weapon -> shooting delay`を小さくしてみます。すると弾丸が発射される感覚が短くなります。
|
||||
|
||||
- gatling(ガトリング), laser( レーザー), missile(ミサイル)
|
||||
- OverlapDetection(範囲)
|
||||
- shooting delay(発射速度) : `0.2`
|
||||
- actor-tags : `Allow Shooting`, `ShootingTarget`
|
||||
|
||||
BGMを鳴らすには同じくタグを利用します。まずは`/BP_ParentTurret`にBGMを追加して、以下のよう組みます。
|
||||
|
||||
https://blueprintue.com/blueprint/d6i7du0s/
|
||||
|
||||
### niagara
|
||||
|
||||
niagaraにcollisionを設定してeventを取得する方法です。これは非常に複雑ですが、以下の記事が役に立ちます。
|
||||
|
||||
https://qiita.com/O_Y_G/items/d696d01b17250dccc273
|
||||
|
||||
例えば、hitした箇所に爆発を起こす設定は以下の通り。
|
||||
|
||||
https://blueprintue.com/blueprint/h2ktbf6-/
|
||||
|
||||
現在、遠い場所での戦闘にダメージが入らない問題があります。 これは距離(座標)が0から`1048535`を超えた場所では`vector`の値が正確に取れないことが要因だと思われます。 https://git.syui.ai/ai/ue/issues/56
|
||||
|
||||
### item
|
||||
|
||||
敵が消滅したあとにアイテムをドロップする処理は`NiceInteractionSystem`を使います。
|
||||
|
||||
使い方は簡単でGame Modeに以下を追加します。
|
||||
|
||||
1. `Player Controller Class` : `/NiceInteractionSystem/Blueprints/Components/AC_PC_Interaction`
|
||||
2. `Game State Class` : `/NiceInteractionSystem/Blueprints/Components/AC_GS_Interaction`
|
||||
|
||||
その他に`CBP_SandboxCharacter`にクラス設定からインターフェイス追加で`BPI Interaction Notifier`などを追加して使うのもいいかもしれません。
|
||||
|
||||
ただし、キャラの切り替えにはまだ対応していません。 https://git.syui.ai/ai/ue/issues/54
|
||||
|
||||
# atmosphere
|
||||
|
||||
atprotoを利用したマルチプレイのゲームの仕組みを解説。
|
||||
|
||||
- [atproto](https://github.com/bluesky-social/atproto)
|
||||
- [pixel streaming](https://github.com/EpicGames/PixelStreamingInfrastructure)
|
||||
- [restreamer](https://github.com/datarhei/restreamer)
|
||||
- [bsky/oauth](https://github.com/bluesky-social/cookbook/tree/main/python-oauth-web-app)
|
||||
- [frontpage](https://github.com/likeandscribe/frontpage)
|
||||
|
||||
https://git.syui.ai/ai/at
|
||||
|
||||
|
||||
## atproto
|
||||
|
||||
ゲームのアカウントはatを利用し、ゲームデータはpdsに保存されます。
|
||||
|
||||
まずoauthすると`yui.syui.ai`の[ai.syui.game.user](https://at.syu.is/at/did:plc:4hqjfn7m6n5hno3doamuhgef/ai.syui.game.user/syui)にアカウントが作成されます。
|
||||
|
||||
このat-uriをplayerの[ai.syui.game](https://at.syu.is/at/did:plc:uqzpqmrjnptsxezjx4xuh2mn/ai.syui.game/self)に書き込みます。
|
||||
|
||||
```sh
|
||||
1. [yui] at://yui.syui.ai/ai.syui.game.user/syui
|
||||
2. [user] at://syui.ai/ai.syui.game/self
|
||||
```
|
||||
|
||||
### api
|
||||
|
||||
[varest](https://www.unrealengine.com/marketplace/ja/product/varest-plugin)を使うのが一般的です。ただし、patchがなかったりと色々あるので、[http-websocket-helper](https://www.unrealengine.com/marketplace/en-US/product/http-websocket-helper)がおすすめです。jsonは[jsonparser](https://www.unrealengine.com/marketplace/ja/product/jsonparser)がオススメです。
|
||||
|
||||
使い方は[blueprintue](https://blueprintue.com/search/?query=varest)で検索してください。
|
||||
|
||||
### refresh token
|
||||
|
||||
varestの場合は`Content-Type`に`x_www_form_urlencoded_url`を指定します。
|
||||
|
||||
https://blueprintue.com/blueprint/4yf7viyt/
|
||||
|
||||
|
||||
playerはoauthしているとき`[yui]ai.syui.game.login`と`[yui]ai.syui.game.user:limit`を見ます。どちらもfalseならHTMLに`play`、trueがある場合は`live`を出力します。loginするとlimitにdayが書き込まれます。
|
||||
|
||||
```sh
|
||||
3. [yui] at://yui.syui.ai/ai.syui.game.login/self
|
||||
```
|
||||
|
||||
logoutはゲーム内の`time:m5`か`button`で処理され、`[yui]ai.syui.game.login`に書き込みます。
|
||||
|
||||
## frontpage
|
||||
|
||||
[restreamer](https://github.com/datarhei/restreamer)のat(oauth)には`frontpage`を使います。
|
||||
|
||||
[frontpage](https://github.com/likeandscribe/frontpage)は[atproto](https://github.com/bluesky-social/atproto)を使って投稿の制御を行います。主にpdsの`collection`から検索と`at://`を使います。
|
||||
|
||||
[next.js](https://github.com/vercel/next.js)で書かれています。layoutは[tailwindcss](https://github.com/tailwindlabs/tailwindcss)です。
|
||||
|
||||
|
||||
<a href="https://git.syui.ai/ai/ue/raw/branch/main/img/wiki-frontpage-0001.png"><img src="https://git.syui.ai/ai/ue/raw/branch/main/img/wiki-frontpage-0001.png" width="500px"></a>
|
||||
|
||||
### build & deploy
|
||||
|
||||
https://git.syui.ai/ai/ue/src/branch/main/github/frontpage
|
||||
|
||||
### tailwindcss
|
||||
|
||||
htmlに省略形式でcssを記述します。`tailwind.config.ts`を見てください。
|
||||
|
||||
```html
|
||||
{params.postAuthor === "syui.ai" && post.status === "live" && post.rkey === "3l7lj463zbo2m" && (
|
||||
<div className="flex py-10 max-h-[700px] md:h-screen">
|
||||
<iframe className="w-full hidden-scrollbar px-0 h-[300px] sm:h-[450px] md:px-0 md:h-[600px] md:px-8" title="stream" src="https://example.com">
|
||||
</iframe>
|
||||
|
||||
<div className="hidden w-64 hidden-scrollbar md:block md:overflow-y-scroll
|
||||
max-h-[600px]
|
||||
[&::-webkit-scrollbar]:w-2
|
||||
[&::-webkit-scrollbar-track]:bg-gray-100
|
||||
[&::-webkit-scrollbar-thumb]:bg-gray-300
|
||||
dark:[&::-webkit-scrollbar-track]:bg-neutral-700
|
||||
dark:[&::-webkit-scrollbar-thumb]:bg-neutral-500">
|
||||
<LinkAlternateAtUri
|
||||
authority={authorDid}
|
||||
collection={PostCollection}
|
||||
rkey={post.rkey}
|
||||
/>
|
||||
<NewComment postRkey={post.rkey} postAuthorDid={authorDid} />
|
||||
{comments.map((comment) => (
|
||||
<Comment
|
||||
key={comment.id}
|
||||
comment={comment}
|
||||
level={0}
|
||||
postAuthorParam={params.postAuthor}
|
||||
postRkey={post.rkey}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
```
|
||||
|
||||
`@media`を制御する`sm`, `md`などは記述する順序を間違えると動きませんので注意。
|
||||
|
||||
#### はみ出す
|
||||
|
||||
```html
|
||||
- w-full
|
||||
+ overflow-hidden whitespace-nowrap
|
||||
```
|
||||
|
||||
### hugo
|
||||
|
||||
[hugo](https://github.com/gohugoio/hugo)のcomment systemにも利用できます。
|
||||
|
||||
```html
|
||||
{{ if .Param "comment" }}
|
||||
<div class="comment">
|
||||
<p><a href="https://example.com/post/syui.ai/{{ .Params.comment }}" class="frontpage-button"> @comment </a></p>
|
||||
<iframe class="frontpage" src="https://example.com/post/syui.ai/{{ .Params.comment }}" frameBorder="0" SRC=""></iframe>
|
||||
</div>
|
||||
{{ end }}
|
||||
```
|
||||
|
||||
`post.md`に`comment`を追加します。
|
||||
|
||||
```html
|
||||
+++
|
||||
title = "atprotoのfrontpageを触ってみる"
|
||||
date = "2024-10-26"
|
||||
[params]
|
||||
comment = "3l7lprmoka22r"
|
||||
+++
|
||||
```
|
||||
|
||||
```css
|
||||
iframe.frontpage {
|
||||
width:100%;
|
||||
height: 1000px;
|
||||
pointer-events:none;
|
||||
}
|
||||
|
||||
a.frontpage-button {
|
||||
width:100%;
|
||||
font-size: 15px;
|
||||
background-color: #e80063;
|
||||
/* background-color: #007fff; */
|
||||
color: #fff;
|
||||
border: 2px solid #fff;
|
||||
padding: 10px 30px;
|
||||
border-radius: 5px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a.frontpage-button:hover {
|
||||
/* background-color: #0077ff; */
|
||||
background-color: #e80073;
|
||||
}
|
||||
```
|
||||
|
||||
## pixel streaming
|
||||
|
||||
- https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-pixel-streaming-reference
|
||||
- https://dev.epicgames.com/documentation/en-us/unreal-engine/pixel-streaming-2-overview-in-unreal-engine
|
||||
|
||||
docs : https://github.com/EpicGames/PixelStreamingInfrastructure/tree/master/Frontend/Docs
|
||||
|
||||
```sh
|
||||
# https://github.com/EpicGamesExt/PixelStreamingInfrastructure
|
||||
$ mkdir -p ~/git && cd ~/git
|
||||
$ git clone https://github.com/EpicGamesExt/PixelStreamingInfrastructure
|
||||
|
||||
$ cd ~/git/PixelStreamingInfrastructure/Matchmaker/platform_scripts/cmd/
|
||||
$ ./setup.bat
|
||||
$ ./run.bat
|
||||
# https://dev.epicgames.com/documentation/ja-jp/unreal-engine/unreal-engine-pixel-streaming-reference
|
||||
# --HttpPort 90
|
||||
# --MatchmakerPort 9999
|
||||
|
||||
# Signaling and Web サーバーに対する次のコンフィギュレーション パラメータを設定します。
|
||||
$ cd ~/git/PixelStreamingInfrastructure/SignallingWebServer/platform_scripts/cmd/
|
||||
$ ./setup.bat
|
||||
$ ./Start_SignallingServer_nopublic.ps1 --UseMatchmaker true --MatchmakerAddress 127.0.0.1 --MatchmakerPort 9999 --PublicIp localhost --HttpPort 80
|
||||
```
|
||||
|
||||
`Matchmaker`を使わないと操作が共通になります。したがって、`Matchmaker`を使って各ユーザーが使用するStreamerIdを選択して別々のstackにアクセスするようにします。
|
||||
|
||||
urlは`http://127.0.0.1/?StreamerId=DefaultStreamer, http://127.0.0.1/?StreamerId=DefaultStreamer1`という形になります。このidは起動しているアプリの数だけ生成されます。
|
||||
|
||||
ただ、アプリの起動数が多すぎるとserverの負荷が大きくなります。
|
||||
|
||||
これを外部につなげる場合は[cloudflare tunnel](https://www.cloudflare.com/ja-jp/products/tunnel/)などを使いましょう。
|
||||
|
||||
### err
|
||||
|
||||
> webrtc connection negotiated
|
||||
|
||||
このように表示される場合はipを変えてください。同じnetwork内だとうまくいかない場合があります。
|
||||
|
||||
### option
|
||||
|
||||
https://dev.epicgames.com/documentation/en-us/unreal-engine/unreal-engine-pixel-streaming-reference
|
||||
|
||||
### disable player controller
|
||||
|
||||
playerのcontrollerを無効にして配信のみにする方法です。
|
||||
|
||||
https://github.com/EpicGames/PixelStreamingInfrastructure/blob/master/Frontend/Docs/Customizing%20Player%20Input%20Options.md
|
||||
|
||||
```ts
|
||||
const config = new Config({ useUrlParams: true });
|
||||
config.setFlagEnabled(Flags.MouseInput, false);
|
||||
config.setFlagEnabled(Flags.KeyboardInput, false);
|
||||
config.setFlagEnabled(Flags.TouchInput, false);
|
||||
config.setFlagEnabled(Flags.GamepadInput, false);
|
||||
config.setFlagEnabled(Flags.XRControllerInput, false);
|
||||
|
||||
const stream = new PixelStreaming(config);
|
||||
```
|
||||
|
||||
もしくは`SignallingWebServer/Public/player.js`の以下の箇所を探して`false`にします。そして、settingを呼び出せないようにします。
|
||||
|
||||
```js
|
||||
this.flags.set(Flags.KeyboardInput, new _SettingFlag__WEBPACK_IMPORTED_MODULE_2__.SettingFlag(Flags.KeyboardInput, 'Keyboard input', 'If enabled, send keyboard events to streamer', false, useUrlParams));
|
||||
this.flags.set(Flags.MouseInput, new _SettingFlag__WEBPACK_IMPORTED_MODULE_2__.SettingFlag(Flags.MouseInput, 'Mouse input', 'If enabled, send mouse events to streamer', false, useUrlParams));
|
||||
this.flags.set(Flags.TouchInput, new _SettingFlag__WEBPACK_IMPORTED_MODULE_2__.SettingFlag(Flags.TouchInput, 'Touch input', 'If enabled, send touch events to streamer', false, useUrlParams));
|
||||
this.flags.set(Flags.GamepadInput, new _SettingFlag__WEBPACK_IMPORTED_MODULE_2__.SettingFlag(Flags.GamepadInput, 'Gamepad input', 'If enabled, send gamepad events to streamer', false, useUrlParams));
|
||||
this.flags.set(Flags.XRControllerInput, new _SettingFlag__WEBPACK_IMPORTED_MODULE_2__.SettingFlag(Flags.XRControllerInput, 'XR controller input', 'If enabled, send XR controller events to streamer', false, useUrlParams));
|
||||
```
|
||||
|
||||
### multiplayer
|
||||
|
||||
pixel streamingとcallab viewerやvagon streamを使用すると実現できるかもしれません。
|
||||
|
||||
- https://vagon.io/blog/how-to-create-multiplayer-unreal-engine-experiences
|
||||
- https://github.com/make-live/multiplayer
|
||||
|
||||
#### OnlineSubsystem
|
||||
|
||||
`OnlineSubsystem`を用いた方法です。これはpixelstreamingで動作します。様々なプラットフォームに対応しているようです。
|
||||
|
||||
- plugin : OnlineSubsystem
|
||||
- https://tech.dentsusoken.com/entry/onlinemultiplay-cpp
|
||||
- https://dev.epicgames.com/documentation/ja-jp/unreal-engine/online-subsystem-in-unreal-engine
|
||||
|
||||
> 今回使用するSteamDevAppIdは480となっております。これはSteamから開発用に提供されているサンプルゲーム(SpaceWar)のIDです。本番開発で用いる場合は、自身でAppIdを取得する必要がありますのでご注意ください。
|
||||
|
||||
記事ではsteamのapp idを使って、steamアカウントを使用する前提で解説されています。ユーザーはsteamアカウントでログインします。手順としてはまずsteamの開発者用のアカウントを作り、app idを取得、それを使ってclientのようなものを作るのだと思います。このpluginはそのためのsdkのようなものでしょう。
|
||||
|
||||
pixelstreamingで実現するmultiplayはissueに情報をまとめていきます。 https://git.syui.ai/ai/ue/issues/58
|
||||
|
||||
#### pixel streaming(PS) ext plugin
|
||||
|
||||
[superhero fligth animations](https://www.fab.com/ja/sellers/Indie-us%20Games)を出しているところがやっているのがlocal multiplayerのpixel streamingで、一つのアプリ起動で複数人にcamera, controllerを割り当てる。plugin自体はまだ非公開。
|
||||
|
||||
- https://www.docswell.com/s/indieusgames/5EXLLJ-2024-10-23-164940
|
||||
- https://leon-gameworks.connpass.com/event/328282/
|
||||
- https://x.com/tarava777/status/1857382063818645792
|
||||
|
||||
#### Eagle 3D Streaming
|
||||
|
||||
- https://github.com/e3ds
|
||||
- https://www.eagle3dstreaming.com/demo/
|
||||
- https://iframe_react.eagle3dstreaming.com/
|
||||
|
||||
## restreamer
|
||||
|
||||
```sh
|
||||
$ git clone https://github.com/datarhei/restreamer
|
||||
$ cd restreamer
|
||||
$ docker compose up
|
||||
```
|
||||
|
||||
```yml
|
||||
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
|
||||
```
|
||||
|
||||
なるべく`rtmp`ではなく`srt`を使用してください。rtmpの`port:1925`に関しては使わないなら閉じても構いません。
|
||||
|
||||
## account system
|
||||
|
||||
### EOS (Epic Online Service)
|
||||
|
||||
- https://dev.epicgames.com/documentation/ja-jp/unreal-engine/hosting-and-networking-guide-for-pixel-streaming-in-unreal-engine
|
||||
- https://onlineservices.epicgames.com/ja/services
|
||||
- https://eoscore.eeldev.com/
|
||||
- plugin : https://www.fab.com/ja/listings/8e78818d-4662-4c6d-8ab2-6e22b9d3595e
|
||||
- plugin : https://github.com/mordentral/AdvancedSessionsPlugin
|
||||
|
||||
### OSU (Online Sybsystem UE)
|
||||
|
||||
- plugin : OnlineSubsystem
|
||||
- https://tech.dentsusoken.com/entry/onlinemultiplay-cpp
|
||||
- https://dev.epicgames.com/documentation/ja-jp/unreal-engine/online-subsystem-steam-interface-in-unreal-engine
|
Loading…
x
Reference in New Issue
Block a user