Compare commits
20 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
bacb16f17d | ||
|
d9cbb85860 | ||
|
74c5a793d9 | ||
|
20496a9f59 | ||
|
3f08117960 | ||
|
14c74ae62e | ||
|
186554b3e9 | ||
|
e678ce8a2a | ||
|
ce77fc773c | ||
|
78dca536fb | ||
|
7086b35b3f | ||
|
59c256704b | ||
|
c4f3728d5e | ||
|
dcda15569a | ||
|
8cba3560ce | ||
|
17051419ec | ||
|
1a1cae4e04 | ||
|
e5e4c41b38 | ||
|
c7c9e23acb | ||
|
5be1f13840 |
4
.github/ProjectRoot/vpm-manifest-2022.json
vendored
@ -4,7 +4,7 @@
|
||||
"version": "3.7.4"
|
||||
},
|
||||
"nadena.dev.ndmf": {
|
||||
"version": "1.7.4"
|
||||
"version": "1.8.0-alpha.4"
|
||||
}
|
||||
},
|
||||
"locked": {
|
||||
@ -19,7 +19,7 @@
|
||||
"dependencies": {}
|
||||
},
|
||||
"nadena.dev.ndmf": {
|
||||
"version": "1.7.4"
|
||||
"version": "1.8.0-alpha.4"
|
||||
}
|
||||
}
|
||||
}
|
4
.github/workflows/perform-release.yml
vendored
@ -56,7 +56,7 @@ jobs:
|
||||
run: echo "$GITHUB_CONTEXT"
|
||||
|
||||
# https://github.com/orgs/community/discussions/13836#discussioncomment-8535364
|
||||
- uses: actions/create-github-app-token@v1
|
||||
- uses: actions/create-github-app-token@v2
|
||||
id: app-token
|
||||
with:
|
||||
app-id: ${{ vars.RELEASER_APP_ID }}
|
||||
@ -218,7 +218,7 @@ jobs:
|
||||
cat .github/release-note.md
|
||||
|
||||
- name: Make Release
|
||||
uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda
|
||||
uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631
|
||||
if: ${{ github.event.inputs.publish == 'true' }}
|
||||
with:
|
||||
draft: true
|
||||
|
@ -19,17 +19,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Deprecated
|
||||
|
||||
## [1.12.5] - [2025-04-14]
|
||||
## [1.13.0-alpha.2] - [2025-04-14]
|
||||
|
||||
### Fixed
|
||||
- [#1558] Merge AnimatorでベースアバターのArmature内のTransformをアニメーションさせると壊れる問題を修正
|
||||
- NDMFの依存バージョンを更新
|
||||
- VRChat Avatar Descriptor内のレイヤーが重複している場合、すべてのアニメーターコンテンツが無視される問題を修正
|
||||
- 起動時に発生する `NullReferenceException` を修正
|
||||
- AnimationIndex内の `NullReferenceException` を修正
|
||||
- アニメーションカーブのパスが複数回書き換えられると削除される問題を修正
|
||||
|
||||
## [1.12.4] - [2025-04-10]
|
||||
## [1.13.0-alpha.1] - [2025-04-10]
|
||||
|
||||
### Fixed
|
||||
- [#1552] Merge Blend Treeにて、メインアバターFXレイヤーと同じ名前のintやboolパラメーターがBlend Treeに含まれている場合、
|
||||
@ -44,6 +39,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- [#1551] Merge Animatorは、遷移のない単一のstateを持つブレンドツリーのレイヤーに対して常にWDをONに設定します。
|
||||
- 一部、以前の挙動に依存したアセットとの互換性を向上させるための変更です。
|
||||
|
||||
## [1.13.0-alpha.0] - [2025-04-08]
|
||||
|
||||
### Added
|
||||
- (実験的機能) VRC以外のプラットフォームのサポートを有効化
|
||||
|
||||
## [1.12.3] - [2025-04-05]
|
||||
|
||||
### Fixed
|
||||
|
@ -19,18 +19,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Deprecated
|
||||
|
||||
## [1.12.5] - [2025-04-14]
|
||||
## [1.13.0-alpha.2] - [2025-04-14]
|
||||
|
||||
### Fixed
|
||||
- [#1558] Fixed an issue where Merge Animators animating transforms in the base avatar's armature would break.
|
||||
- Update NDMF dependency
|
||||
- Fixed an issue where duplicate layer entries in the VRChat Avatar Descriptor would cause all animator contents
|
||||
to be ignored.
|
||||
- Fixed a benign `NullReferenceException` at initialization
|
||||
- Fixed a NullReferenceException in AnimationIndex
|
||||
- Fixed an issue where animation curve paths being rewritten multiple times might be deleted
|
||||
|
||||
## [1.12.4] - [2025-04-10]
|
||||
## [1.13.0-alpha.1] - [2025-04-10]
|
||||
|
||||
### Fixed
|
||||
- [#1552] Merge Blend Tree failed to correct parameter types when the main avatar FX layer contained an int or bool
|
||||
@ -47,6 +41,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- [#1551] Merge Animator will always set WD ON for single-state blendtree layers with no any state transitions.
|
||||
- This fixes compatibility issues with assets which relied on the prior behavior.
|
||||
|
||||
## [1.13.0-alpha.0] - [2025-04-08]
|
||||
|
||||
### Added
|
||||
- (Experimental feature) Enabled support for non-VRC platforms
|
||||
|
||||
## [1.12.3] - [2025-04-05]
|
||||
|
||||
### Fixed
|
||||
|
@ -9,6 +9,7 @@ Modular Avatarの主な変更点をこのファイルで記録しています。
|
||||
## [Unreleased]
|
||||
|
||||
### Added
|
||||
- (実験的機能) VRC以外のプラットフォームのサポートを有効化
|
||||
|
||||
### Fixed
|
||||
|
||||
|
@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
## [Unreleased]
|
||||
|
||||
### Added
|
||||
- (Experimental feature) Enabled support for non-VRC platforms
|
||||
|
||||
### Fixed
|
||||
|
||||
|
@ -8,7 +8,7 @@ using VRC.SDK3.Avatars.Components;
|
||||
|
||||
namespace nadena.dev.modular_avatar.animation
|
||||
{
|
||||
//[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
||||
public class FixupAbsolutePlayAudioPass : Pass<FixupAbsolutePlayAudioPass>
|
||||
{
|
||||
protected override void Execute(BuildContext context)
|
||||
|
@ -23,6 +23,7 @@ namespace nadena.dev.modular_avatar.animation
|
||||
internal HashSet<VirtualLayer> mmdAffectedOriginalLayers = new();
|
||||
}
|
||||
|
||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
||||
internal class MMDRelayEarlyPass : Pass<MMDRelayEarlyPass>
|
||||
{
|
||||
protected override void Execute(BuildContext context)
|
||||
@ -46,6 +47,7 @@ namespace nadena.dev.modular_avatar.animation
|
||||
/// layer to relay this to layers which should be affected. Finally, any layer which _shouldn't_ be affected is
|
||||
/// pushed out of the first three layers by injecting dummy layers.
|
||||
/// </summary>
|
||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
||||
internal class MMDRelayPass : Pass<MMDRelayPass>
|
||||
{
|
||||
private const string MMDRelayParam = "__MA/Internal/MMDNotActive";
|
||||
|
@ -13,6 +13,7 @@ using UnityEngine;
|
||||
|
||||
namespace nadena.dev.modular_avatar.core.editor
|
||||
{
|
||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
||||
internal class ApplyAnimatorDefaultValuesPass : Pass<ApplyAnimatorDefaultValuesPass>
|
||||
{
|
||||
protected override void Execute(ndmf.BuildContext context)
|
||||
|
@ -76,8 +76,11 @@
|
||||
"merge_animator.match_avatar_write_defaults.tooltip": "使用与 Avatar 一样的 Write Defaults 设置。\n如果 Avatar 将 WD 混用,Animator 的 WD 设置将维持不变。",
|
||||
"merge_animator.relative_path_root": "相对路径根对象",
|
||||
"merge_animator.relative_path_root.tooltip": "解析相对路径时使用的根对象。\n如果未指定,则使用当前对象。",
|
||||
"merge_animator.layer_priority": "Animator layer 的合并优先级",
|
||||
"merge_animator.layer_priority": "Animator Layer 的合并优先级",
|
||||
"merge_animator.layer_priority.tooltip": "控制动画层合并后在 Animator 里的位置,\n由小到大。负值将合并于原有动画层之前,\n0 或正值将合并于之后。",
|
||||
"merge_animator.merge_mode": "合并模式",
|
||||
"merge_animator.merge_mode.Append": "追加到 Animator Controller",
|
||||
"merge_animator.merge_mode.Replace": "替换现有 Animator Controller",
|
||||
"merge_armature.lockmode": "位置同步模式",
|
||||
"merge_armature.lockmode.not_locked.title": "不同步",
|
||||
"merge_armature.lockmode.not_locked.body": "当前对象的骨骼不会和 Avatar 的骨骼位置同步。",
|
||||
@ -93,6 +96,7 @@
|
||||
"merge_armature.reset_pos.execute": "执行!",
|
||||
"merge_armature.reset_pos.heuristic_scale": "根据 Avatar 调整服装的整体比例",
|
||||
"merge_armature.reset_pos.heuristic_scale.tooltip": "以臂展作为参考,调整服装的整体比例。\n推荐用于不适配当前 Avatar 的服装。",
|
||||
"merge_blend_tree.motion": "要合并的动画(或 BlendTree)",
|
||||
"merge_blend_tree.path_mode": "路径模式",
|
||||
"merge_blend_tree.path_mode.tooltip": "在动画中路径的工作模式。\n使用相对路径可以让你在当前对象上录制动画。",
|
||||
"merge_blend_tree.relative_path_root": "相对路径根对象",
|
||||
@ -153,6 +157,8 @@
|
||||
"error.replace_object.replacing_replacement": "[MA-0009] 不能在多个 Replace Object 组件中指定相同的目标对象",
|
||||
"error.replace_object.parent_of_target": "[MA-0010] 目标对象不能是此对象的父级",
|
||||
"error.singleton": "[MA-0011] 一个 Avatar 中只允许存在一个 {0} 组件",
|
||||
"error.merge_animator.multiple_replacements": "[MA-0012] 多个 Merge Animator 正在尝试替换相同的 Layer",
|
||||
"error.merge_animator.multiple_replacements:hint": "由于 Merge Animator 的“替换”模式会将整个 Animator Controller 替换为另一个 Animator Controller,因此无法确定你要保留哪一个。请尝试只保留一个使用“替换”模式的 Merge Animator,或将它们设置为“追加”模式。",
|
||||
"validation.blendshape_sync.no_local_renderer": "[MA-1000] 在此部件上找不到 Renderer",
|
||||
"validation.blendshape_sync.no_local_renderer:hint": "Blendshape Sync 作用于所在对象上的 Skinned Mesh Renderer。你是否将它附加到了正确的对象上?",
|
||||
"validation.blendshape_sync.no_local_mesh": "[MA-1001] 在此部件的 Renderer 上找不到网格(Mesh)",
|
||||
@ -292,5 +298,6 @@
|
||||
"sync-param-sequence.parameters": "共用参数的 Asset",
|
||||
"sync-param-sequence.parameters.tooltip": "用于存储共用参数的 Assets。请勿使用已经在 Avatar descriptor 中设置的相同参数 。",
|
||||
"sync-param-sequence.create-asset": "新增",
|
||||
"sync-param-sequence.create-asset.tooltip": "创建一个新的 expression parameters"
|
||||
"sync-param-sequence.create-asset.tooltip": "创建一个新的 Expression Parameters",
|
||||
"platform.vrchat.settings.mmd_world_support": "MMD 世界支持"
|
||||
}
|
||||
|
@ -3,10 +3,10 @@
|
||||
"test0.test_b": "test_b",
|
||||
"boneproxy.foldout.advanced": "進階設定",
|
||||
"boneproxy.target": "目標",
|
||||
"menuinstall.help.hint_set_menu": "此 Prefab 的選單預設會安裝到 Avatar 的頂部選單中。如果不需要,可以選擇其他選單或取消勾選此元件。",
|
||||
"menuinstall.help.hint_bad_menu": "選擇的選單不屬於此 Avatar。",
|
||||
"menuinstall.installto": "安裝到",
|
||||
"menuinstall.installto.tooltip": "當前 Prefab 的選單將會安裝到此選單",
|
||||
"menuinstall.help.hint_set_menu": "預設會將此 Prefab 安裝到 Avatar 的頂層選單中。若不需要,請選擇其他選單或取消啟用此元件。",
|
||||
"menuinstall.help.hint_bad_menu": "選取的選單資源不屬於此 Avatar。",
|
||||
"menuinstall.installto": "安裝至",
|
||||
"menuinstall.installto.tooltip": "當前 Prefab 的選單將會安裝至此選單",
|
||||
"menuinstall.selectmenu": "選擇選單",
|
||||
"menuinstall.showcontents": "顯示選單內容",
|
||||
"menuinstall.showcontents.notselected": "未選擇選單",
|
||||
@ -28,7 +28,7 @@
|
||||
"params.synced": "同步",
|
||||
"params.default": "預設值",
|
||||
"params.fieldname": "字段名",
|
||||
"params.remapto": "字段名映射到",
|
||||
"params.remapto": "重新命名為",
|
||||
"params.remapto.tooltip": "輸入新的名稱以防止參數名稱衝突",
|
||||
"params.devmode": "顯示 Prefab 開發者選項",
|
||||
"params.__comment1__": "=== Unity 2022 only strings ===",
|
||||
@ -40,20 +40,20 @@
|
||||
"merge_parameter.ui.defaultValue": "預設值",
|
||||
"merge_parameter.ui.defaultValue.tooltip": "首次使用或重置 Avatar 時,參數將被設定為此值",
|
||||
"merge_parameter.ui.saved": "保存",
|
||||
"merge_parameter.ui.saved.tooltip": "如果為打勾,更換 Avatar 或房間時,參數的值將被保存。",
|
||||
"merge_parameter.ui.saved.tooltip": "若啟用,更換 Avatar 或房間時,參數的值將被保存。",
|
||||
"merge_parameter.ui.internalParameter": "自動重命名",
|
||||
"merge_parameter.ui.internalParameter.tooltip": "如果為打勾,參數將會自動重命名以防止名稱和其他參數衝突",
|
||||
"merge_parameter.ui.internalParameter.tooltip": "若啟用,參數將會自動重命名以防止名稱和其他參數衝突",
|
||||
"merge_parameter.ui.isPrefix": "是 PhysBone 前綴",
|
||||
"merge_parameter.ui.syncType": "參數類型",
|
||||
"merge_parameter.ui.synced": "同步",
|
||||
"merge_parameter.ui.synced.tooltip": "如果為打勾,參數將會在網路上同步",
|
||||
"merge_parameter.ui.unregistered_foldout": "未註冊的參數",
|
||||
"merge_parameter.ui.synced.tooltip": "若啟用,參數將會在網路上同步",
|
||||
"merge_parameter.ui.unregistered_foldout": "未註冊參數",
|
||||
"merge_parameter.ui.add_button": "添加",
|
||||
"merge_parameter.ui.details": "參數設定",
|
||||
"merge_parameter.ui.overrideAnimatorDefaults": "覆蓋 Animator 預設值",
|
||||
"merge_parameter.ui.overrideAnimatorDefaults": "覆寫 Animator 預設值",
|
||||
"merge_parameter.ui.importFromAsset": "從 Assets 匯入",
|
||||
"merge_armature.merge_target": "合併目標",
|
||||
"merge_armature.merge_target.tooltip": "當前物件要合併到的骨架(或其子級)",
|
||||
"merge_armature.merge_target.tooltip": "要將此物件合併進去的骨架(或其子級)",
|
||||
"merge_armature.prefix": "骨骼前綴",
|
||||
"merge_armature.prefix.tooltip": "當前物件裡要合併的骨骼的前綴",
|
||||
"merge_armature.suffix": "骨骼後綴",
|
||||
@ -61,9 +61,9 @@
|
||||
"merge_armature.locked": "鎖定位置",
|
||||
"merge_armature.locked.tooltip": "將當前物件的骨架與合併目標的骨架鎖定(反之亦然),常用於創建動畫。",
|
||||
"merge_armature.adjust_names": "根據合併目標調整骨骼名稱",
|
||||
"merge_armature.adjust_names.tooltip": "根據合併目標調整骨骼名稱,通常用於與非 Avatar 對應的服裝。",
|
||||
"merge_armature.mangle_names": "避免命名衝突",
|
||||
"merge_armature.mangle_names.tooltip": "通過重新命名新添加的骨骼來避免與其他資源發生命名衝突。",
|
||||
"merge_armature.adjust_names.tooltip": "根據合併目標調整骨骼名稱,常用於服裝移植。",
|
||||
"merge_armature.mangle_names": "避免名稱衝突",
|
||||
"merge_armature.mangle_names.tooltip": "重新命名新骨骼以避免與其他資源命名衝突。",
|
||||
"path_mode.Relative": "相對路徑(基於當前物件)",
|
||||
"path_mode.Absolute": "絕對路徑(基於 Avatar 的根)",
|
||||
"merge_animator.animator": "要合併的 Animator",
|
||||
@ -78,6 +78,9 @@
|
||||
"merge_animator.relative_path_root.tooltip": "解析相對路徑時使用的根物件。\n如果未指定,則使用當前物件。",
|
||||
"merge_animator.layer_priority": "動畫層優先級",
|
||||
"merge_animator.layer_priority.tooltip": "控制動畫層合併後在 Animator 裡的位置,\n由小到大。負值將合併於原有動畫層之前,\n0 或正值將合併於之後。",
|
||||
"merge_animator.merge_mode": "合併模式",
|
||||
"merge_animator.merge_mode.Append": "追加至 Animator",
|
||||
"merge_animator.merge_mode.Replace": "替換現有 Animator",
|
||||
"merge_armature.lockmode": "位置同步模式",
|
||||
"merge_armature.lockmode.not_locked.title": "不同步",
|
||||
"merge_armature.lockmode.not_locked.body": "當前物件的骨骼不會和 Avatar 的骨骼位置同步。",
|
||||
@ -93,15 +96,16 @@
|
||||
"merge_armature.reset_pos.execute": "執行",
|
||||
"merge_armature.reset_pos.heuristic_scale": "根據 Avatar 調整服裝的整體比例",
|
||||
"merge_armature.reset_pos.heuristic_scale.tooltip": "以臂展作為參考,調整服裝的整體比例。\n推薦用於非 Avatar 對應的服裝。",
|
||||
"merge_blend_tree.motion": "要合併的動畫或 Blend Tree",
|
||||
"merge_blend_tree.path_mode": "路徑模式",
|
||||
"merge_blend_tree.path_mode.tooltip": "在動畫中路徑的工作模式。\n使用相對路徑可以讓你在當前物件上錄制動畫。",
|
||||
"merge_blend_tree.relative_path_root": "相對路徑根物件",
|
||||
"merge_blend_tree.relative_path_root.tooltip": "解析相對路徑時使用的根物件。\n如果未指定,則使用當前物件。",
|
||||
"worldfixed.quest": "此元件未生效,因為它與 Android 環境不相容。",
|
||||
"worldfixed.quest": "此元件與 Android 環境不相容,將不會生效。",
|
||||
"worldfixed.normal": "當前物件將會固定於世界,除非你使用約束將它綁在 Avatar 內。",
|
||||
"fpvisible.normal": "當前物件將在第一人稱視角中可見。",
|
||||
"fpvisible.NotUnderHead": "此元件在未放置於 Head 骨骼下時不會生效。\n如果是透過 Bone Proxy 等方式將其放於 Head 骨骼下,則可忽略此警告。",
|
||||
"fpvisible.quest": "此元件未生效,因為它與 Android 環境不相容。",
|
||||
"fpvisible.NotUnderHead": "此元件未放置於 Head 骨骼下時將無效。\n如果是透過 Bone Proxy 等方式將其放於 Head 骨骼下,則可忽略此警告。",
|
||||
"fpvisible.quest": "此元件與 Android 環境不相容,將不會生效。",
|
||||
"fpvisible.InPhysBoneChain": "當前物件由 Physics Bone 控制,可能無法在第一人稱視角中可見;請指定 Physics Bone 鏈的起點。",
|
||||
"blendshape.mesh": "網格",
|
||||
"blendshape.source": "源 blendshape",
|
||||
@ -130,7 +134,7 @@
|
||||
"mesh_settings.inherit_mode.SetOrInherit": "父級設定優先,否則指定",
|
||||
"pb_blocker.help": "當前物件不會受到附加在父物件的 PhysBones 影響。",
|
||||
"hint.bad_vrcsdk": "檢測到不相容的 VRCSDK 版本。\n\n請嘗試升級 VRCSDK;如果這不起作用,請嘗試新版本的 Modular Avatar。",
|
||||
"error.stack_trace": "Stack trace(報告錯誤時請提供此資訊!)",
|
||||
"error.stack_trace": "Stack trace(回報錯誤時請附上此資訊!)",
|
||||
"error.merge_armature.circular_dependency": "[MA-0001] 在 Merge armature 中存在循環引用",
|
||||
"error.merge_armature.circular_dependency:description": "你的 Merge Armature 元件正在將自身或其子級作為合併目標。",
|
||||
"error.merge_armature.circular_dependency:hint": "通常應在 Merge Armature 的合併目標欄位指定 Avatar 本身的 Armture。不要指定服裝本身!",
|
||||
@ -153,6 +157,8 @@
|
||||
"error.replace_object.replacing_replacement": "[MA-0009] 不能在多個 Replace Object 元件中指定相同的目標物件",
|
||||
"error.replace_object.parent_of_target": "[MA-0010] 目標物件不能是此物件的父級",
|
||||
"error.singleton": "[MA-0011] 在一個 Avatar 中只允許存在單個 {0} 元件",
|
||||
"error.merge_animator.multiple_replacements": "[MA-0012] 多個 Merge Animators 嘗試替換同個動畫層",
|
||||
"error.merge_animator.multiple_replacements:hint": "由於 Merge Animator 的「替換」模式會將整個 Animator 替換為另一個 Animator,因此無法確定你要保留哪一個。請嘗試只保留其中一個使用「替換」模式的 Merge Animator,或將它們設為「追加」模式。",
|
||||
"validation.blendshape_sync.no_local_renderer": "[MA-1000] 在此物件上找不到 Renderer",
|
||||
"validation.blendshape_sync.no_local_renderer:hint": "Blendshape Sync 作用於所在物件上的 Skinned Mesh Renderer。你是否將它附加到正確的物件上?",
|
||||
"validation.blendshape_sync.no_local_mesh": "[MA-1001] 在此物件的 Renderer 上找不到網格(Mesh)",
|
||||
@ -202,11 +208,11 @@
|
||||
"menuitem.prop.source_override": "源物件",
|
||||
"menuitem.prop.source_override.tooltip": "如果指定,這個物件將被用作子選單內容的來源。\n否則,將使用此選單項的子級。",
|
||||
"menuitem.prop.is_default": "預設啟用",
|
||||
"menuitem.prop.is_default.tooltip": "如果打勾,初次使用或重置 Avatar 時會啟用此選單項",
|
||||
"menuitem.prop.is_default.tooltip": "若啟用,初次使用或重置 Avatar 時會啟用此選單項",
|
||||
"menuitem.prop.is_saved": "保存",
|
||||
"menuitem.prop.is_saved.tooltip": "如果打勾,當您更換 Avatar 或房間時,此選單項的值將被保存。",
|
||||
"menuitem.prop.is_saved.tooltip": "若啟用,當您更換 Avatar 或房間時,此選單項的值將被保存。",
|
||||
"menuitem.prop.is_synced": "同步",
|
||||
"menuitem.prop.is_synced.tooltip": "如果打勾,此選單項的值將和網路上的其他玩家同步。",
|
||||
"menuitem.prop.is_synced.tooltip": "若啟用,此選單項的值將和網路上的其他玩家同步。",
|
||||
"menuitem.param.rotation": "參數: 旋轉 (Rotation)",
|
||||
"menuitem.param.rotation.tooltip": "基於此選單項的旋轉設定的參數。",
|
||||
"menuitem.param.horizontal": "參數: 水平 (Horizontal)",
|
||||
@ -226,9 +232,9 @@
|
||||
"control_group.foldout.actions": "Actions",
|
||||
"control_group.foldout.menu_items": "相關選單項",
|
||||
"control_group.is_saved": "保存",
|
||||
"control_group.is_saved.tooltip": "如果打勾,當您更換 Avatar 或世界時,此選單項的值將被保存。",
|
||||
"control_group.is_saved.tooltip": "若啟用,當您更換 Avatar 或世界時,此選單項的值將被保存。",
|
||||
"control_group.is_synced": "同步",
|
||||
"control_group.is_synced.tooltip": "如果打勾,此選單項的值將和網路上的其他玩家同步。",
|
||||
"control_group.is_synced.tooltip": "若啟用,此選單項的值將和網路上的其他玩家同步。",
|
||||
"control_group.default_value": "初始設定",
|
||||
"control_group.default_value.unset": "(未選擇)",
|
||||
"animation_gen.duplicate_binding": "來自不同控制群組的控制項嘗試動畫相同的參數。參數:{0}",
|
||||
@ -291,5 +297,6 @@
|
||||
"sync-param-sequence.parameters": "共用的參數資源",
|
||||
"sync-param-sequence.parameters.tooltip": "用來儲存共用參數的資源檔。請勿使用已在 Avatar Descriptor 中設定的相同參數。",
|
||||
"sync-param-sequence.create-asset": "新增",
|
||||
"sync-param-sequence.create-asset.tooltip": "創建一個新的 Expression Parameters"
|
||||
"sync-param-sequence.create-asset.tooltip": "創建一個新的 Expression Parameters",
|
||||
"platform.vrchat.settings.mmd_world_support": "MMD 世界支援"
|
||||
}
|
||||
|
@ -16,6 +16,7 @@ using Object = UnityEngine.Object;
|
||||
|
||||
namespace nadena.dev.modular_avatar.core.editor
|
||||
{
|
||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
||||
internal class MergeBlendTreePass : Pass<MergeBlendTreePass>
|
||||
{
|
||||
internal const string ALWAYS_ONE = "__ModularAvatarInternal/One";
|
||||
|
@ -14,6 +14,7 @@ using VRC.Dynamics;
|
||||
|
||||
namespace nadena.dev.modular_avatar.core.editor
|
||||
{
|
||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
||||
internal class ConstraintConverterPass : Pass<ConstraintConverterPass>
|
||||
{
|
||||
#if MA_VRCSDK3_AVATARS_3_7_0_OR_NEWER
|
||||
|
@ -5,6 +5,7 @@ using nadena.dev.ndmf;
|
||||
|
||||
namespace nadena.dev.modular_avatar.core.editor
|
||||
{
|
||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
||||
internal class PruneParametersPass : Pass<PruneParametersPass>
|
||||
{
|
||||
protected override void Execute(ndmf.BuildContext context)
|
||||
|
@ -19,6 +19,7 @@ using Object = UnityEngine.Object;
|
||||
|
||||
namespace nadena.dev.modular_avatar.core.editor.plugin
|
||||
{
|
||||
[RunsOnAllPlatforms]
|
||||
class PluginDefinition : Plugin<PluginDefinition>
|
||||
{
|
||||
public override string QualifiedName => "nadena.dev.modular-avatar";
|
||||
@ -58,6 +59,7 @@ namespace nadena.dev.modular_avatar.core.editor.plugin
|
||||
#if MA_VRCSDK3_AVATARS
|
||||
seq.Run(ReactiveObjectPrepass.Instance);
|
||||
#endif
|
||||
|
||||
seq.WithRequiredExtension(typeof(AnimatorServicesContext), _s2 =>
|
||||
{
|
||||
#if MA_VRCSDK3_AVATARS
|
||||
@ -71,7 +73,8 @@ namespace nadena.dev.modular_avatar.core.editor.plugin
|
||||
|
||||
seq.WithRequiredExtension(typeof(ReadablePropertyExtension), _s3 =>
|
||||
{
|
||||
seq.Run("Shape Changer", ctx => new ReactiveObjectPass(ctx).Execute())
|
||||
// TODO - refactor out VRChat-specific bits
|
||||
seq.Run("Reactive Components", ctx => new ReactiveObjectPass(ctx).Execute())
|
||||
.PreviewingWith(new ShapeChangerPreview(), new ObjectSwitcherPreview(),
|
||||
new MaterialSetterPreview());
|
||||
});
|
||||
@ -83,25 +86,26 @@ namespace nadena.dev.modular_avatar.core.editor.plugin
|
||||
seq.Run(MenuInstallPluginPass.Instance);
|
||||
#endif
|
||||
seq.Run(MergeArmaturePluginPass.Instance);
|
||||
|
||||
seq.Run(BoneProxyPluginPass.Instance);
|
||||
|
||||
#if MA_VRCSDK3_AVATARS
|
||||
seq.Run(VisibleHeadAccessoryPluginPass.Instance);
|
||||
#endif
|
||||
|
||||
seq.OnPlatforms(new[] { WellKnownPlatforms.VRChatAvatar30 }, _seq =>
|
||||
{
|
||||
seq.Run("World Fixed Object",
|
||||
ctx => new WorldFixedObjectProcessor().Process(ctx)
|
||||
);
|
||||
});
|
||||
seq.Run(WorldScaleObjectPass.Instance);
|
||||
|
||||
seq.Run(ReplaceObjectPluginPass.Instance);
|
||||
|
||||
#if MA_VRCSDK3_AVATARS
|
||||
seq.Run(BlendshapeSyncAnimationPluginPass.Instance);
|
||||
#endif
|
||||
|
||||
seq.Run(ConstraintConverterPass.Instance);
|
||||
#endif
|
||||
|
||||
seq.Run("Prune empty animator layers",
|
||||
ctx => { ctx.Extension<AnimatorServicesContext>().RemoveEmptyLayers(); });
|
||||
@ -112,11 +116,14 @@ namespace nadena.dev.modular_avatar.core.editor.plugin
|
||||
});
|
||||
#if MA_VRCSDK3_AVATARS
|
||||
seq.Run(PhysbonesBlockerPluginPass.Instance);
|
||||
seq.OnPlatforms(new[] { WellKnownPlatforms.VRChatAvatar30 }, _seq =>
|
||||
{
|
||||
seq.Run("Fixup Expressions Menu", ctx =>
|
||||
{
|
||||
var maContext = ctx.Extension<ModularAvatarContext>().BuildContext;
|
||||
FixupExpressionsMenuPass.FixupExpressionsMenu(maContext);
|
||||
});
|
||||
});
|
||||
seq.Run(SyncParameterSequencePass.Instance);
|
||||
#endif
|
||||
seq.Run(RemoveVertexColorPass.Instance).PreviewingWith(new RemoveVertexColorPreview());
|
||||
@ -213,6 +220,7 @@ namespace nadena.dev.modular_avatar.core.editor.plugin
|
||||
}
|
||||
}
|
||||
|
||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
||||
class MergeAnimatorPluginPass : MAPass<MergeAnimatorPluginPass>
|
||||
{
|
||||
protected override void Execute(ndmf.BuildContext context)
|
||||
@ -221,6 +229,7 @@ namespace nadena.dev.modular_avatar.core.editor.plugin
|
||||
}
|
||||
}
|
||||
|
||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
||||
class MenuInstallPluginPass : MAPass<MenuInstallPluginPass>
|
||||
{
|
||||
protected override void Execute(ndmf.BuildContext context)
|
||||
@ -247,6 +256,7 @@ namespace nadena.dev.modular_avatar.core.editor.plugin
|
||||
}
|
||||
|
||||
#if MA_VRCSDK3_AVATARS
|
||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
||||
class VisibleHeadAccessoryPluginPass : MAPass<VisibleHeadAccessoryPluginPass>
|
||||
{
|
||||
protected override void Execute(ndmf.BuildContext context)
|
||||
@ -265,6 +275,7 @@ namespace nadena.dev.modular_avatar.core.editor.plugin
|
||||
}
|
||||
|
||||
#if MA_VRCSDK3_AVATARS
|
||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)] // TODO - support other platforms
|
||||
class BlendshapeSyncAnimationPluginPass : MAPass<BlendshapeSyncAnimationPluginPass>
|
||||
{
|
||||
protected override void Execute(ndmf.BuildContext context)
|
||||
|
@ -9,6 +9,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
||||
/// Reserve an animator layer for reactive object use. We do this here so that we can take advantage of MergeAnimator's
|
||||
/// layer reference correction logic; this can go away once we have a more unified animation services API.
|
||||
/// </summary>
|
||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
||||
internal class ReactiveObjectPrepass : Pass<ReactiveObjectPrepass>
|
||||
{
|
||||
internal const string TAG_PATH = "__MA/ShapeChanger/PrepassPlaceholder";
|
||||
|
@ -12,6 +12,7 @@ using Object = UnityEngine.Object;
|
||||
|
||||
namespace nadena.dev.modular_avatar.core.editor
|
||||
{
|
||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
||||
public class SyncParameterSequencePass : Pass<SyncParameterSequencePass>
|
||||
{
|
||||
private static Platform? CurrentPlatform
|
||||
|
@ -4,6 +4,7 @@ using nadena.dev.ndmf;
|
||||
|
||||
namespace nadena.dev.modular_avatar.core.editor
|
||||
{
|
||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
||||
internal class VRChatSettingsPass : Pass<VRChatSettingsPass>
|
||||
{
|
||||
protected override void Execute(ndmf.BuildContext context)
|
||||
|
@ -12,6 +12,7 @@ using UnityEngine.Animations;
|
||||
|
||||
namespace nadena.dev.modular_avatar.core.editor
|
||||
{
|
||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
||||
internal class WorldScaleObjectPass : Pass<WorldScaleObjectPass>
|
||||
{
|
||||
protected override void Execute(ndmf.BuildContext context)
|
||||
|
BIN
docs~/docs/alcom-prerelease-repo.png
Normal file
After Width: | Height: | Size: 118 KiB |
BIN
docs~/docs/alcom-prerelease-settings.png
Normal file
After Width: | Height: | Size: 220 KiB |
25
docs~/docs/experimental-features/index.md
Normal file
@ -0,0 +1,25 @@
|
||||
# Experimental features
|
||||
|
||||
Modular Avatar (and NDMF) contain a number of experimental features that are disabled by default.
|
||||
These features are still in active development, and their behavior might change in the future.
|
||||
They may not be fully documented yet.
|
||||
|
||||
:::warning
|
||||
|
||||
Experimental features might change in ways that are not backward compatible.
|
||||
This means that if you use an experimental feature, you might need to update your avatar
|
||||
or assets in the future to keep them working.
|
||||
|
||||
:::
|
||||
|
||||
## Enabling experimental features
|
||||
|
||||
Before enabling experimental features, make sure you have the latest (beta) version of Modular Avatar and NDMF. See the [installation instructions](intro#betas) for more information.
|
||||
|
||||
To enable experimental features, open "Tools -> NDM Framework -> Experimental Features" in the menu bar.
|
||||
This will open a window where you can enable or disable experimental features.
|
||||
|
||||
## List of experimental features
|
||||
|
||||
- [Resonite support](./resonite-support.md)
|
||||
- [Portable avatar components](./portable-avatar-components.md)
|
@ -0,0 +1,28 @@
|
||||
# Portable Avatar Components
|
||||
|
||||
NDMF provides a number of components that can be used to create an avatar that does not depend on a specific platform SDK (e.g. the VRCSDK) for building.
|
||||
|
||||
A minimal setup for a portable avatar consists of three components:
|
||||
- **NDMFAvatarRoot**: This component is required for all avatars. Place it at the root of your avatar.
|
||||
- **NDMF Viewpoint**: This component sets the viewpoint of your avatar. Create an empty gameobject at the position of your viewpoint, and add this component to it. The viewpoint object can be anywhere in the hierarchy, but it is recommended to place it at the root of your avatar.
|
||||
- **NDMF Blendshape Visemes**: This component is required for avatars that use blendshape visemes for lipsync. Use it to configure the face mesh and the viseme blendshapes.
|
||||
|
||||
## Portable Dynamic Bones {#portable-dynamic-bones}
|
||||
|
||||
Portable dynamic bone components let you mark a bone as being physically simulated without depending
|
||||
on any specific SDK. Because each platform has its own way of simulating physics, these components
|
||||
only configure the minimal set of properties that are common to all platforms. Specific configuration
|
||||
is handled by configuring a "settings template" name; you can configure the settings template
|
||||
in a platform-specific way to give it specific settings.
|
||||
|
||||
If you have both a portable dynamic bone component and a platform-specific dynamic bone component
|
||||
referring to the same bone root transform, the platform-specific component will take precedence.
|
||||
|
||||
:::warning
|
||||
|
||||
Portable dynamic bones are not fully functional yet. They might work,
|
||||
but are highly likely to change in incompatible ways in the future.
|
||||
|
||||
:::
|
||||
|
||||
<!-- TODO: Details -->
|
94
docs~/docs/experimental-features/resonite-support.md
Normal file
@ -0,0 +1,94 @@
|
||||
# Resonite support
|
||||
|
||||
Modular Avatar has experimental support for building avatars for Resonite.
|
||||
Enabling this feature requires that you install the "Modular Avatar - Resonite support" package using ALCOM,
|
||||
and that you enable [experimental feature support](../experimental-features).
|
||||
|
||||
To build an avatar for resonite, open the NDMF Console (Tools -> NDM Framework -> NDMF Console), select your avatar at the top of the window, select "Resonite" as the "Avatar platform", and click build.
|
||||
If all goes well, you'll see a "Build finished!" message. You can then either "copy to clipboard", and then hit Ctrl-V in resonite, or click "Save as..." to save the avatar as a `resonitepackage` file.
|
||||
|
||||
The resonite build process will automatically copy certain avatar features, such as visemes, eye position, and physbones/dynamic bones to the Resonite avatar.
|
||||
If you've already set up your avatar for VRChat, no additional configuration is needed. If your avatar is not set up
|
||||
for VRChat, or if you don't have the VRCSDK installed, refer to the documentation on [portable avatar components](./portable-avatar-components.md)
|
||||
for more information on how to set up your avatar.
|
||||
|
||||
## Supported features
|
||||
|
||||
| Feature | Supported | Limitations |
|
||||
| ------- | --------- | ----------- |
|
||||
| Avatar viewpoint | ✅ | None |
|
||||
| Visemes | Partial | Blendshape visemes only |
|
||||
| Dynamic bones | Partial | See below |
|
||||
| Reactive Components | ⌛ | Planned |
|
||||
| Unity Constraints | ⌛ | Planned |
|
||||
| Protection against showing partially-loaded avatars | ✅ | None |
|
||||
|
||||
## Supported MA components
|
||||
|
||||
| Component | Supported | Limitations |
|
||||
| ------- | --------- | ----------- |
|
||||
| Blendshape Sync | ⌛ | Planned |
|
||||
| Bone Proxy | ✅ | None |
|
||||
| Convert Constraints | ✖ | VRChat only |
|
||||
| Menu Group | ⌛ | Planned |
|
||||
| Menu Install Target | ⌛ | Planned |
|
||||
| Menu Installer | ⌛ | Planned |
|
||||
| Menu Item | ⌛ | Planned |
|
||||
| Merge Animator | ✖ | VRChat only |
|
||||
| Merge Armature | ✅ | None |
|
||||
| Merge Blend Tree | ✖ | VRChat only |
|
||||
| Mesh Settings | ⌛ | Planned |
|
||||
| MMD Layer Control | ✖ | VRChat only |
|
||||
| Move Independently | ✅ | None |
|
||||
| Parameters | ⌛ | Planned (will be converted to DynVars) |
|
||||
| Physbone Blocker | ✅ | None |
|
||||
| Remove Vertex Color | ✅ | None |
|
||||
| Replace Object | ✅ | None |
|
||||
| Scale Adjuster | ✅ | None |
|
||||
| Sync Parameter Sequence | ✖ | VRChat only |
|
||||
| Visible Head Accessory | ⌛ | Planned |
|
||||
| VRChat Settings | ✖ | VRChat only |
|
||||
| World Fixed Object | ⌛ | Planned |
|
||||
| World Scale Object | ⌛ | Planned |
|
||||
|
||||
## Dynamic bones
|
||||
|
||||
Modular Avatar will detect dynamic bones created using either [Portable Dynamic Bones](./portable-avatar-components#portable-dynamic-bones) or VRChat's PhysBones, and attempt to convert them to Resonite's dynamic bones, including any colliders.
|
||||
|
||||
Since Resonite has its own dynamic bone system, most configuration options are not converted.
|
||||
However, exclusions (including Physbone Blockers), colliders, collision radius, and grabbability are converted.
|
||||
|
||||
Modular Avatar will group Dynamic Bones into a number of named "templates" based on their bone names.
|
||||
You can override the template name by either adding a portable dynamic bone component with a group name specified. Alternately, in resonite, you can create a new template by cloning an object under the `Avatar Settings` -> `Dynamic Bone Settings` Slot, setting its name to the new template name, and then changing the name found on the `Template Name` slot underneath the slot that defined the dynamic bone.
|
||||
|
||||
All dynamic bones under the same template will share the same settings for Inertia, InertiaForce, Damping, Elasticity, and Stiffness; you can change these settings on any of the dynamic bones in question,and any changes will be reflected on all of them.
|
||||
|
||||
## Avatar Settings copier
|
||||
|
||||
Modular Avatar will set up a system for copying avatar settings between different versions of your Resonite avatar. This lets you set resonite-specific settings, such as dynamic bone settings, and then copy them to a new version of your avatar after reimporting from unity.
|
||||
|
||||
This feature will specifically copy all Slots underneath the `Avatar Settings` slot, overwriting
|
||||
any existing slots with the same name. You can add your own slots to the `Avatar Settings` slot, and they will be copied as well.
|
||||
|
||||
To copy settings, wear your old avatar in resonite, and pick up your new avatar with your laser. From the context menu, select `MA Settings Copier` -> `Copy To Avatar`. This will copy the settings from your old avatar to your new avatar. You can then wear the new avatar, and the settings will be applied.
|
||||
|
||||
|
||||
## Default DynVars
|
||||
|
||||
Modular Avatar defines a number of default Dynamic Variables that can be used by avatar systems.
|
||||
|
||||
Some of these dynvars are still somewhat experimental, and may change in the future.
|
||||
|
||||
| Name | Type | Description |
|
||||
|----------------------------------------| ---- | ----------- |
|
||||
| `modular_avatar/AvatarRoot` | `Slot` | The root slot of the avatar (parent of `CenteredRoot`) |
|
||||
| `modular_avatar/AvatarWorn` | `bool` | Whether the avatar is currently worn (detected by the avatar being a direct child of the User slot) |
|
||||
| `modular_avatar/AvatarSettingsRoot` | `Slot` | The `Avatar Settings` object |
|
||||
| `modular_avatar/AvatarPoseNode.[type]` | `Slot` | The Slot containing the `AvatarPoseNode` component for node `[type]` (e.g. `Head Proxy`) |
|
||||
| `modular_avatar/MeshNotLoaded` | `bool` | _False_ if there are any unloaded meshes in the avatar, _missing_ otherwise. _This dynvar is subject to change in the future._ |
|
||||
| `modular_avatar/HumanBone.[name]` | `Slot` | References a humanoid bone by name. _Name is subject to change in the future._ |
|
||||
| `modular_avatar/HumanBonePose.[name]` | `float4x4` | The initial pose of the bone referenced by `BoneRef_[name]`. _Name is subject to change in the future. Values might not be quite correct yet._ |
|
||||
|
||||
Additionally, an `Avatar` Dynamic Variable Space is created on the avatar root for use by other gimmicks.
|
||||
|
||||
<!-- TODO: Screenshots -->
|
@ -2,6 +2,9 @@
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
|
||||
# Modular Avatar
|
||||
|
||||
Modular Avatar is a suite of **non-destructive** tools for modularizing your avatars, and for distributing avatar
|
||||
@ -13,39 +16,19 @@ you want to use. It can automatically merge outfits onto your avatar, build an a
|
||||
|
||||
## Installation
|
||||
|
||||
The recommended way to install Modular Avatar is using the VRChat Creator Companion. After installing the VCC, click here:
|
||||
* [Add Modular Avatar to VCC](vcc://vpm/addRepo?url=https://vpm.nadena.dev/vpm.json)
|
||||
The recommended way to install Modular Avatar is using ALCOM. Installation using the VRChat Creator Companion is also supported.
|
||||
|
||||
Then, go to "manage project" for your project, and click the + next to Modular Avatar.
|
||||
|
||||

|
||||
|
||||
To update to the latest version, just click the green arrow in the "Latest Version" column.
|
||||
|
||||
## Prerelease versions
|
||||
|
||||
To make prerelease versions available in the VCC, [click here](vcc://vpm/addRepo?url=https://vpm.nadena.dev/vpm-prerelease.json)
|
||||
|
||||
Then, in your VCC Settings -> Packages window, uncheck the `bd_` repository, check the `bd_ prerelease` repository, and enable `Show pre-release packages`.
|
||||
|
||||

|
||||
|
||||
The documentation for the prerelease branch can be [found here](https://modular-avatar.nadena.dev/dev).
|
||||
|
||||
Prerelease versions may contain bugs, and/or may have compatibility breaks as development progresses. Please leave
|
||||
feedback and bug reports at the [github issues page](https://github.com/bdunderscore/modular-avatar/issues).
|
||||
|
||||
## Installation via ALCOM
|
||||
<Tabs>
|
||||
<TabItem value="ALCOM" label="ALCOM" default>
|
||||
|
||||
If you are using [ALCOM](https://vrc-get.anatawa12.com/en/alcom/) to install Modular Avatar, follow these steps:
|
||||
|
||||
1. Open "Packages" and select "ADD REPOSITORY".
|
||||
2. Enter the following values under "Enter informatino about the repository" and click "ADD REPOSITORY":
|
||||
- Stable: `https://vpm.nadena.dev/vpm.json`
|
||||
- Prerelease: `https://vpm.nadena.dev/vpm-prerelease.json`
|
||||
2. Enter the following values under "Enter information about the repository" and click "ADD REPOSITORY":
|
||||
* `https://vpm.nadena.dev/vpm.json`
|
||||
3. Confirm the following details are displayed, then click "Add VPM Repository":
|
||||
- Repository Name: `bd_` or `bd_ (prereleases)`
|
||||
- URL: The URL you entered.
|
||||
* Repository Name: `bd_`
|
||||
* URL: The URL you entered.
|
||||
|
||||
Afterward, open "Manage Project" for your project, click the + next to Modular Avatar, and then click `APPLY`.
|
||||
|
||||
@ -57,10 +40,51 @@ To update to the latest version, click the area with the version number and gree
|
||||
|
||||

|
||||
|
||||
</TabItem>
|
||||
|
||||
<TabItem value="VCC" label="VRChat Creator Companion">
|
||||
|
||||
If you are using the [VRChat Creator Companion](https://vrchat.com/home/download), click here:
|
||||
* [Add Modular Avatar to VCC](vcc://vpm/addRepo?url=https://vpm.nadena.dev/vpm.json)
|
||||
|
||||
Then, go to "manage project" for your project, and click the + next to Modular Avatar.
|
||||
|
||||

|
||||
|
||||
To update to the latest version, just click the green arrow in the "Latest Version" column.
|
||||
|
||||
</TabItem>
|
||||
|
||||
</Tabs>
|
||||
|
||||
## Prerelease versions {#betas}
|
||||
|
||||
:::warning
|
||||
|
||||
Due to bugs in VCC dependency resolution, please use ALCOM to install prerelease versions of Modular Avatar.
|
||||
|
||||
:::
|
||||
|
||||
To make prerelease versions available in ALCOM:
|
||||
1. Open "Packages" and select "ADD REPOSITORY".
|
||||
2. Enter the following value under "Enter informatino about the repository" and click "ADD REPOSITORY": `https://vpm.nadena.dev/vpm-prerelease.json`
|
||||
3. Confirm the following details are displayed, then click "Add VPM Repository":
|
||||
- Repository Name: `bd_ (prereleases)`
|
||||
- URL: The URL you entered.
|
||||
|
||||
Then, in your ALCOM Settings window, enable `Show pre-release packages`.
|
||||
|
||||

|
||||
|
||||
The documentation for the prerelease branch can be [found here](https://modular-avatar.nadena.dev/dev).
|
||||
|
||||
Prerelease versions may contain bugs, and/or may have compatibility breaks as development progresses. Please leave
|
||||
feedback and bug reports at the [github issues page](https://github.com/bdunderscore/modular-avatar/issues).
|
||||
|
||||
## What to read next
|
||||
|
||||
Once you've installed MA, check out one of the tutorials below:
|
||||
|
||||
* [Simple clothing setup](/docs/tutorials/clothing)
|
||||
* [Advanced clothing setup](/docs/tutorials/adv_clothing)
|
||||
* [Toggle an object](/docs/tutorials/object_toggle/)
|
||||
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 92 KiB |
@ -293,9 +293,6 @@
|
||||
"Close": {
|
||||
"message": "Close"
|
||||
},
|
||||
"Download (using VCC)": {
|
||||
"message": "Download (using VCC)"
|
||||
},
|
||||
"Tutorials": {
|
||||
"message": "Tutorials"
|
||||
},
|
||||
@ -340,5 +337,50 @@
|
||||
"theme.unlistedContent.message": {
|
||||
"message": "This page is unlisted. Search engines will not index it, and only users having a direct link can access it.",
|
||||
"description": "The unlisted content banner message"
|
||||
},
|
||||
"theme.docs.DocCard.categoryDescription.plurals": {
|
||||
"message": "1 item|{count} items",
|
||||
"description": "The default description for a category card in the generated index about how many items this category includes"
|
||||
},
|
||||
"theme.blog.author.pageTitle": {
|
||||
"message": "{authorName} - {nPosts}",
|
||||
"description": "The title of the page for a blog author"
|
||||
},
|
||||
"theme.blog.authorsList.pageTitle": {
|
||||
"message": "Authors",
|
||||
"description": "The title of the authors page"
|
||||
},
|
||||
"theme.blog.authorsList.viewAll": {
|
||||
"message": "View all authors",
|
||||
"description": "The label of the link targeting the blog authors page"
|
||||
},
|
||||
"theme.blog.author.noPosts": {
|
||||
"message": "This author has not written any posts yet.",
|
||||
"description": "The text for authors with 0 blog post"
|
||||
},
|
||||
"theme.contentVisibility.unlistedBanner.title": {
|
||||
"message": "Unlisted page",
|
||||
"description": "The unlisted content banner title"
|
||||
},
|
||||
"theme.contentVisibility.unlistedBanner.message": {
|
||||
"message": "This page is unlisted. Search engines will not index it, and only users having a direct link can access it.",
|
||||
"description": "The unlisted content banner message"
|
||||
},
|
||||
"theme.contentVisibility.draftBanner.title": {
|
||||
"message": "Draft page",
|
||||
"description": "The draft content banner title"
|
||||
},
|
||||
"theme.contentVisibility.draftBanner.message": {
|
||||
"message": "This page is a draft. It will only be visible in dev and be excluded from the production build.",
|
||||
"description": "The draft content banner message"
|
||||
},
|
||||
"You should have seen a prompt to add Modular Avatar to ALCOM or VCC. If you didn't, try installing or reinstalling ALCOM or VCC using the links below. Once you've added the repository, you can install Modular Avatar in your project by clicking the button shown below.": {
|
||||
"message": "You should have seen a prompt to add Modular Avatar to ALCOM or VCC. If you didn't, try installing or reinstalling ALCOM or VCC using the links below. Once you've added the repository, you can install Modular Avatar in your project by clicking the button shown below."
|
||||
},
|
||||
"Download ALCOM here": {
|
||||
"message": "Download ALCOM here"
|
||||
},
|
||||
"Download VRChat Creator Companion here": {
|
||||
"message": "Download VRChat Creator Companion here"
|
||||
}
|
||||
}
|
||||
|
@ -18,5 +18,21 @@
|
||||
"sidebar.tutorialSidebar.category.Dealing with problems": {
|
||||
"message": "Dealing with problems",
|
||||
"description": "The label for category Dealing with problems in sidebar tutorialSidebar"
|
||||
},
|
||||
"sidebar.tutorialSidebar.category.Reactive Components": {
|
||||
"message": "Reactive Components",
|
||||
"description": "The label for category Reactive Components in sidebar tutorialSidebar"
|
||||
},
|
||||
"sidebar.tutorialSidebar.category.General Behavior": {
|
||||
"message": "General Behavior",
|
||||
"description": "The label for category General Behavior in sidebar tutorialSidebar"
|
||||
},
|
||||
"sidebar.tutorialSidebar.category.Unity 2019 support": {
|
||||
"message": "Unity 2019 support",
|
||||
"description": "The label for category Unity 2019 support in sidebar tutorialSidebar"
|
||||
},
|
||||
"sidebar.tutorialSidebar.category.Experimental features": {
|
||||
"message": "Experimental features",
|
||||
"description": "The label for category Experimental features in sidebar tutorialSidebar"
|
||||
}
|
||||
}
|
||||
|
@ -301,5 +301,17 @@
|
||||
},
|
||||
"Tutorials": {
|
||||
"message": "チュートリアル"
|
||||
},
|
||||
"You should have seen a prompt to add Modular Avatar to ALCOM or VCC. If you didn't, try installing or reinstalling ALCOM or VCC using the links below. Once you've added the repository, you can install Modular Avatar in your project by clicking the button shown below.": {
|
||||
"message": "ALCOMかVCCにModular Avatarを追加する確認画面が出たはずです。もし出てない場合は、下記のリンクからALCOMかVCCをインストールまたは再インストールしてみてください。設定したあとは、下記のボタンを押すことでプロジェクトにModular Avatarを追加できます。"
|
||||
},
|
||||
"Download ALCOM here": {
|
||||
"message": "ALCOMのダウンロードはこちら"
|
||||
},
|
||||
"Download VRChat Creator Companion here": {
|
||||
"message": "VRChat Creator Companionのダウンロードはこちら"
|
||||
},
|
||||
"Download": {
|
||||
"message": "ダウンロード"
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 122 KiB |
After Width: | Height: | Size: 305 KiB |
@ -0,0 +1,22 @@
|
||||
# 実験的な機能
|
||||
|
||||
Modular Avatar(およびNDMF)には、デフォルトで無効になっているいくつかの実験的な機能があります。開発途中の機能であり、将来的に動作が変更される可能性があります。
|
||||
まだ完全にドキュメント化されていない場合があります。
|
||||
|
||||
:::warning
|
||||
|
||||
実験的な機能は、後方互換性のない方法で変更される可能性があります。
|
||||
つまり、実験的な機能を使用すると、将来的にアバターやアセットを再設定・更新する必要が生じる可能性があります。
|
||||
|
||||
:::
|
||||
|
||||
## 実験的な機能の有効化
|
||||
|
||||
実験的な機能を有効にする前に、Modular AvatarとNDMFの最新の(ベータ)バージョンをインストールしてください。詳細については、[インストール手順](intro#betas)を参照してください。
|
||||
|
||||
実験的な機能を有効にするには、メニューバーの「Tools」→「NDM Framework」→「Experimental Features」を開いてください。実験的な機能を有効または無効にするウィンドウが開きます。
|
||||
|
||||
## 実験的な機能のリスト
|
||||
|
||||
- [Resonite 対応](./resonite-support.md)
|
||||
- [汎用型アバター設定コンポーネント](./portable-avatar-components.md)
|
@ -0,0 +1,21 @@
|
||||
# 汎用型アバター設定コンポーネント
|
||||
|
||||
NDMFには、特定のプラットフォームSDK(VRCSDKなど)に依存しないアバターを作成するために使用できるコンポーネントがいくつか用意されています。
|
||||
|
||||
最小限の汎用アバター設定は、次の3つのコンポーネントで構成されています。
|
||||
- **NDMFAvatarRoot**: すべてのアバターに必要なコンポーネントです。アバターのルートに配置してください。
|
||||
- **NDMF Viewpoint**: アバターの視点を設定するコンポーネントです。視点の位置に空のゲームオブジェクトを作成し、このコンポーネントを追加してください。視点オブジェクトは階層内のどこにでも配置できますが、アバターのルートに配置することをお勧めします。
|
||||
- **NDMF Blendshape Visemes**: ブレンドシェイプの口パクを使用するアバターに必要なコンポーネントです。顔メッシュと口パクのブレンドシェイプを設定するために使用します。
|
||||
|
||||
## Portable Dynamic Bones {#portable-dynamic-bones}
|
||||
|
||||
Portable Dynamic Bonesコンポーネントを使用すると、特定のSDKに依存せずにボーンを物理的にシミュレートするようにマークできます。
|
||||
各プラットフォームには独自の物理シミュレーション方法があるため、これらのコンポーネントは、すべてのプラットフォームで共通する最小限のプロパティのみを設定できます。特定の設定は「設定テンプレート」名を構成することで処理されます。設定テンプレートは、プラットフォーム固有の方法で構成して特定の設定を与えることができます。
|
||||
|
||||
Portable Dynamic Bonesコンポーネントと、同じボーンルートトランスフォームを参照するプラットフォーム固有のダイナミックボーンコンポーネントの両方がある場合、プラットフォーム固有のコンポーネントが優先されます。
|
||||
|
||||
:::warning
|
||||
|
||||
Portable Dynamic Bonesはまだ完全に機能していません。動作する可能性はありますが、将来的に互換性のない方法で変更される可能性が非常に高いです。
|
||||
|
||||
:::
|
@ -0,0 +1,90 @@
|
||||
# Resonite対応
|
||||
|
||||
Modular Avatarには、実験的な機能として、Resonite向けのアバターをビルドできます。
|
||||
この機能を有効にするには、ALCOMを使用して「Modular Avatar - Resonite support」パッケージをインストールし、[実験的な機能のサポート](../experimental-features)を有効にする必要があります。
|
||||
|
||||
Resonite向けのアバターをビルドするには、NDMFコンソール (Tools -> NDM Framework -> NDMF Console)を開き、ウィンドウの上部でアバターを選択し、「Avatar platform」として「Resonite」を選択し、Buildをクリックしてください。
|
||||
正常にビルドが完了すると、「Build finished!」というメッセージが表示されます。
|
||||
その後、「copy to clipboard」をクリックして、resoniteでCtrl-Vを押すか、「Save as...」をクリックして、アバターを`resonitepackage`ファイルとして保存できます。
|
||||
|
||||
Resoniteのビルドプロセスは、ビルド中にアバターの特定の機能(ビジュアル、目の位置、物理ボーン/ダイナミックボーンなど)を自動的にコピーします。
|
||||
すでにVRChat向けにアバターを設定している場合は、追加の設定は必要ありません。
|
||||
VRChat向けにアバターを設定していない場合や、VRCSDKがインストールされていない場合は、[Portable Avatar Components](./portable-avatar-components.md)のドキュメントを参照して、アバターの基本設定を行ってください。
|
||||
|
||||
## 現在対応している機能
|
||||
|
||||
| 機能 | 対応状況 | 制限事項 |
|
||||
| ------- | --------- | ----------- |
|
||||
| Avatar の視点位置 | ✅ | なし |
|
||||
| Visemes(口パク) | 部分的 | ブレンドシェープ型のみ |
|
||||
| 揺れもの設定 | 部分的 | 下記参照 |
|
||||
| Reactive Components | ⌛ | 対応予定 |
|
||||
| Unity Constraints | ⌛ | 対応予定 |
|
||||
| 読み込み途中でのアバター表示への対策 | ✅ | None |
|
||||
|
||||
## 現在対応しているModular Avatarのコンポーネント
|
||||
|
||||
| コンポーネント | 対応状況 | 制限事項 |
|
||||
| ------- | --------- | ----------- |
|
||||
| Blendshape Sync | ⌛ | 対応予定 |
|
||||
| Bone Proxy | ✅ | なし |
|
||||
| Convert Constraints | ✖ | VRChat のみで対応 |
|
||||
| Menu Group | ⌛ | 対応予定 |
|
||||
| Menu Install Target | ⌛ | 対応予定 |
|
||||
| Menu Installer | ⌛ | 対応予定 |
|
||||
| Menu Item | ⌛ | 対応予定 |
|
||||
| Merge Animator | ✖ | VRChat のみで対応 |
|
||||
| Merge Armature | ✅ | なし |
|
||||
| Merge Blend Tree | ✖ | VRChat のみで対応 |
|
||||
| Mesh Settings | ⌛ | 対応予定 |
|
||||
| MMD Layer Control | ✖ | VRChat のみで対応 |
|
||||
| Move Independently | ✅ | なし |
|
||||
| Parameters | ⌛ | 対応予定(DynVarとして実装する予定)|
|
||||
| Physbone Blocker | ✅ | なし |
|
||||
| Remove Vertex Color | ✅ | なし |
|
||||
| Replace Object | ✅ | なし |
|
||||
| Scale Adjuster | ✅ | なし |
|
||||
| Sync Parameter Sequence | ✖ | VRChat のみで対応 |
|
||||
| Visible Head Accessory | ⌛ | 対応予定 |
|
||||
| VRChat Settings | ✖ | VRChat のみで対応 |
|
||||
| World Fixed Object | ⌛ | 対応予定 |
|
||||
| World Scale Object | ⌛ | 対応予定 |
|
||||
|
||||
## 揺れものについて
|
||||
|
||||
Modular Avatarは、[Portable Dynamic Bones](./portable-avatar-components#portable-dynamic-bones)またはVRChatのPhysBonesを使用して作成されたダイナミックボーンを検出し、コライダー設定を含めてResoniteのダイナミックボーンに変換しようとします。
|
||||
|
||||
Resoniteには独自のダイナミックボーンシステムがあるため、ほとんどの設定オプションは変換されません。ただし、除外(Physbone Blockersを含む)、コライダー、衝突範囲および掴めるかの設定は変換されます。
|
||||
|
||||
Dynamic Bonesは、ボーン名に基づいて、いくつかの名前付き「テンプレート」にグループ化されます。テンプレート名は、ポータブルダイナミックボーンコンポーネントにグループ名を指定することで上書きできます。
|
||||
または、Resoniteで、`Avatar Settings` -> `Dynamic Bone Settings` スロットの下にあるオブジェクトをクローンし、新しいテンプレート名に設定し、ダイナミックボーンを定義したスロットの下にある`Template Name`スロットの名前を変更することで、新しいテンプレートを作成できます。
|
||||
|
||||
同じテンプレートの下にあるすべてのダイナミックボーンは、Inertia、InertiaForce、Damping、Elasticity、およびStiffnessの設定を共有します。これらの設定は、対象のダイナミックボーンのいずれかでも変更すればすべてが連動します。
|
||||
|
||||
## アバター設定ののコピー機能
|
||||
|
||||
Modular Avatarは、Resoniteアバターの異なるバージョン間でアバター設定をコピーするシステムを自動的に導入します。これにより、Resonite固有の設定(ダイナミックボーンの設定など)を設定し、Unityから再インポートした後に新しいバージョンのアバターにコピーできます。
|
||||
|
||||
具体的には、`Avatar Settings`スロットの下にあるすべてのスロットをコピーし、同じ名前のスロットがあれば上書きします。自分のスロットを`Avatar Settings`スロットに追加することもでき、これらもコピーされます。
|
||||
|
||||
設定をコピーするには、古いアバターをResoniteで着用し、新しいアバターをレーザーで持ちます。コンテキストメニューから`MA Settings Copier` -> `Copy To Avatar`を選択します。これにより、古いアバターの設定が新しいアバターにコピーされます。その後、新しいアバターを着用すると、設定が適用されます。
|
||||
|
||||
## 自動設定されるDynVar
|
||||
|
||||
Modular Avatarは、アバターシステムで使用できるいくつかのDynamic Variableを定義しています。
|
||||
|
||||
自動追加されるDynVarの仕様は、現在実験的なものも含まれるため、将来的に変更される可能性があります。
|
||||
|
||||
| 名前 | 型 | 詳細 |
|
||||
|----------------------------------------| ---- | ----------- |
|
||||
| `modular_avatar/AvatarRoot` | `Slot` | アバターのルートスロット(`CenteredRoot`の親) |
|
||||
| `modular_avatar/AvatarWorn` | `bool` | アバターが現在着用されているかどうか(アバターがUserスロットの直下にある場合に検出) |
|
||||
| `modular_avatar/AvatarSettingsRoot` | `Slot` | `Avatar Settings`オブジェクト |
|
||||
| `modular_avatar/AvatarPoseNode.[type]` | `Slot` | | `[type]`の`AvatarPoseNode`コンポーネントを含むスロット(例:`Head Proxy`) |
|
||||
| `modular_avatar/MeshNotLoaded` | `bool` | アバターのメッシュが読み込まれていないかどうか。なお、この変数は読み込み途中のメッシュがある場合「false」になり、ない場合は「未定義」になるので注意。この仕様は将来的に変更される可能性が高いのでご注意ください |
|
||||
| `modular_avatar/HumanBone.[name]` | `Slot` | ヒューマノイドボーンを名前で参照します。名義は今後変更される可能性があります。 |
|
||||
| `modular_avatar/HumanBonePose.[name]` | `float4x4` | 該当するボーンの初期ポーズです。_名前・内容の調整が入る可能性が高い機能です。|
|
||||
|
||||
なお、ほかのギミック用に、アバタールートに「Avatar」のDynamic Variable Spaceも生成されます。
|
||||
|
||||
<!-- TODO: Screenshots -->
|
@ -2,6 +2,9 @@
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
|
||||
# Modular Avatar
|
||||
|
||||
Modular Avatar(モジュラーアバター)は、**非破壊的な**アバター製作用、そしてアバター部品の配布補助ツールの集まりです。
|
||||
@ -11,7 +14,42 @@ Modular Avatarの機能はそれぞれコンポーネントとして提供され
|
||||
|
||||
## インストール
|
||||
|
||||
VRChat Creator CompanionでModular Avatarをインストールすることをお勧めします。VCCをインストールしたら、こちらをクリックしてください:
|
||||
ALCOMでModular Avatarをインストールすることをお勧めします。VRChat Creator Companionを使用してインストールすることもできます。
|
||||
|
||||
<Tabs>
|
||||
<TabItem value="ALCOM" label="ALCOM" default>
|
||||
|
||||
まずは[ALCOM](https://vrc-get.anatawa12.com/ja/alcom/)をインストールしてください。
|
||||
|
||||
インストール後、以下の手順でVPMリポジトリを追加してください。
|
||||
|
||||
* 「パッケージ管理」 > 「VPMリポジトリを追加」
|
||||
* 「リポジトリ情報を入力」に次の値を入力し、「VPMリポジトリを追加」
|
||||
* 通常版: `https://vpm.nadena.dev/vpm.json`
|
||||
* テスト版: `https://vpm.nadena.dev/vpm-prerelease.json` (ベータ版使用の場合)
|
||||
* 以下の情報が記載されることを確認し、「VPMリポジトリを追加」
|
||||
* リポジトリ名: `bd_`
|
||||
* URL: 入力したURL
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
終わったら、プロジェクトの"管理"を開き、Modular Avatarの+をクリックし、「適用」をクリックしてください。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
最新版にアップデートするには、バージョン番号と緑色の矢印を囲った枠内をクリックし、「適用」をクリックしてください。
|
||||
|
||||

|
||||
</TabItem>
|
||||
|
||||
<TabItem value="VCC" label="VRChat Creator Companion">
|
||||
VRChat Creator Companionを使用したい場合、[こちらからVCCをインストール](https://vrchat.com/home/download)してください。
|
||||
|
||||
VCCをインストールしたら、こちらをクリックしてください:
|
||||
* [Modular AvatarをVCCに追加](vcc://vpm/addRepo?url=https://vpm.nadena.dev/vpm.json)
|
||||
|
||||
その後、プロジェクトの"manage project"を開き、Modular Avatarの+をクリックしてください。
|
||||
@ -20,11 +58,28 @@ VRChat Creator CompanionでModular Avatarをインストールすることをお
|
||||
|
||||
最新版にアップデートするには、"Latest Version"の緑色の矢印をクリックしてください。
|
||||
|
||||
## テスト版
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
|
||||
VCCでテスト版をインストールできるようにするには、[こちらをクリック](vcc://vpm/addRepo?url=https://vpm.nadena.dev/vpm-prerelease.json)
|
||||
## テスト版 {#betas}
|
||||
|
||||
そして、VCCの設定画面のPackagesタブで、`bd_`のリポジトリをチェックを外し、`bd_ prerelease`のリポジトリをチェックを入れ、`Show pre-release packages`にチェックを入れてください。
|
||||
:::warning
|
||||
|
||||
テスト版のインストールにはALCOMを使用してください。VCCの依存関係解決のバグのため、VCCではテスト版をインストールすることをお勧めしません。
|
||||
|
||||
:::
|
||||
|
||||
ALCOMでテスト版を使用するには、以下の手順を実行してください。
|
||||
1. 「パッケージ管理」 > 「VPMリポジトリを追加」
|
||||
2. 「リポジトリ情報を入力」に次の値を入力し、「VPMリポジトリを追加」: `https://vpm.nadena.dev/vpm-prerelease.json`
|
||||
3. 以下の情報が記載されることを確認し、「VPMリポジトリを追加」
|
||||
* リポジトリ名: `bd_ (prereleases)`
|
||||
* URL: 入力したURL
|
||||
|
||||
VPMリポジトリの追加が完了したら、テスト版が表示されるように変更します。
|
||||
|
||||
* (現在「通常版」を使用している場合は)「パッケージ管理」タブで、`bd_`リポジトリのチェックを外し、`bd_ (prereleases)`リポジトリのチェックを入れてください。
|
||||
* 「設定」タブで、 `VPMパッケージ` の中にある `プレリリース版のパッケージを表示する`にチェックを入れてください。
|
||||
|
||||

|
||||
|
||||
@ -35,26 +90,6 @@ VCCでテスト版をインストールできるようにするには、[こち
|
||||
|
||||
## ALCOMでのインストール
|
||||
|
||||
[ALCOM](https://vrc-get.anatawa12.com/ja/alcom/)でModular Avatarのインストールを指定する場合があります。
|
||||
|
||||
インストール後、以下の手順でVPMリポジトリを追加してください。
|
||||
* 「パッケージ管理」 > 「VPMリポジトリを追加」
|
||||
* 「リポジトリ情報を入力」に次の値を入力し、「VPMリポジトリを追加」
|
||||
* 通常版: `https://vpm.nadena.dev/vpm.json`
|
||||
* テスト版: `https://vpm.nadena.dev/vpm-prerelease.json`
|
||||
* 以下の情報が記載されることを確認し、「VPMリポジトリを追加」
|
||||
* リポジトリ名: `bd_` もしくは `bd_ (prereleases)`
|
||||
* URL: 入力したURL
|
||||
|
||||
その後、プロジェクトの"管理"を開き、Modular Avatarの+をクリックし、「適用」をクリックしてください。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
最新版にアップデートするには、バージョン番号と緑色の矢印を囲った枠内をクリックし、「適用」をクリックしてください。
|
||||
|
||||

|
||||
|
||||
## インストール後
|
||||
|
||||
|
Before Width: | Height: | Size: 66 KiB After Width: | Height: | Size: 155 KiB |
@ -8,9 +8,13 @@ import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
|
||||
import Layout from '@theme/Layout';
|
||||
import Translate, {translate} from '@docusaurus/Translate';
|
||||
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
|
||||
import styles from '@site/src/pages/index.module.css';
|
||||
|
||||
const install_help = require('@site/static/img/ma-install-help.png').default;
|
||||
const install_help_alcom = require('@site/static/img/ma-install-help-alcom.png').default;
|
||||
const install_help_vcc = require('@site/static/img/ma-install-help-vcc.png').default;
|
||||
|
||||
function ModalContent({closeModal}) {
|
||||
return <div className="card card--modal">
|
||||
@ -20,9 +24,8 @@ function ModalContent({closeModal}) {
|
||||
<div className={"card__body"}>
|
||||
<p>
|
||||
<Translate>
|
||||
You should have seen a prompt to add Modular Avatar to VCC. If you didn't, upgrade your copy of the VRChat Creator Companion
|
||||
and try again. Once you've added the repository, you can install Modular Avatar in your project by clicking
|
||||
the button shown below.
|
||||
You should have seen a prompt to add Modular Avatar to ALCOM or VCC. If you didn't, try installing or reinstalling ALCOM or VCC using the links below.
|
||||
Once you've added the repository, you can install Modular Avatar in your project by clicking the button shown below.
|
||||
</Translate>
|
||||
</p>
|
||||
<p>
|
||||
@ -32,7 +35,17 @@ function ModalContent({closeModal}) {
|
||||
</Translate>
|
||||
</a>
|
||||
</p>
|
||||
<img src={install_help} alt={translate({message: "Click the plus button to install"})}/>
|
||||
|
||||
<Tabs>
|
||||
<TabItem value="alcom" label="ALCOM" default>
|
||||
<a href="https://vrc-get.anatawa12.com/en/alcom/"><Translate>Download ALCOM here</Translate></a>
|
||||
<img src={install_help_alcom} alt={translate({message: "Click the plus button to install"})}/>
|
||||
</TabItem>
|
||||
<TabItem value="vcc" label="VRChat Creator Companion">
|
||||
<a href="https://vrchat.com/home/download"><Translate>Download VRChat Creator Companion here</Translate></a>
|
||||
<img src={install_help_vcc} alt={translate({message: "Click the plus button to install"})}/>
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
</div>
|
||||
<div className={"card__footer"}>
|
||||
<button className={"button button--secondary button--block"} onClick={closeModal}>
|
||||
@ -61,7 +74,7 @@ export default function InstallButton() {
|
||||
to="vcc://vpm/addRepo?url=https://vpm.nadena.dev/vpm.json"
|
||||
onClick={() => { setShowModal(true); return true; }}
|
||||
>
|
||||
<Translate>Download (using VCC)</Translate>
|
||||
<Translate>Download</Translate>
|
||||
</Link>
|
||||
{ showModal &&
|
||||
<Modal isOpen={{showModal}} onRequestClose={() => setShowModal(false)}
|
||||
|
BIN
docs~/static/img/ma-install-help-alcom.png
Normal file
After Width: | Height: | Size: 140 KiB |
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 88 KiB |
@ -7286,11 +7286,11 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"estree-util-value-to-estree@npm:^3.0.1":
|
||||
version: 3.1.2
|
||||
resolution: "estree-util-value-to-estree@npm:3.1.2"
|
||||
version: 3.3.3
|
||||
resolution: "estree-util-value-to-estree@npm:3.3.3"
|
||||
dependencies:
|
||||
"@types/estree": ^1.0.0
|
||||
checksum: 31c4b9f3a2e64119b994a86d70070325b6ec238a21842669e79b0d6a7190150293616c8f38fee1c369c18bbef405064d883aa38c05311db5d0a211a30e9924d6
|
||||
checksum: 73851f26715300046228cf8a36986c101d6741d7a2b024f684675e75d1191bc07b0dc069926876729efd5650343d23bffe76104221b7dc862965632302b05524
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "nadena.dev.modular-avatar",
|
||||
"displayName": "Modular Avatar",
|
||||
"version": "1.12.5",
|
||||
"version": "1.13.0-alpha.2",
|
||||
"unity": "2022.3",
|
||||
"description": "A suite of tools for assembling your avatar out of reusable components",
|
||||
"author": {
|
||||
@ -16,6 +16,6 @@
|
||||
},
|
||||
"vpmDependencies": {
|
||||
"com.vrchat.avatars": ">=3.7.4",
|
||||
"nadena.dev.ndmf": ">=1.7.7 <2.0.0-a"
|
||||
"nadena.dev.ndmf": ">=1.8.0-alpha.4 <2.0.0-a"
|
||||
}
|
||||
}
|
||||
|