mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2025-05-10 13:19:01 +08:00
Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
07a6695cfe | ||
|
211622a750 | ||
|
acb46b13e0 | ||
|
1ef36e25df | ||
|
2a63c4b429 |
4
.github/ProjectRoot/vpm-manifest-2022.json
vendored
4
.github/ProjectRoot/vpm-manifest-2022.json
vendored
@ -4,7 +4,7 @@
|
|||||||
"version": "3.7.4"
|
"version": "3.7.4"
|
||||||
},
|
},
|
||||||
"nadena.dev.ndmf": {
|
"nadena.dev.ndmf": {
|
||||||
"version": "1.8.0-alpha.4"
|
"version": "1.7.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
@ -19,7 +19,7 @@
|
|||||||
"dependencies": {}
|
"dependencies": {}
|
||||||
},
|
},
|
||||||
"nadena.dev.ndmf": {
|
"nadena.dev.ndmf": {
|
||||||
"version": "1.8.0-alpha.4"
|
"version": "1.7.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
4
.github/workflows/perform-release.yml
vendored
4
.github/workflows/perform-release.yml
vendored
@ -56,7 +56,7 @@ jobs:
|
|||||||
run: echo "$GITHUB_CONTEXT"
|
run: echo "$GITHUB_CONTEXT"
|
||||||
|
|
||||||
# https://github.com/orgs/community/discussions/13836#discussioncomment-8535364
|
# https://github.com/orgs/community/discussions/13836#discussioncomment-8535364
|
||||||
- uses: actions/create-github-app-token@v2
|
- uses: actions/create-github-app-token@v1
|
||||||
id: app-token
|
id: app-token
|
||||||
with:
|
with:
|
||||||
app-id: ${{ vars.RELEASER_APP_ID }}
|
app-id: ${{ vars.RELEASER_APP_ID }}
|
||||||
@ -218,7 +218,7 @@ jobs:
|
|||||||
cat .github/release-note.md
|
cat .github/release-note.md
|
||||||
|
|
||||||
- name: Make Release
|
- name: Make Release
|
||||||
uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631
|
uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda
|
||||||
if: ${{ github.event.inputs.publish == 'true' }}
|
if: ${{ github.event.inputs.publish == 'true' }}
|
||||||
with:
|
with:
|
||||||
draft: true
|
draft: true
|
||||||
|
@ -19,31 +19,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
|
|
||||||
## [1.13.0-alpha.2] - [2025-04-14]
|
## [1.12.4] - [2025-04-10]
|
||||||
|
|
||||||
### Fixed
|
|
||||||
- [#1558] Merge AnimatorでベースアバターのArmature内のTransformをアニメーションさせると壊れる問題を修正
|
|
||||||
|
|
||||||
## [1.13.0-alpha.1] - [2025-04-10]
|
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- [#1552] Merge Blend Treeにて、メインアバターFXレイヤーと同じ名前のintやboolパラメーターがBlend Treeに含まれている場合、
|
- [#1552] Merge Blend Treeにて、メインアバターFXレイヤーと同じ名前のintやboolパラメーターがBlend Treeに含まれている場合、
|
||||||
パラメーター型が修正されない問題を修正
|
パラメーター型が修正されない問題を修正
|
||||||
- [#1553] リアクティブコンポーネントが生成するステートに、WD設定が正しくない問題を修正
|
- [#1553] リアクティブコンポーネントが生成するステートに、WD設定が正しくない問題を修正
|
||||||
- [#1555] VRC Animator Play Audioが、Audio Sourceまでの絶対パスで設定されている場合に、相対パスのMerge Animator
|
|
||||||
コンポーネントとマージされた場合、指定されたオブジェクトが存在しないことを検出し、参照を絶対パスとして扱うように修正
|
|
||||||
- 対象のパスにオブジェクトがある場合は、相対パスとして扱われます。安定性向上のためMerge Animatorコンポーネントと同じ
|
|
||||||
指定方法を使用することをお勧めします。
|
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- [#1551] Merge Animatorは、遷移のない単一のstateを持つブレンドツリーのレイヤーに対して常にWDをONに設定します。
|
- [#1551] Merge Animatorは、遷移のない単一のstateを持つブレンドツリーのレイヤーに対して常にWDをONに設定します。
|
||||||
- 一部、以前の挙動に依存したアセットとの互換性を向上させるための変更です。
|
- 一部、以前の挙動に依存したアセットとの互換性を向上させるための変更です。
|
||||||
|
|
||||||
## [1.13.0-alpha.0] - [2025-04-08]
|
|
||||||
|
|
||||||
### Added
|
|
||||||
- (実験的機能) VRC以外のプラットフォームのサポートを有効化
|
|
||||||
|
|
||||||
## [1.12.3] - [2025-04-05]
|
## [1.12.3] - [2025-04-05]
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
@ -19,33 +19,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
|
|
||||||
## [1.13.0-alpha.2] - [2025-04-14]
|
## [1.12.4] - [2025-04-10]
|
||||||
|
|
||||||
### Fixed
|
|
||||||
- [#1558] Fixed an issue where Merge Animators animating transforms in the base avatar's armature would break.
|
|
||||||
|
|
||||||
## [1.13.0-alpha.1] - [2025-04-10]
|
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- [#1552] Merge Blend Tree failed to correct parameter types when the main avatar FX layer contained an int or bool
|
- [#1552] Merge Blend Tree failed to correct parameter types when the main avatar FX layer contained an int or bool
|
||||||
parameter with the same name as one used in the blend tree.
|
parameter with the same name as one used in the blend tree.
|
||||||
- [#1553] Reactive components might generate states with incorrect write default settings
|
- [#1553] Reactive components might generate states with incorrect write default settings
|
||||||
- [#1555] Fixed compatibility regression from 1.11.x: VRC Animator Play Audio, when configured with an absolute path
|
|
||||||
but merged with a relative-path merge animator component, will now detect that the indicated object does not
|
|
||||||
exist, and treat the reference as an absolute path.
|
|
||||||
- Note that if there is an object in the target path, then it will be treated as a relative path. Using
|
|
||||||
addressing for Play Audio behaviors consistent with Merge Animator settings is therefore recommended as it will be
|
|
||||||
more robust.
|
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- [#1551] Merge Animator will always set WD ON for single-state blendtree layers with no any state transitions.
|
- [#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.
|
- 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]
|
## [1.12.3] - [2025-04-05]
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
@ -9,7 +9,6 @@ Modular Avatarの主な変更点をこのファイルで記録しています。
|
|||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- (実験的機能) VRC以外のプラットフォームのサポートを有効化
|
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
@ -21,25 +20,11 @@ Modular Avatarの主な変更点をこのファイルで記録しています。
|
|||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
|
|
||||||
## [1.12.5] - [2025-04-14]
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
- [#1555] VRC Animator Play Audioが、Audio Sourceまでの絶対パスで設定されている場合に、相対パスのMerge Animator
|
|
||||||
コンポーネントとマージされた場合、指定されたオブジェクトが存在しないことを検出し、参照を絶対パスとして扱うように修正
|
|
||||||
- 対象のパスにオブジェクトがある場合は、相対パスとして扱われます。安定性向上のためMerge Animatorコンポーネントと同じ
|
|
||||||
指定方法を使用することをお勧めします。
|
|
||||||
- [#1558] Merge AnimatorでベースアバターのArmature内のTransformをアニメーションさせると壊れる問題を修正
|
|
||||||
- NDMFの依存バージョンを更新
|
|
||||||
- VRChat Avatar Descriptor内のレイヤーが重複している場合、すべてのアニメーターコンテンツが無視される問題を修正
|
|
||||||
- 起動時に発生する `NullReferenceException` を修正
|
|
||||||
- AnimationIndex内の `NullReferenceException` を修正
|
|
||||||
- アニメーションカーブのパスが複数回書き換えられると削除される問題を修正
|
|
||||||
|
|
||||||
## [1.12.4] - [2025-04-10]
|
## [1.12.4] - [2025-04-10]
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- [#1552] Merge Blend Treeにて、メインアバターFXレイヤーと同じ名前のintやboolパラメーターがBlend Treeに含まれている場合、
|
- [#1552] Merge Blend Treeにて、メインアバターFXレイヤーと同じ名前のintやboolパラメーターがBlend Treeに含まれている場合、
|
||||||
パラメーター型が修正されない問題を修正
|
パラメーター型が修正されない問題を修正
|
||||||
- [#1553] リアクティブコンポーネントが生成するステートに、WD設定が正しくない問題を修正
|
- [#1553] リアクティブコンポーネントが生成するステートに、WD設定が正しくない問題を修正
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
20
CHANGELOG.md
20
CHANGELOG.md
@ -11,7 +11,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- (Experimental feature) Enabled support for non-VRC platforms
|
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
@ -23,28 +22,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
|
|
||||||
## [1.12.5] - [2025-04-14]
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
- [#1555] Fixed compatibility regression from 1.11.x: VRC Animator Play Audio, when configured with an absolute path
|
|
||||||
but merged with a relative-path merge animator component, will now detect that the indicated object does not
|
|
||||||
exist, and treat the reference as an absolute path.
|
|
||||||
- Note that if there is an object in the target path, then it will be treated as a relative path. Using
|
|
||||||
addressing for Play Audio behaviors consistent with Merge Animator settings is therefore recommended as it will be
|
|
||||||
more robust.
|
|
||||||
- [#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.12.4] - [2025-04-10]
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- [#1552] Merge Blend Tree failed to correct parameter types when the main avatar FX layer contained an int or bool
|
- [#1552] Merge Blend Tree failed to correct parameter types when the main avatar FX layer contained an int or bool
|
||||||
parameter with the same name as one used in the blend tree.
|
parameter with the same name as one used in the blend tree.
|
||||||
- [#1553] Reactive components might generate states with incorrect write default settings
|
- [#1553] Reactive components might generate states with incorrect write default settings
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
@ -1,46 +0,0 @@
|
|||||||
#if MA_VRCSDK3_AVATARS
|
|
||||||
|
|
||||||
using System.Linq;
|
|
||||||
using nadena.dev.modular_avatar.core;
|
|
||||||
using nadena.dev.ndmf;
|
|
||||||
using nadena.dev.ndmf.animator;
|
|
||||||
using VRC.SDK3.Avatars.Components;
|
|
||||||
|
|
||||||
namespace nadena.dev.modular_avatar.animation
|
|
||||||
{
|
|
||||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
|
||||||
public class FixupAbsolutePlayAudioPass : Pass<FixupAbsolutePlayAudioPass>
|
|
||||||
{
|
|
||||||
protected override void Execute(BuildContext context)
|
|
||||||
{
|
|
||||||
// Older versions of modular avatar did not adjust Animator Play Audio paths when they were absolute paths.
|
|
||||||
// Replicate this behavior here.
|
|
||||||
|
|
||||||
// Note that this runs before any object movement.
|
|
||||||
|
|
||||||
var asc = context.Extension<AnimatorServicesContext>();
|
|
||||||
|
|
||||||
foreach (var mama in context.AvatarRootTransform.GetComponentsInChildren<ModularAvatarMergeAnimator>(true))
|
|
||||||
{
|
|
||||||
if (!mama._wasRelative) continue;
|
|
||||||
|
|
||||||
var pathPrefix = asc.ObjectPathRemapper.GetVirtualPathForObject(mama.gameObject) + "/";
|
|
||||||
|
|
||||||
foreach (var state in asc.ControllerContext.Controllers[mama].AllReachableNodes()
|
|
||||||
.OfType<VirtualState>())
|
|
||||||
{
|
|
||||||
foreach (var behavior in state.Behaviours.OfType<VRCAnimatorPlayAudio>())
|
|
||||||
{
|
|
||||||
if (asc.ObjectPathRemapper.GetObjectForPath(behavior.SourcePath) != null) continue;
|
|
||||||
if (behavior.SourcePath.StartsWith(pathPrefix))
|
|
||||||
{
|
|
||||||
behavior.SourcePath = behavior.SourcePath.Substring(pathPrefix.Length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,3 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: a763cbc4bac94063b6b084ea3f4d8206
|
|
||||||
timeCreated: 1744422528
|
|
@ -23,7 +23,6 @@ namespace nadena.dev.modular_avatar.animation
|
|||||||
internal HashSet<VirtualLayer> mmdAffectedOriginalLayers = new();
|
internal HashSet<VirtualLayer> mmdAffectedOriginalLayers = new();
|
||||||
}
|
}
|
||||||
|
|
||||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
|
||||||
internal class MMDRelayEarlyPass : Pass<MMDRelayEarlyPass>
|
internal class MMDRelayEarlyPass : Pass<MMDRelayEarlyPass>
|
||||||
{
|
{
|
||||||
protected override void Execute(BuildContext context)
|
protected override void Execute(BuildContext context)
|
||||||
@ -47,7 +46,6 @@ 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
|
/// 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.
|
/// pushed out of the first three layers by injecting dummy layers.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
|
||||||
internal class MMDRelayPass : Pass<MMDRelayPass>
|
internal class MMDRelayPass : Pass<MMDRelayPass>
|
||||||
{
|
{
|
||||||
private const string MMDRelayParam = "__MA/Internal/MMDNotActive";
|
private const string MMDRelayParam = "__MA/Internal/MMDNotActive";
|
||||||
|
@ -13,7 +13,6 @@ using UnityEngine;
|
|||||||
|
|
||||||
namespace nadena.dev.modular_avatar.core.editor
|
namespace nadena.dev.modular_avatar.core.editor
|
||||||
{
|
{
|
||||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
|
||||||
internal class ApplyAnimatorDefaultValuesPass : Pass<ApplyAnimatorDefaultValuesPass>
|
internal class ApplyAnimatorDefaultValuesPass : Pass<ApplyAnimatorDefaultValuesPass>
|
||||||
{
|
{
|
||||||
protected override void Execute(ndmf.BuildContext context)
|
protected override void Execute(ndmf.BuildContext context)
|
||||||
|
@ -164,12 +164,9 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
{
|
{
|
||||||
var newPath = GetReplacementPath(binding.path);
|
var newPath = GetReplacementPath(binding.path);
|
||||||
|
|
||||||
if (newPath != binding.path)
|
var newBinding = EditorCurveBinding.FloatCurve(newPath, binding.type, binding.propertyName);
|
||||||
{
|
clip.SetFloatCurve(newBinding, clip.GetFloatCurve(binding));
|
||||||
var newBinding = EditorCurveBinding.FloatCurve(newPath, binding.type, binding.propertyName);
|
clip.SetFloatCurve(binding, null);
|
||||||
clip.SetFloatCurve(newBinding, clip.GetFloatCurve(binding));
|
|
||||||
clip.SetFloatCurve(binding, null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,6 @@ using Object = UnityEngine.Object;
|
|||||||
|
|
||||||
namespace nadena.dev.modular_avatar.core.editor
|
namespace nadena.dev.modular_avatar.core.editor
|
||||||
{
|
{
|
||||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
|
||||||
internal class MergeBlendTreePass : Pass<MergeBlendTreePass>
|
internal class MergeBlendTreePass : Pass<MergeBlendTreePass>
|
||||||
{
|
{
|
||||||
internal const string ALWAYS_ONE = "__ModularAvatarInternal/One";
|
internal const string ALWAYS_ONE = "__ModularAvatarInternal/One";
|
||||||
|
@ -22,14 +22,13 @@
|
|||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
|
using nadena.dev.modular_avatar.animation;
|
||||||
using nadena.dev.modular_avatar.editor.ErrorReporting;
|
using nadena.dev.modular_avatar.editor.ErrorReporting;
|
||||||
using nadena.dev.ndmf.animator;
|
using nadena.dev.ndmf.animator;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using Object = UnityEngine.Object;
|
|
||||||
|
|
||||||
namespace nadena.dev.modular_avatar.core.editor
|
namespace nadena.dev.modular_avatar.core.editor
|
||||||
{
|
{
|
||||||
@ -159,7 +158,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
|
|
||||||
// Remap any animation clips that reference this bone into its parent
|
// Remap any animation clips that reference this bone into its parent
|
||||||
_pathRemapper.ReplaceObject(sourceBone.gameObject, sourceBone.transform.parent.gameObject);
|
_pathRemapper.ReplaceObject(sourceBone.gameObject, sourceBone.transform.parent.gameObject);
|
||||||
Object.DestroyImmediate(sourceBone.gameObject);
|
UnityEngine.Object.DestroyImmediate(sourceBone.gameObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -186,7 +185,7 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
public Mesh Retarget()
|
public Mesh Retarget()
|
||||||
{
|
{
|
||||||
var avatarTransform = RuntimeUtil.FindAvatarTransformInParents(renderer.transform);
|
var avatarTransform = RuntimeUtil.FindAvatarTransformInParents(renderer.transform);
|
||||||
if (avatarTransform == null) throw new Exception("Could not find avatar in parents of " + renderer.name);
|
if (avatarTransform == null) throw new System.Exception("Could not find avatar in parents of " + renderer.name);
|
||||||
|
|
||||||
var avPos = avatarTransform.position;
|
var avPos = avatarTransform.position;
|
||||||
var avRot = avatarTransform.rotation;
|
var avRot = avatarTransform.rotation;
|
||||||
|
@ -14,7 +14,6 @@ using VRC.Dynamics;
|
|||||||
|
|
||||||
namespace nadena.dev.modular_avatar.core.editor
|
namespace nadena.dev.modular_avatar.core.editor
|
||||||
{
|
{
|
||||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
|
||||||
internal class ConstraintConverterPass : Pass<ConstraintConverterPass>
|
internal class ConstraintConverterPass : Pass<ConstraintConverterPass>
|
||||||
{
|
{
|
||||||
#if MA_VRCSDK3_AVATARS_3_7_0_OR_NEWER
|
#if MA_VRCSDK3_AVATARS_3_7_0_OR_NEWER
|
||||||
|
@ -5,7 +5,6 @@ using nadena.dev.ndmf;
|
|||||||
|
|
||||||
namespace nadena.dev.modular_avatar.core.editor
|
namespace nadena.dev.modular_avatar.core.editor
|
||||||
{
|
{
|
||||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
|
||||||
internal class PruneParametersPass : Pass<PruneParametersPass>
|
internal class PruneParametersPass : Pass<PruneParametersPass>
|
||||||
{
|
{
|
||||||
protected override void Execute(ndmf.BuildContext context)
|
protected override void Execute(ndmf.BuildContext context)
|
||||||
|
@ -19,7 +19,6 @@ using Object = UnityEngine.Object;
|
|||||||
|
|
||||||
namespace nadena.dev.modular_avatar.core.editor.plugin
|
namespace nadena.dev.modular_avatar.core.editor.plugin
|
||||||
{
|
{
|
||||||
[RunsOnAllPlatforms]
|
|
||||||
class PluginDefinition : Plugin<PluginDefinition>
|
class PluginDefinition : Plugin<PluginDefinition>
|
||||||
{
|
{
|
||||||
public override string QualifiedName => "nadena.dev.modular-avatar";
|
public override string QualifiedName => "nadena.dev.modular-avatar";
|
||||||
@ -59,11 +58,9 @@ namespace nadena.dev.modular_avatar.core.editor.plugin
|
|||||||
#if MA_VRCSDK3_AVATARS
|
#if MA_VRCSDK3_AVATARS
|
||||||
seq.Run(ReactiveObjectPrepass.Instance);
|
seq.Run(ReactiveObjectPrepass.Instance);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
seq.WithRequiredExtension(typeof(AnimatorServicesContext), _s2 =>
|
seq.WithRequiredExtension(typeof(AnimatorServicesContext), _s2 =>
|
||||||
{
|
{
|
||||||
#if MA_VRCSDK3_AVATARS
|
#if MA_VRCSDK3_AVATARS
|
||||||
seq.Run(FixupAbsolutePlayAudioPass.Instance);
|
|
||||||
seq.Run(MMDRelayEarlyPass.Instance);
|
seq.Run(MMDRelayEarlyPass.Instance);
|
||||||
seq.Run(RenameParametersPluginPass.Instance);
|
seq.Run(RenameParametersPluginPass.Instance);
|
||||||
seq.Run(ParameterAssignerPass.Instance);
|
seq.Run(ParameterAssignerPass.Instance);
|
||||||
@ -73,8 +70,7 @@ namespace nadena.dev.modular_avatar.core.editor.plugin
|
|||||||
|
|
||||||
seq.WithRequiredExtension(typeof(ReadablePropertyExtension), _s3 =>
|
seq.WithRequiredExtension(typeof(ReadablePropertyExtension), _s3 =>
|
||||||
{
|
{
|
||||||
// TODO - refactor out VRChat-specific bits
|
seq.Run("Shape Changer", ctx => new ReactiveObjectPass(ctx).Execute())
|
||||||
seq.Run("Reactive Components", ctx => new ReactiveObjectPass(ctx).Execute())
|
|
||||||
.PreviewingWith(new ShapeChangerPreview(), new ObjectSwitcherPreview(),
|
.PreviewingWith(new ShapeChangerPreview(), new ObjectSwitcherPreview(),
|
||||||
new MaterialSetterPreview());
|
new MaterialSetterPreview());
|
||||||
});
|
});
|
||||||
@ -86,27 +82,26 @@ namespace nadena.dev.modular_avatar.core.editor.plugin
|
|||||||
seq.Run(MenuInstallPluginPass.Instance);
|
seq.Run(MenuInstallPluginPass.Instance);
|
||||||
#endif
|
#endif
|
||||||
seq.Run(MergeArmaturePluginPass.Instance);
|
seq.Run(MergeArmaturePluginPass.Instance);
|
||||||
|
|
||||||
seq.Run(BoneProxyPluginPass.Instance);
|
seq.Run(BoneProxyPluginPass.Instance);
|
||||||
|
|
||||||
#if MA_VRCSDK3_AVATARS
|
#if MA_VRCSDK3_AVATARS
|
||||||
seq.Run(VisibleHeadAccessoryPluginPass.Instance);
|
seq.Run(VisibleHeadAccessoryPluginPass.Instance);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
seq.OnPlatforms(new[] { WellKnownPlatforms.VRChatAvatar30 }, _seq =>
|
seq.Run("World Fixed Object",
|
||||||
{
|
ctx => new WorldFixedObjectProcessor().Process(ctx)
|
||||||
seq.Run("World Fixed Object",
|
);
|
||||||
ctx => new WorldFixedObjectProcessor().Process(ctx)
|
|
||||||
);
|
|
||||||
});
|
|
||||||
seq.Run(WorldScaleObjectPass.Instance);
|
seq.Run(WorldScaleObjectPass.Instance);
|
||||||
|
|
||||||
seq.Run(ReplaceObjectPluginPass.Instance);
|
seq.Run(ReplaceObjectPluginPass.Instance);
|
||||||
|
|
||||||
#if MA_VRCSDK3_AVATARS
|
#if MA_VRCSDK3_AVATARS
|
||||||
seq.Run(BlendshapeSyncAnimationPluginPass.Instance);
|
seq.Run(BlendshapeSyncAnimationPluginPass.Instance);
|
||||||
seq.Run(ConstraintConverterPass.Instance);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
seq.Run(ConstraintConverterPass.Instance);
|
||||||
|
|
||||||
seq.Run("Prune empty animator layers",
|
seq.Run("Prune empty animator layers",
|
||||||
ctx => { ctx.Extension<AnimatorServicesContext>().RemoveEmptyLayers(); });
|
ctx => { ctx.Extension<AnimatorServicesContext>().RemoveEmptyLayers(); });
|
||||||
seq.Run("Harmonize animator parameter types",
|
seq.Run("Harmonize animator parameter types",
|
||||||
@ -116,13 +111,10 @@ namespace nadena.dev.modular_avatar.core.editor.plugin
|
|||||||
});
|
});
|
||||||
#if MA_VRCSDK3_AVATARS
|
#if MA_VRCSDK3_AVATARS
|
||||||
seq.Run(PhysbonesBlockerPluginPass.Instance);
|
seq.Run(PhysbonesBlockerPluginPass.Instance);
|
||||||
seq.OnPlatforms(new[] { WellKnownPlatforms.VRChatAvatar30 }, _seq =>
|
seq.Run("Fixup Expressions Menu", ctx =>
|
||||||
{
|
{
|
||||||
seq.Run("Fixup Expressions Menu", ctx =>
|
var maContext = ctx.Extension<ModularAvatarContext>().BuildContext;
|
||||||
{
|
FixupExpressionsMenuPass.FixupExpressionsMenu(maContext);
|
||||||
var maContext = ctx.Extension<ModularAvatarContext>().BuildContext;
|
|
||||||
FixupExpressionsMenuPass.FixupExpressionsMenu(maContext);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
seq.Run(SyncParameterSequencePass.Instance);
|
seq.Run(SyncParameterSequencePass.Instance);
|
||||||
#endif
|
#endif
|
||||||
@ -220,7 +212,6 @@ namespace nadena.dev.modular_avatar.core.editor.plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
|
||||||
class MergeAnimatorPluginPass : MAPass<MergeAnimatorPluginPass>
|
class MergeAnimatorPluginPass : MAPass<MergeAnimatorPluginPass>
|
||||||
{
|
{
|
||||||
protected override void Execute(ndmf.BuildContext context)
|
protected override void Execute(ndmf.BuildContext context)
|
||||||
@ -229,7 +220,6 @@ namespace nadena.dev.modular_avatar.core.editor.plugin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
|
||||||
class MenuInstallPluginPass : MAPass<MenuInstallPluginPass>
|
class MenuInstallPluginPass : MAPass<MenuInstallPluginPass>
|
||||||
{
|
{
|
||||||
protected override void Execute(ndmf.BuildContext context)
|
protected override void Execute(ndmf.BuildContext context)
|
||||||
@ -256,7 +246,6 @@ namespace nadena.dev.modular_avatar.core.editor.plugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if MA_VRCSDK3_AVATARS
|
#if MA_VRCSDK3_AVATARS
|
||||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
|
||||||
class VisibleHeadAccessoryPluginPass : MAPass<VisibleHeadAccessoryPluginPass>
|
class VisibleHeadAccessoryPluginPass : MAPass<VisibleHeadAccessoryPluginPass>
|
||||||
{
|
{
|
||||||
protected override void Execute(ndmf.BuildContext context)
|
protected override void Execute(ndmf.BuildContext context)
|
||||||
@ -275,7 +264,6 @@ namespace nadena.dev.modular_avatar.core.editor.plugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if MA_VRCSDK3_AVATARS
|
#if MA_VRCSDK3_AVATARS
|
||||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)] // TODO - support other platforms
|
|
||||||
class BlendshapeSyncAnimationPluginPass : MAPass<BlendshapeSyncAnimationPluginPass>
|
class BlendshapeSyncAnimationPluginPass : MAPass<BlendshapeSyncAnimationPluginPass>
|
||||||
{
|
{
|
||||||
protected override void Execute(ndmf.BuildContext context)
|
protected override void Execute(ndmf.BuildContext context)
|
||||||
|
@ -9,7 +9,6 @@ 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
|
/// 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.
|
/// layer reference correction logic; this can go away once we have a more unified animation services API.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
|
||||||
internal class ReactiveObjectPrepass : Pass<ReactiveObjectPrepass>
|
internal class ReactiveObjectPrepass : Pass<ReactiveObjectPrepass>
|
||||||
{
|
{
|
||||||
internal const string TAG_PATH = "__MA/ShapeChanger/PrepassPlaceholder";
|
internal const string TAG_PATH = "__MA/ShapeChanger/PrepassPlaceholder";
|
||||||
|
@ -12,7 +12,6 @@ using Object = UnityEngine.Object;
|
|||||||
|
|
||||||
namespace nadena.dev.modular_avatar.core.editor
|
namespace nadena.dev.modular_avatar.core.editor
|
||||||
{
|
{
|
||||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
|
||||||
public class SyncParameterSequencePass : Pass<SyncParameterSequencePass>
|
public class SyncParameterSequencePass : Pass<SyncParameterSequencePass>
|
||||||
{
|
{
|
||||||
private static Platform? CurrentPlatform
|
private static Platform? CurrentPlatform
|
||||||
|
@ -4,7 +4,6 @@ using nadena.dev.ndmf;
|
|||||||
|
|
||||||
namespace nadena.dev.modular_avatar.core.editor
|
namespace nadena.dev.modular_avatar.core.editor
|
||||||
{
|
{
|
||||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
|
||||||
internal class VRChatSettingsPass : Pass<VRChatSettingsPass>
|
internal class VRChatSettingsPass : Pass<VRChatSettingsPass>
|
||||||
{
|
{
|
||||||
protected override void Execute(ndmf.BuildContext context)
|
protected override void Execute(ndmf.BuildContext context)
|
||||||
|
@ -12,7 +12,6 @@ using UnityEngine.Animations;
|
|||||||
|
|
||||||
namespace nadena.dev.modular_avatar.core.editor
|
namespace nadena.dev.modular_avatar.core.editor
|
||||||
{
|
{
|
||||||
[RunsOnPlatforms(WellKnownPlatforms.VRChatAvatar30)]
|
|
||||||
internal class WorldScaleObjectPass : Pass<WorldScaleObjectPass>
|
internal class WorldScaleObjectPass : Pass<WorldScaleObjectPass>
|
||||||
{
|
{
|
||||||
protected override void Execute(ndmf.BuildContext context)
|
protected override void Execute(ndmf.BuildContext context)
|
||||||
|
@ -59,8 +59,6 @@ namespace nadena.dev.modular_avatar.core
|
|||||||
public int layerPriority = 0;
|
public int layerPriority = 0;
|
||||||
public MergeAnimatorMode mergeAnimatorMode = MergeAnimatorMode.Append;
|
public MergeAnimatorMode mergeAnimatorMode = MergeAnimatorMode.Append;
|
||||||
|
|
||||||
internal bool _wasRelative;
|
|
||||||
|
|
||||||
public override void ResolveReferences()
|
public override void ResolveReferences()
|
||||||
{
|
{
|
||||||
// no-op
|
// no-op
|
||||||
@ -90,11 +88,7 @@ namespace nadena.dev.modular_avatar.core
|
|||||||
string IVirtualizeAnimatorController.GetMotionBasePath(object ndmfBuildContext, bool clearPath)
|
string IVirtualizeAnimatorController.GetMotionBasePath(object ndmfBuildContext, bool clearPath)
|
||||||
{
|
{
|
||||||
var path = GetMotionBasePathCallback(this, ndmfBuildContext);
|
var path = GetMotionBasePathCallback(this, ndmfBuildContext);
|
||||||
if (clearPath)
|
if (clearPath) pathMode = MergeAnimatorPathMode.Absolute;
|
||||||
{
|
|
||||||
_wasRelative = _wasRelative || pathMode == MergeAnimatorPathMode.Relative;
|
|
||||||
pathMode = MergeAnimatorPathMode.Absolute;
|
|
||||||
}
|
|
||||||
|
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
@ -1,103 +0,0 @@
|
|||||||
%YAML 1.1
|
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
|
||||||
--- !u!1107 &-6982002469074649382
|
|
||||||
AnimatorStateMachine:
|
|
||||||
serializedVersion: 6
|
|
||||||
m_ObjectHideFlags: 1
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_Name: absolute
|
|
||||||
m_ChildStates:
|
|
||||||
- serializedVersion: 1
|
|
||||||
m_State: {fileID: 5394444500086494115}
|
|
||||||
m_Position: {x: 330, y: 60, z: 0}
|
|
||||||
m_ChildStateMachines: []
|
|
||||||
m_AnyStateTransitions: []
|
|
||||||
m_EntryTransitions: []
|
|
||||||
m_StateMachineTransitions: {}
|
|
||||||
m_StateMachineBehaviours: []
|
|
||||||
m_AnyStatePosition: {x: 50, y: 20, z: 0}
|
|
||||||
m_EntryPosition: {x: 50, y: 120, z: 0}
|
|
||||||
m_ExitPosition: {x: 800, y: 120, z: 0}
|
|
||||||
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
|
|
||||||
m_DefaultState: {fileID: 5394444500086494115}
|
|
||||||
--- !u!91 &9100000
|
|
||||||
AnimatorController:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_Name: AbsoluteReference
|
|
||||||
serializedVersion: 5
|
|
||||||
m_AnimatorParameters: []
|
|
||||||
m_AnimatorLayers:
|
|
||||||
- serializedVersion: 5
|
|
||||||
m_Name: absolute
|
|
||||||
m_StateMachine: {fileID: -6982002469074649382}
|
|
||||||
m_Mask: {fileID: 0}
|
|
||||||
m_Motions: []
|
|
||||||
m_Behaviours: []
|
|
||||||
m_BlendingMode: 0
|
|
||||||
m_SyncedLayerIndex: -1
|
|
||||||
m_DefaultWeight: 0
|
|
||||||
m_IKPass: 0
|
|
||||||
m_SyncedLayerAffectsTiming: 0
|
|
||||||
m_Controller: {fileID: 9100000}
|
|
||||||
--- !u!114 &2414404072947734855
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 1
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 0}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 1859411423, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
Source: {fileID: 0}
|
|
||||||
SourcePath: Bone Proxy/Audio Source
|
|
||||||
PlaybackOrder: 0
|
|
||||||
ParameterName:
|
|
||||||
Volume: {x: 1, y: 1}
|
|
||||||
VolumeApplySettings: 1
|
|
||||||
Pitch: {x: 1, y: 1}
|
|
||||||
PitchApplySettings: 1
|
|
||||||
Clips: []
|
|
||||||
ClipsApplySettings: 1
|
|
||||||
Loop: 0
|
|
||||||
LoopApplySettings: 1
|
|
||||||
DelayInSeconds: 0
|
|
||||||
PlayOnEnter: 1
|
|
||||||
StopOnEnter: 1
|
|
||||||
PlayOnExit: 0
|
|
||||||
StopOnExit: 0
|
|
||||||
playbackIndex: 0
|
|
||||||
--- !u!1102 &5394444500086494115
|
|
||||||
AnimatorState:
|
|
||||||
serializedVersion: 6
|
|
||||||
m_ObjectHideFlags: 1
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_Name: New State
|
|
||||||
m_Speed: 1
|
|
||||||
m_CycleOffset: 0
|
|
||||||
m_Transitions: []
|
|
||||||
m_StateMachineBehaviours:
|
|
||||||
- {fileID: 2414404072947734855}
|
|
||||||
m_Position: {x: 50, y: 50, z: 0}
|
|
||||||
m_IKOnFeet: 0
|
|
||||||
m_WriteDefaultValues: 1
|
|
||||||
m_Mirror: 0
|
|
||||||
m_SpeedParameterActive: 0
|
|
||||||
m_MirrorParameterActive: 0
|
|
||||||
m_CycleOffsetParameterActive: 0
|
|
||||||
m_TimeParameterActive: 0
|
|
||||||
m_Motion: {fileID: 0}
|
|
||||||
m_Tag:
|
|
||||||
m_SpeedParameter:
|
|
||||||
m_MirrorParameter:
|
|
||||||
m_CycleOffsetParameter:
|
|
||||||
m_TimeParameter:
|
|
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 025d88351bb99eb4f8b38dbe071eaf2a
|
|
||||||
NativeFormatImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
mainObjectFileID: 9100000
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
@ -26,11 +26,6 @@ namespace modular_avatar_tests
|
|||||||
var subState = layer.stateMachine.stateMachines[0].stateMachine.states[0].state;
|
var subState = layer.stateMachine.stateMachines[0].stateMachine.states[0].state;
|
||||||
var playAudio2 = (VRCAnimatorPlayAudio) subState.behaviours[0];
|
var playAudio2 = (VRCAnimatorPlayAudio) subState.behaviours[0];
|
||||||
Assert.AreEqual("New Parent/Bone Proxy/Audio Source", playAudio2.SourcePath);
|
Assert.AreEqual("New Parent/Bone Proxy/Audio Source", playAudio2.SourcePath);
|
||||||
|
|
||||||
var absLayer = findFxLayer(prefab, "absolute");
|
|
||||||
state = absLayer.stateMachine.states[0].state;
|
|
||||||
playAudio = (VRCAnimatorPlayAudio) state.behaviours[0];
|
|
||||||
Assert.AreEqual("New Parent/Bone Proxy/Audio Source", playAudio.SourcePath);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -335,7 +335,6 @@ GameObject:
|
|||||||
m_Component:
|
m_Component:
|
||||||
- component: {fileID: 2374223349072045661}
|
- component: {fileID: 2374223349072045661}
|
||||||
- component: {fileID: 2173147159387031478}
|
- component: {fileID: 2173147159387031478}
|
||||||
- component: {fileID: 4651177154340700720}
|
|
||||||
m_Layer: 0
|
m_Layer: 0
|
||||||
m_Name: Bone Proxy
|
m_Name: Bone Proxy
|
||||||
m_TagString: Untagged
|
m_TagString: Untagged
|
||||||
@ -374,28 +373,6 @@ MonoBehaviour:
|
|||||||
boneReference: 55
|
boneReference: 55
|
||||||
subPath: New Parent
|
subPath: New Parent
|
||||||
attachmentMode: 1
|
attachmentMode: 1
|
||||||
--- !u!114 &4651177154340700720
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 6739982813768973813}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 1bb122659f724ebf85fe095ac02dc339, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
animator: {fileID: 9100000, guid: 025d88351bb99eb4f8b38dbe071eaf2a, type: 2}
|
|
||||||
layerType: 5
|
|
||||||
deleteAttachedAnimator: 1
|
|
||||||
pathMode: 0
|
|
||||||
matchAvatarWriteDefaults: 0
|
|
||||||
relativePathRoot:
|
|
||||||
referencePath:
|
|
||||||
targetObject: {fileID: 0}
|
|
||||||
layerPriority: 0
|
|
||||||
mergeAnimatorMode: 0
|
|
||||||
--- !u!1 &7552762365415873619
|
--- !u!1 &7552762365415873619
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
#if MA_VRCSDK3_AVATARS
|
#if MA_VRCSDK3_AVATARS
|
||||||
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using modular_avatar_tests;
|
using modular_avatar_tests;
|
||||||
using nadena.dev.modular_avatar.animation;
|
using nadena.dev.modular_avatar.animation;
|
||||||
using nadena.dev.modular_avatar.core;
|
using nadena.dev.modular_avatar.core;
|
||||||
@ -10,11 +7,9 @@ using nadena.dev.modular_avatar.core.editor;
|
|||||||
using nadena.dev.ndmf;
|
using nadena.dev.ndmf;
|
||||||
using nadena.dev.ndmf.animator;
|
using nadena.dev.ndmf.animator;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using UnityEditor;
|
|
||||||
using UnityEditor.Animations;
|
using UnityEditor.Animations;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
using VRC.SDK3.Avatars.Components;
|
using VRC.SDK3.Avatars.Components;
|
||||||
using AvatarProcessor = nadena.dev.ndmf.AvatarProcessor;
|
|
||||||
using BuildContext = nadena.dev.ndmf.BuildContext;
|
using BuildContext = nadena.dev.ndmf.BuildContext;
|
||||||
|
|
||||||
namespace UnitTests.MergeAnimatorTests
|
namespace UnitTests.MergeAnimatorTests
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
using System.Collections.Generic;
|
using System.Linq;
|
||||||
using System.Linq;
|
|
||||||
using modular_avatar_tests;
|
using modular_avatar_tests;
|
||||||
using nadena.dev.modular_avatar.core.editor;
|
using nadena.dev.modular_avatar.core.editor;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
@ -8,8 +7,6 @@ using UnityEngine;
|
|||||||
using ModularAvatarMergeArmature = nadena.dev.modular_avatar.core.ModularAvatarMergeArmature;
|
using ModularAvatarMergeArmature = nadena.dev.modular_avatar.core.ModularAvatarMergeArmature;
|
||||||
|
|
||||||
#if MA_VRCSDK3_AVATARS
|
#if MA_VRCSDK3_AVATARS
|
||||||
using System;
|
|
||||||
using nadena.dev.modular_avatar.core;
|
|
||||||
using VRC.SDK3.Avatars.Components;
|
using VRC.SDK3.Avatars.Components;
|
||||||
using VRC.SDK3.Dynamics.PhysBone.Components;
|
using VRC.SDK3.Dynamics.PhysBone.Components;
|
||||||
#endif
|
#endif
|
||||||
@ -103,36 +100,6 @@ public class MergeArmatureTests : TestBase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
|
||||||
public void RetainsTransformLookthroughTest()
|
|
||||||
{
|
|
||||||
var root = CreatePrefab("TransformLookthrough/RetainsTransformLookthroughCurves.prefab");
|
|
||||||
|
|
||||||
AvatarProcessor.ProcessAvatar(root);
|
|
||||||
|
|
||||||
var testLayer = findFxLayer(root, "test");
|
|
||||||
var motion = (AnimationClip)testLayer.stateMachine.defaultState.motion;
|
|
||||||
|
|
||||||
var subArmature = root.transform.GetChild(0).GetChild(0).GetChild(0);
|
|
||||||
var armaturePath = RuntimeUtil.AvatarRootPath(subArmature.gameObject);
|
|
||||||
var hipsPath = "Armature/Hips";
|
|
||||||
|
|
||||||
var curves = AnimationUtility.GetCurveBindings(motion)
|
|
||||||
.Select(ecb => (ecb.path, ecb.type, ecb.propertyName))
|
|
||||||
.ToHashSet();
|
|
||||||
var expectedCurves = new HashSet<(string, Type, string)>()
|
|
||||||
{
|
|
||||||
(armaturePath, typeof(GameObject), "m_IsActive"),
|
|
||||||
(hipsPath, typeof(Transform), "m_LocalScale.x"),
|
|
||||||
(hipsPath, typeof(Transform), "m_LocalScale.y"),
|
|
||||||
(hipsPath, typeof(Transform), "m_LocalScale.z"),
|
|
||||||
// It's not clear if we should be animating the root Armature object here, but this matches the pre-1.12
|
|
||||||
// behavior and is therefore probably best from a compatibility perspective
|
|
||||||
("Armature", typeof(GameObject), "m_IsActive")
|
|
||||||
};
|
|
||||||
|
|
||||||
Assert.That(expectedCurves, Is.EquivalentTo(curves));
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
private static GameObject LoadShapell()
|
private static GameObject LoadShapell()
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: faccb10b1d8ed17468b90c521387216e
|
|
||||||
folderAsset: yes
|
|
||||||
DefaultImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
@ -1,613 +0,0 @@
|
|||||||
%YAML 1.1
|
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
|
||||||
--- !u!1 &1843281456015346592
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 6463641812474994547}
|
|
||||||
m_Layer: 0
|
|
||||||
m_Name: Hips
|
|
||||||
m_TagString: Untagged
|
|
||||||
m_Icon: {fileID: 0}
|
|
||||||
m_NavMeshLayer: 0
|
|
||||||
m_StaticEditorFlags: 0
|
|
||||||
m_IsActive: 1
|
|
||||||
--- !u!4 &6463641812474994547
|
|
||||||
Transform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 1843281456015346592}
|
|
||||||
serializedVersion: 2
|
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
|
||||||
m_ConstrainProportionsScale: 0
|
|
||||||
m_Children: []
|
|
||||||
m_Father: {fileID: 3374381971321939395}
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
|
||||||
--- !u!1 &3758816284294005516
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 1946172178019366251}
|
|
||||||
- component: {fileID: 2719738530465120336}
|
|
||||||
m_Layer: 0
|
|
||||||
m_Name: Hips
|
|
||||||
m_TagString: Untagged
|
|
||||||
m_Icon: {fileID: 0}
|
|
||||||
m_NavMeshLayer: 0
|
|
||||||
m_StaticEditorFlags: 0
|
|
||||||
m_IsActive: 1
|
|
||||||
--- !u!4 &1946172178019366251
|
|
||||||
Transform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 3758816284294005516}
|
|
||||||
serializedVersion: 2
|
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
|
||||||
m_ConstrainProportionsScale: 0
|
|
||||||
m_Children: []
|
|
||||||
m_Father: {fileID: 8614448739494005333}
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
|
||||||
--- !u!108 &2719738530465120336
|
|
||||||
Light:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 3758816284294005516}
|
|
||||||
m_Enabled: 1
|
|
||||||
serializedVersion: 10
|
|
||||||
m_Type: 2
|
|
||||||
m_Shape: 0
|
|
||||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
|
||||||
m_Intensity: 1
|
|
||||||
m_Range: 10
|
|
||||||
m_SpotAngle: 30
|
|
||||||
m_InnerSpotAngle: 21.80208
|
|
||||||
m_CookieSize: 10
|
|
||||||
m_Shadows:
|
|
||||||
m_Type: 0
|
|
||||||
m_Resolution: -1
|
|
||||||
m_CustomResolution: -1
|
|
||||||
m_Strength: 1
|
|
||||||
m_Bias: 0.05
|
|
||||||
m_NormalBias: 0.4
|
|
||||||
m_NearPlane: 0.2
|
|
||||||
m_CullingMatrixOverride:
|
|
||||||
e00: 1
|
|
||||||
e01: 0
|
|
||||||
e02: 0
|
|
||||||
e03: 0
|
|
||||||
e10: 0
|
|
||||||
e11: 1
|
|
||||||
e12: 0
|
|
||||||
e13: 0
|
|
||||||
e20: 0
|
|
||||||
e21: 0
|
|
||||||
e22: 1
|
|
||||||
e23: 0
|
|
||||||
e30: 0
|
|
||||||
e31: 0
|
|
||||||
e32: 0
|
|
||||||
e33: 1
|
|
||||||
m_UseCullingMatrixOverride: 0
|
|
||||||
m_Cookie: {fileID: 0}
|
|
||||||
m_DrawHalo: 0
|
|
||||||
m_Flare: {fileID: 0}
|
|
||||||
m_RenderMode: 0
|
|
||||||
m_CullingMask:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Bits: 4294967295
|
|
||||||
m_RenderingLayerMask: 1
|
|
||||||
m_Lightmapping: 4
|
|
||||||
m_LightShadowCasterMode: 0
|
|
||||||
m_AreaSize: {x: 1, y: 1}
|
|
||||||
m_BounceIntensity: 1
|
|
||||||
m_ColorTemperature: 6570
|
|
||||||
m_UseColorTemperature: 0
|
|
||||||
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
m_UseBoundingSphereOverride: 0
|
|
||||||
m_UseViewFrustumForShadowCasterCull: 1
|
|
||||||
m_ShadowRadius: 0
|
|
||||||
m_ShadowAngle: 0
|
|
||||||
--- !u!1 &4031479947288985074
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 4831129360975791387}
|
|
||||||
- component: {fileID: 1311080927487844401}
|
|
||||||
- component: {fileID: 2689763916510653291}
|
|
||||||
m_Layer: 0
|
|
||||||
m_Name: Merge
|
|
||||||
m_TagString: Untagged
|
|
||||||
m_Icon: {fileID: 0}
|
|
||||||
m_NavMeshLayer: 0
|
|
||||||
m_StaticEditorFlags: 0
|
|
||||||
m_IsActive: 1
|
|
||||||
--- !u!4 &4831129360975791387
|
|
||||||
Transform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 4031479947288985074}
|
|
||||||
serializedVersion: 2
|
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
|
||||||
m_ConstrainProportionsScale: 0
|
|
||||||
m_Children:
|
|
||||||
- {fileID: 8614448739494005333}
|
|
||||||
m_Father: {fileID: 7077471747533883274}
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
|
||||||
--- !u!114 &1311080927487844401
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 4031479947288985074}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 1bb122659f724ebf85fe095ac02dc339, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
animator: {fileID: 9100000, guid: 19d8bfd755e0f6b4581b4da4cfd2cc70, type: 2}
|
|
||||||
layerType: 5
|
|
||||||
deleteAttachedAnimator: 1
|
|
||||||
pathMode: 0
|
|
||||||
matchAvatarWriteDefaults: 0
|
|
||||||
relativePathRoot:
|
|
||||||
referencePath:
|
|
||||||
targetObject: {fileID: 0}
|
|
||||||
layerPriority: 0
|
|
||||||
mergeAnimatorMode: 0
|
|
||||||
--- !u!95 &2689763916510653291
|
|
||||||
Animator:
|
|
||||||
serializedVersion: 5
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 4031479947288985074}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_Avatar: {fileID: 0}
|
|
||||||
m_Controller: {fileID: 9100000, guid: 19d8bfd755e0f6b4581b4da4cfd2cc70, type: 2}
|
|
||||||
m_CullingMode: 0
|
|
||||||
m_UpdateMode: 0
|
|
||||||
m_ApplyRootMotion: 0
|
|
||||||
m_LinearVelocityBlending: 0
|
|
||||||
m_StabilizeFeet: 0
|
|
||||||
m_WarningMessage:
|
|
||||||
m_HasTransformHierarchy: 1
|
|
||||||
m_AllowConstantClipSamplingOptimization: 1
|
|
||||||
m_KeepAnimatorStateOnDisable: 0
|
|
||||||
m_WriteDefaultValuesOnDisable: 0
|
|
||||||
--- !u!1 &7548675428724350735
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 8614448739494005333}
|
|
||||||
- component: {fileID: 5161307179301238676}
|
|
||||||
m_Layer: 0
|
|
||||||
m_Name: Armature.1
|
|
||||||
m_TagString: Untagged
|
|
||||||
m_Icon: {fileID: 0}
|
|
||||||
m_NavMeshLayer: 0
|
|
||||||
m_StaticEditorFlags: 0
|
|
||||||
m_IsActive: 1
|
|
||||||
--- !u!4 &8614448739494005333
|
|
||||||
Transform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 7548675428724350735}
|
|
||||||
serializedVersion: 2
|
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
|
||||||
m_ConstrainProportionsScale: 0
|
|
||||||
m_Children:
|
|
||||||
- {fileID: 1946172178019366251}
|
|
||||||
m_Father: {fileID: 4831129360975791387}
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
|
||||||
--- !u!114 &5161307179301238676
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 7548675428724350735}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 11500000, guid: 2df373bf91cf30b4bbd495e11cb1a2ec, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
mergeTarget:
|
|
||||||
referencePath: Armature
|
|
||||||
targetObject: {fileID: 8076956779391437068}
|
|
||||||
prefix:
|
|
||||||
suffix:
|
|
||||||
legacyLocked: 0
|
|
||||||
LockMode: 2
|
|
||||||
mangleNames: 1
|
|
||||||
--- !u!1 &8076956779391437068
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 3374381971321939395}
|
|
||||||
m_Layer: 0
|
|
||||||
m_Name: Armature
|
|
||||||
m_TagString: Untagged
|
|
||||||
m_Icon: {fileID: 0}
|
|
||||||
m_NavMeshLayer: 0
|
|
||||||
m_StaticEditorFlags: 0
|
|
||||||
m_IsActive: 1
|
|
||||||
--- !u!4 &3374381971321939395
|
|
||||||
Transform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 8076956779391437068}
|
|
||||||
serializedVersion: 2
|
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
|
||||||
m_ConstrainProportionsScale: 0
|
|
||||||
m_Children:
|
|
||||||
- {fileID: 6463641812474994547}
|
|
||||||
m_Father: {fileID: 7077471747533883274}
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
|
||||||
--- !u!1 &9053292826705437702
|
|
||||||
GameObject:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
serializedVersion: 6
|
|
||||||
m_Component:
|
|
||||||
- component: {fileID: 7077471747533883274}
|
|
||||||
- component: {fileID: 635084532505951628}
|
|
||||||
- component: {fileID: 6421879640933021628}
|
|
||||||
- component: {fileID: 5677554079973629394}
|
|
||||||
m_Layer: 0
|
|
||||||
m_Name: RetainsTransformLookthroughCurves
|
|
||||||
m_TagString: Untagged
|
|
||||||
m_Icon: {fileID: 0}
|
|
||||||
m_NavMeshLayer: 0
|
|
||||||
m_StaticEditorFlags: 0
|
|
||||||
m_IsActive: 1
|
|
||||||
--- !u!4 &7077471747533883274
|
|
||||||
Transform:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 9053292826705437702}
|
|
||||||
serializedVersion: 2
|
|
||||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
m_LocalPosition: {x: -0.12184324, y: 0.7495848, z: -0.22149613}
|
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
|
||||||
m_ConstrainProportionsScale: 0
|
|
||||||
m_Children:
|
|
||||||
- {fileID: 3374381971321939395}
|
|
||||||
- {fileID: 4831129360975791387}
|
|
||||||
m_Father: {fileID: 0}
|
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
|
||||||
--- !u!95 &635084532505951628
|
|
||||||
Animator:
|
|
||||||
serializedVersion: 5
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 9053292826705437702}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_Avatar: {fileID: 0}
|
|
||||||
m_Controller: {fileID: 0}
|
|
||||||
m_CullingMode: 0
|
|
||||||
m_UpdateMode: 0
|
|
||||||
m_ApplyRootMotion: 0
|
|
||||||
m_LinearVelocityBlending: 0
|
|
||||||
m_StabilizeFeet: 0
|
|
||||||
m_WarningMessage:
|
|
||||||
m_HasTransformHierarchy: 1
|
|
||||||
m_AllowConstantClipSamplingOptimization: 1
|
|
||||||
m_KeepAnimatorStateOnDisable: 0
|
|
||||||
m_WriteDefaultValuesOnDisable: 0
|
|
||||||
--- !u!114 &6421879640933021628
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 9053292826705437702}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: 542108242, guid: 67cc4cb7839cd3741b63733d5adf0442, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
Name:
|
|
||||||
ViewPosition: {x: 0, y: 1.6, z: 0.2}
|
|
||||||
Animations: 0
|
|
||||||
ScaleIPD: 1
|
|
||||||
lipSync: 0
|
|
||||||
lipSyncJawBone: {fileID: 0}
|
|
||||||
lipSyncJawClosed: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
lipSyncJawOpen: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
VisemeSkinnedMesh: {fileID: 0}
|
|
||||||
MouthOpenBlendShapeName: Facial_Blends.Jaw_Down
|
|
||||||
VisemeBlendShapes: []
|
|
||||||
unityVersion:
|
|
||||||
portraitCameraPositionOffset: {x: 0, y: 0, z: 0}
|
|
||||||
portraitCameraRotationOffset: {x: 0, y: 1, z: 0, w: -0.00000004371139}
|
|
||||||
networkIDs: []
|
|
||||||
customExpressions: 0
|
|
||||||
expressionsMenu: {fileID: 0}
|
|
||||||
expressionParameters: {fileID: 0}
|
|
||||||
enableEyeLook: 0
|
|
||||||
customEyeLookSettings:
|
|
||||||
eyeMovement:
|
|
||||||
confidence: 0.5
|
|
||||||
excitement: 0.5
|
|
||||||
leftEye: {fileID: 0}
|
|
||||||
rightEye: {fileID: 0}
|
|
||||||
eyesLookingStraight:
|
|
||||||
linked: 1
|
|
||||||
left: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
right: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
eyesLookingUp:
|
|
||||||
linked: 1
|
|
||||||
left: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
right: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
eyesLookingDown:
|
|
||||||
linked: 1
|
|
||||||
left: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
right: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
eyesLookingLeft:
|
|
||||||
linked: 1
|
|
||||||
left: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
right: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
eyesLookingRight:
|
|
||||||
linked: 1
|
|
||||||
left: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
right: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
eyelidType: 0
|
|
||||||
upperLeftEyelid: {fileID: 0}
|
|
||||||
upperRightEyelid: {fileID: 0}
|
|
||||||
lowerLeftEyelid: {fileID: 0}
|
|
||||||
lowerRightEyelid: {fileID: 0}
|
|
||||||
eyelidsDefault:
|
|
||||||
upper:
|
|
||||||
linked: 1
|
|
||||||
left: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
right: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
lower:
|
|
||||||
linked: 1
|
|
||||||
left: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
right: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
eyelidsClosed:
|
|
||||||
upper:
|
|
||||||
linked: 1
|
|
||||||
left: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
right: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
lower:
|
|
||||||
linked: 1
|
|
||||||
left: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
right: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
eyelidsLookingUp:
|
|
||||||
upper:
|
|
||||||
linked: 1
|
|
||||||
left: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
right: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
lower:
|
|
||||||
linked: 1
|
|
||||||
left: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
right: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
eyelidsLookingDown:
|
|
||||||
upper:
|
|
||||||
linked: 1
|
|
||||||
left: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
right: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
lower:
|
|
||||||
linked: 1
|
|
||||||
left: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
right: {x: 0, y: 0, z: 0, w: 0}
|
|
||||||
eyelidsSkinnedMesh: {fileID: 0}
|
|
||||||
eyelidsBlendshapes:
|
|
||||||
customizeAnimationLayers: 0
|
|
||||||
baseAnimationLayers:
|
|
||||||
- isEnabled: 0
|
|
||||||
type: 0
|
|
||||||
animatorController: {fileID: 0}
|
|
||||||
mask: {fileID: 0}
|
|
||||||
isDefault: 1
|
|
||||||
- isEnabled: 0
|
|
||||||
type: 4
|
|
||||||
animatorController: {fileID: 0}
|
|
||||||
mask: {fileID: 0}
|
|
||||||
isDefault: 1
|
|
||||||
- isEnabled: 0
|
|
||||||
type: 5
|
|
||||||
animatorController: {fileID: 0}
|
|
||||||
mask: {fileID: 0}
|
|
||||||
isDefault: 1
|
|
||||||
specialAnimationLayers:
|
|
||||||
- isEnabled: 0
|
|
||||||
type: 6
|
|
||||||
animatorController: {fileID: 0}
|
|
||||||
mask: {fileID: 0}
|
|
||||||
isDefault: 1
|
|
||||||
- isEnabled: 0
|
|
||||||
type: 7
|
|
||||||
animatorController: {fileID: 0}
|
|
||||||
mask: {fileID: 0}
|
|
||||||
isDefault: 1
|
|
||||||
- isEnabled: 0
|
|
||||||
type: 8
|
|
||||||
animatorController: {fileID: 0}
|
|
||||||
mask: {fileID: 0}
|
|
||||||
isDefault: 1
|
|
||||||
AnimationPreset: {fileID: 0}
|
|
||||||
animationHashSet: []
|
|
||||||
autoFootsteps: 1
|
|
||||||
autoLocomotion: 1
|
|
||||||
collider_head:
|
|
||||||
isMirrored: 1
|
|
||||||
state: 0
|
|
||||||
transform: {fileID: 0}
|
|
||||||
radius: 0
|
|
||||||
height: 0
|
|
||||||
position: {x: 0, y: 0, z: 0}
|
|
||||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
collider_torso:
|
|
||||||
isMirrored: 1
|
|
||||||
state: 0
|
|
||||||
transform: {fileID: 0}
|
|
||||||
radius: 0
|
|
||||||
height: 0
|
|
||||||
position: {x: 0, y: 0, z: 0}
|
|
||||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
collider_footR:
|
|
||||||
isMirrored: 1
|
|
||||||
state: 0
|
|
||||||
transform: {fileID: 0}
|
|
||||||
radius: 0
|
|
||||||
height: 0
|
|
||||||
position: {x: 0, y: 0, z: 0}
|
|
||||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
collider_footL:
|
|
||||||
isMirrored: 1
|
|
||||||
state: 0
|
|
||||||
transform: {fileID: 0}
|
|
||||||
radius: 0
|
|
||||||
height: 0
|
|
||||||
position: {x: 0, y: 0, z: 0}
|
|
||||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
collider_handR:
|
|
||||||
isMirrored: 1
|
|
||||||
state: 0
|
|
||||||
transform: {fileID: 0}
|
|
||||||
radius: 0
|
|
||||||
height: 0
|
|
||||||
position: {x: 0, y: 0, z: 0}
|
|
||||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
collider_handL:
|
|
||||||
isMirrored: 1
|
|
||||||
state: 0
|
|
||||||
transform: {fileID: 0}
|
|
||||||
radius: 0
|
|
||||||
height: 0
|
|
||||||
position: {x: 0, y: 0, z: 0}
|
|
||||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
collider_fingerIndexL:
|
|
||||||
isMirrored: 1
|
|
||||||
state: 0
|
|
||||||
transform: {fileID: 0}
|
|
||||||
radius: 0
|
|
||||||
height: 0
|
|
||||||
position: {x: 0, y: 0, z: 0}
|
|
||||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
collider_fingerMiddleL:
|
|
||||||
isMirrored: 1
|
|
||||||
state: 0
|
|
||||||
transform: {fileID: 0}
|
|
||||||
radius: 0
|
|
||||||
height: 0
|
|
||||||
position: {x: 0, y: 0, z: 0}
|
|
||||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
collider_fingerRingL:
|
|
||||||
isMirrored: 1
|
|
||||||
state: 0
|
|
||||||
transform: {fileID: 0}
|
|
||||||
radius: 0
|
|
||||||
height: 0
|
|
||||||
position: {x: 0, y: 0, z: 0}
|
|
||||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
collider_fingerLittleL:
|
|
||||||
isMirrored: 1
|
|
||||||
state: 0
|
|
||||||
transform: {fileID: 0}
|
|
||||||
radius: 0
|
|
||||||
height: 0
|
|
||||||
position: {x: 0, y: 0, z: 0}
|
|
||||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
collider_fingerIndexR:
|
|
||||||
isMirrored: 1
|
|
||||||
state: 0
|
|
||||||
transform: {fileID: 0}
|
|
||||||
radius: 0
|
|
||||||
height: 0
|
|
||||||
position: {x: 0, y: 0, z: 0}
|
|
||||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
collider_fingerMiddleR:
|
|
||||||
isMirrored: 1
|
|
||||||
state: 0
|
|
||||||
transform: {fileID: 0}
|
|
||||||
radius: 0
|
|
||||||
height: 0
|
|
||||||
position: {x: 0, y: 0, z: 0}
|
|
||||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
collider_fingerRingR:
|
|
||||||
isMirrored: 1
|
|
||||||
state: 0
|
|
||||||
transform: {fileID: 0}
|
|
||||||
radius: 0
|
|
||||||
height: 0
|
|
||||||
position: {x: 0, y: 0, z: 0}
|
|
||||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
collider_fingerLittleR:
|
|
||||||
isMirrored: 1
|
|
||||||
state: 0
|
|
||||||
transform: {fileID: 0}
|
|
||||||
radius: 0
|
|
||||||
height: 0
|
|
||||||
position: {x: 0, y: 0, z: 0}
|
|
||||||
rotation: {x: 0, y: 0, z: 0, w: 1}
|
|
||||||
--- !u!114 &5677554079973629394
|
|
||||||
MonoBehaviour:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_GameObject: {fileID: 9053292826705437702}
|
|
||||||
m_Enabled: 1
|
|
||||||
m_EditorHideFlags: 0
|
|
||||||
m_Script: {fileID: -1427037861, guid: 4ecd63eff847044b68db9453ce219299, type: 3}
|
|
||||||
m_Name:
|
|
||||||
m_EditorClassIdentifier:
|
|
||||||
launchedFromSDKPipeline: 0
|
|
||||||
completedSDKPipeline: 0
|
|
||||||
blueprintId:
|
|
||||||
contentType: 0
|
|
||||||
assetBundleUnityVersion:
|
|
||||||
fallbackStatus: 0
|
|
@ -1,7 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 5d7fbba0f7a314c4ba0cb0dcd455dd5b
|
|
||||||
PrefabImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
@ -1,72 +0,0 @@
|
|||||||
%YAML 1.1
|
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
|
||||||
--- !u!1102 &-1268133539673746559
|
|
||||||
AnimatorState:
|
|
||||||
serializedVersion: 6
|
|
||||||
m_ObjectHideFlags: 1
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_Name: test
|
|
||||||
m_Speed: 1
|
|
||||||
m_CycleOffset: 0
|
|
||||||
m_Transitions: []
|
|
||||||
m_StateMachineBehaviours: []
|
|
||||||
m_Position: {x: 50, y: 50, z: 0}
|
|
||||||
m_IKOnFeet: 0
|
|
||||||
m_WriteDefaultValues: 1
|
|
||||||
m_Mirror: 0
|
|
||||||
m_SpeedParameterActive: 0
|
|
||||||
m_MirrorParameterActive: 0
|
|
||||||
m_CycleOffsetParameterActive: 0
|
|
||||||
m_TimeParameterActive: 0
|
|
||||||
m_Motion: {fileID: 7400000, guid: 72c58dde7ac8c6741b333a51e1aff2c4, type: 2}
|
|
||||||
m_Tag:
|
|
||||||
m_SpeedParameter:
|
|
||||||
m_MirrorParameter:
|
|
||||||
m_CycleOffsetParameter:
|
|
||||||
m_TimeParameter:
|
|
||||||
--- !u!91 &9100000
|
|
||||||
AnimatorController:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_Name: ac
|
|
||||||
serializedVersion: 5
|
|
||||||
m_AnimatorParameters: []
|
|
||||||
m_AnimatorLayers:
|
|
||||||
- serializedVersion: 5
|
|
||||||
m_Name: test
|
|
||||||
m_StateMachine: {fileID: 5303123724936942604}
|
|
||||||
m_Mask: {fileID: 0}
|
|
||||||
m_Motions: []
|
|
||||||
m_Behaviours: []
|
|
||||||
m_BlendingMode: 0
|
|
||||||
m_SyncedLayerIndex: -1
|
|
||||||
m_DefaultWeight: 0
|
|
||||||
m_IKPass: 0
|
|
||||||
m_SyncedLayerAffectsTiming: 0
|
|
||||||
m_Controller: {fileID: 9100000}
|
|
||||||
--- !u!1107 &5303123724936942604
|
|
||||||
AnimatorStateMachine:
|
|
||||||
serializedVersion: 6
|
|
||||||
m_ObjectHideFlags: 1
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_Name: test
|
|
||||||
m_ChildStates:
|
|
||||||
- serializedVersion: 1
|
|
||||||
m_State: {fileID: -1268133539673746559}
|
|
||||||
m_Position: {x: 440, y: 110, z: 0}
|
|
||||||
m_ChildStateMachines: []
|
|
||||||
m_AnyStateTransitions: []
|
|
||||||
m_EntryTransitions: []
|
|
||||||
m_StateMachineTransitions: {}
|
|
||||||
m_StateMachineBehaviours: []
|
|
||||||
m_AnyStatePosition: {x: 50, y: 20, z: 0}
|
|
||||||
m_EntryPosition: {x: 50, y: 120, z: 0}
|
|
||||||
m_ExitPosition: {x: 800, y: 120, z: 0}
|
|
||||||
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
|
|
||||||
m_DefaultState: {fileID: -1268133539673746559}
|
|
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 19d8bfd755e0f6b4581b4da4cfd2cc70
|
|
||||||
NativeFormatImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
mainObjectFileID: 9100000
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
@ -1,192 +0,0 @@
|
|||||||
%YAML 1.1
|
|
||||||
%TAG !u! tag:unity3d.com,2011:
|
|
||||||
--- !u!74 &7400000
|
|
||||||
AnimationClip:
|
|
||||||
m_ObjectHideFlags: 0
|
|
||||||
m_CorrespondingSourceObject: {fileID: 0}
|
|
||||||
m_PrefabInstance: {fileID: 0}
|
|
||||||
m_PrefabAsset: {fileID: 0}
|
|
||||||
m_Name: test
|
|
||||||
serializedVersion: 7
|
|
||||||
m_Legacy: 0
|
|
||||||
m_Compressed: 0
|
|
||||||
m_UseHighQualityCurve: 1
|
|
||||||
m_RotationCurves: []
|
|
||||||
m_CompressedRotationCurves: []
|
|
||||||
m_EulerCurves: []
|
|
||||||
m_PositionCurves: []
|
|
||||||
m_ScaleCurves:
|
|
||||||
- curve:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Curve:
|
|
||||||
- serializedVersion: 3
|
|
||||||
time: 0
|
|
||||||
value: {x: 0.5, y: 0.5, z: 0.5}
|
|
||||||
inSlope: {x: 0, y: 0, z: 0}
|
|
||||||
outSlope: {x: 0, y: 0, z: 0}
|
|
||||||
tangentMode: 0
|
|
||||||
weightedMode: 0
|
|
||||||
inWeight: {x: 0, y: 0.33333334, z: 0.33333334}
|
|
||||||
outWeight: {x: 0, y: 0.33333334, z: 0.33333334}
|
|
||||||
m_PreInfinity: 2
|
|
||||||
m_PostInfinity: 2
|
|
||||||
m_RotationOrder: 4
|
|
||||||
path: Armature.1/Hips
|
|
||||||
m_FloatCurves:
|
|
||||||
- serializedVersion: 2
|
|
||||||
curve:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Curve:
|
|
||||||
- serializedVersion: 3
|
|
||||||
time: 0
|
|
||||||
value: 0
|
|
||||||
inSlope: Infinity
|
|
||||||
outSlope: Infinity
|
|
||||||
tangentMode: 103
|
|
||||||
weightedMode: 0
|
|
||||||
inWeight: 0
|
|
||||||
outWeight: 0
|
|
||||||
m_PreInfinity: 2
|
|
||||||
m_PostInfinity: 2
|
|
||||||
m_RotationOrder: 4
|
|
||||||
attribute: m_IsActive
|
|
||||||
path: Armature.1
|
|
||||||
classID: 1
|
|
||||||
script: {fileID: 0}
|
|
||||||
flags: 0
|
|
||||||
m_PPtrCurves: []
|
|
||||||
m_SampleRate: 60
|
|
||||||
m_WrapMode: 0
|
|
||||||
m_Bounds:
|
|
||||||
m_Center: {x: 0, y: 0, z: 0}
|
|
||||||
m_Extent: {x: 0, y: 0, z: 0}
|
|
||||||
m_ClipBindingConstant:
|
|
||||||
genericBindings:
|
|
||||||
- serializedVersion: 2
|
|
||||||
path: 1593464098
|
|
||||||
attribute: 2086281974
|
|
||||||
script: {fileID: 0}
|
|
||||||
typeID: 1
|
|
||||||
customType: 0
|
|
||||||
isPPtrCurve: 0
|
|
||||||
isIntCurve: 0
|
|
||||||
isSerializeReferenceCurve: 0
|
|
||||||
- serializedVersion: 2
|
|
||||||
path: 2711589869
|
|
||||||
attribute: 3
|
|
||||||
script: {fileID: 0}
|
|
||||||
typeID: 4
|
|
||||||
customType: 0
|
|
||||||
isPPtrCurve: 0
|
|
||||||
isIntCurve: 0
|
|
||||||
isSerializeReferenceCurve: 0
|
|
||||||
pptrCurveMapping: []
|
|
||||||
m_AnimationClipSettings:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_AdditiveReferencePoseClip: {fileID: 0}
|
|
||||||
m_AdditiveReferencePoseTime: 0
|
|
||||||
m_StartTime: 0
|
|
||||||
m_StopTime: 0
|
|
||||||
m_OrientationOffsetY: 0
|
|
||||||
m_Level: 0
|
|
||||||
m_CycleOffset: 0
|
|
||||||
m_HasAdditiveReferencePose: 0
|
|
||||||
m_LoopTime: 0
|
|
||||||
m_LoopBlend: 0
|
|
||||||
m_LoopBlendOrientation: 0
|
|
||||||
m_LoopBlendPositionY: 0
|
|
||||||
m_LoopBlendPositionXZ: 0
|
|
||||||
m_KeepOriginalOrientation: 0
|
|
||||||
m_KeepOriginalPositionY: 1
|
|
||||||
m_KeepOriginalPositionXZ: 0
|
|
||||||
m_HeightFromFeet: 0
|
|
||||||
m_Mirror: 0
|
|
||||||
m_EditorCurves:
|
|
||||||
- serializedVersion: 2
|
|
||||||
curve:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Curve:
|
|
||||||
- serializedVersion: 3
|
|
||||||
time: 0
|
|
||||||
value: 0
|
|
||||||
inSlope: Infinity
|
|
||||||
outSlope: Infinity
|
|
||||||
tangentMode: 103
|
|
||||||
weightedMode: 0
|
|
||||||
inWeight: 0
|
|
||||||
outWeight: 0
|
|
||||||
m_PreInfinity: 2
|
|
||||||
m_PostInfinity: 2
|
|
||||||
m_RotationOrder: 4
|
|
||||||
attribute: m_IsActive
|
|
||||||
path: Armature.1
|
|
||||||
classID: 1
|
|
||||||
script: {fileID: 0}
|
|
||||||
flags: 0
|
|
||||||
- serializedVersion: 2
|
|
||||||
curve:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Curve:
|
|
||||||
- serializedVersion: 3
|
|
||||||
time: 0
|
|
||||||
value: 0.5
|
|
||||||
inSlope: 0
|
|
||||||
outSlope: 0
|
|
||||||
tangentMode: 136
|
|
||||||
weightedMode: 0
|
|
||||||
inWeight: 0
|
|
||||||
outWeight: 0
|
|
||||||
m_PreInfinity: 2
|
|
||||||
m_PostInfinity: 2
|
|
||||||
m_RotationOrder: 4
|
|
||||||
attribute: m_LocalScale.x
|
|
||||||
path: Armature.1/Hips
|
|
||||||
classID: 4
|
|
||||||
script: {fileID: 0}
|
|
||||||
flags: 0
|
|
||||||
- serializedVersion: 2
|
|
||||||
curve:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Curve:
|
|
||||||
- serializedVersion: 3
|
|
||||||
time: 0
|
|
||||||
value: 0.5
|
|
||||||
inSlope: 0
|
|
||||||
outSlope: 0
|
|
||||||
tangentMode: 136
|
|
||||||
weightedMode: 0
|
|
||||||
inWeight: 0
|
|
||||||
outWeight: 0
|
|
||||||
m_PreInfinity: 2
|
|
||||||
m_PostInfinity: 2
|
|
||||||
m_RotationOrder: 4
|
|
||||||
attribute: m_LocalScale.y
|
|
||||||
path: Armature.1/Hips
|
|
||||||
classID: 4
|
|
||||||
script: {fileID: 0}
|
|
||||||
flags: 0
|
|
||||||
- serializedVersion: 2
|
|
||||||
curve:
|
|
||||||
serializedVersion: 2
|
|
||||||
m_Curve:
|
|
||||||
- serializedVersion: 3
|
|
||||||
time: 0
|
|
||||||
value: 0.5
|
|
||||||
inSlope: 0
|
|
||||||
outSlope: 0
|
|
||||||
tangentMode: 136
|
|
||||||
weightedMode: 0
|
|
||||||
inWeight: 0
|
|
||||||
outWeight: 0
|
|
||||||
m_PreInfinity: 2
|
|
||||||
m_PostInfinity: 2
|
|
||||||
m_RotationOrder: 4
|
|
||||||
attribute: m_LocalScale.z
|
|
||||||
path: Armature.1/Hips
|
|
||||||
classID: 4
|
|
||||||
script: {fileID: 0}
|
|
||||||
flags: 0
|
|
||||||
m_EulerEditorCurves: []
|
|
||||||
m_HasGenericRootTransform: 0
|
|
||||||
m_HasMotionFloatCurves: 0
|
|
||||||
m_Events: []
|
|
@ -1,8 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: 72c58dde7ac8c6741b333a51e1aff2c4
|
|
||||||
NativeFormatImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
mainObjectFileID: 7400000
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
Binary file not shown.
Before Width: | Height: | Size: 179 KiB |
Binary file not shown.
Before Width: | Height: | Size: 232 KiB |
Binary file not shown.
Before Width: | Height: | Size: 242 KiB |
@ -22,6 +22,12 @@ Then, go to "manage project" for your project, and click the + next to Modular A
|
|||||||
|
|
||||||
To update to the latest version, just click the green arrow in the "Latest Version" column.
|
To update to the latest version, just click the green arrow in the "Latest Version" column.
|
||||||
|
|
||||||
|
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/)
|
||||||
|
* [Edit menus](/docs/tutorials/menu/)
|
||||||
|
|
||||||
## Prerelease versions
|
## Prerelease versions
|
||||||
|
|
||||||
To make prerelease versions available in the VCC, [click here](vcc://vpm/addRepo?url=https://vpm.nadena.dev/vpm-prerelease.json)
|
To make prerelease versions available in the VCC, [click here](vcc://vpm/addRepo?url=https://vpm.nadena.dev/vpm-prerelease.json)
|
||||||
@ -34,34 +40,3 @@ The documentation for the prerelease branch can be [found here](https://modular-
|
|||||||
|
|
||||||
Prerelease versions may contain bugs, and/or may have compatibility breaks as development progresses. Please leave
|
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).
|
feedback and bug reports at the [github issues page](https://github.com/bdunderscore/modular-avatar/issues).
|
||||||
|
|
||||||
## Installation via ALCOM
|
|
||||||
|
|
||||||
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`
|
|
||||||
3. Confirm the following details are displayed, then click "Add VPM Repository":
|
|
||||||
- Repository Name: `bd_` or `bd_ (prereleases)`
|
|
||||||
- URL: The URL you entered.
|
|
||||||
|
|
||||||
Afterward, open "Manage Project" for your project, click the + next to Modular Avatar, and then click `APPLY`.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
To update to the latest version, click the area with the version number and green arrow, then click `APPLY`.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
## 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/)
|
|
||||||
* [Edit menus](/docs/tutorials/menu/)
|
|
Binary file not shown.
Before Width: | Height: | Size: 204 KiB |
Binary file not shown.
Before Width: | Height: | Size: 244 KiB |
Binary file not shown.
Before Width: | Height: | Size: 254 KiB |
@ -11,7 +11,7 @@ Merge Animatorなどで追加されたレイヤーは、(置換モードでも
|
|||||||
`MA MMD Layer Control` という_ステートマシンビヘイビア_を制御したいレイヤーに追加することができます。
|
`MA MMD Layer Control` という_ステートマシンビヘイビア_を制御したいレイヤーに追加することができます。
|
||||||
|
|
||||||
また、全体的にこの対応を無効にする場合は、[VRChat Settings](../reference/vrchat-settings)コンポーネントをアバターにつけて、
|
また、全体的にこの対応を無効にする場合は、[VRChat Settings](../reference/vrchat-settings)コンポーネントをアバターにつけて、
|
||||||
該当設定を無効にしてください。
|
該当設置絵を無効にしてください。
|
||||||
|
|
||||||
:::warning
|
:::warning
|
||||||
|
|
||||||
|
@ -20,6 +20,13 @@ VRChat Creator CompanionでModular Avatarをインストールすることをお
|
|||||||
|
|
||||||
最新版にアップデートするには、"Latest Version"の緑色の矢印をクリックしてください。
|
最新版にアップデートするには、"Latest Version"の緑色の矢印をクリックしてください。
|
||||||
|
|
||||||
|
インストール後は以下のチュートリアルを参照してください。
|
||||||
|
|
||||||
|
* [簡単な衣装設定](/docs/tutorials/clothing)
|
||||||
|
* [複雑な衣装設定](/docs/tutorials/adv_clothing)
|
||||||
|
* [アニメーターでトグル作成](/docs/tutorials/object_toggle/)
|
||||||
|
* [簡易メニュー作成](/docs/tutorials/menu/)
|
||||||
|
|
||||||
## テスト版
|
## テスト版
|
||||||
|
|
||||||
VCCでテスト版をインストールできるようにするには、[こちらをクリック](vcc://vpm/addRepo?url=https://vpm.nadena.dev/vpm-prerelease.json)
|
VCCでテスト版をインストールできるようにするには、[こちらをクリック](vcc://vpm/addRepo?url=https://vpm.nadena.dev/vpm-prerelease.json)
|
||||||
@ -32,35 +39,3 @@ VCCでテスト版をインストールできるようにするには、[こち
|
|||||||
|
|
||||||
テスト版は開発中のため、バグがあったり、互換性のない変更を加える可能性があります。
|
テスト版は開発中のため、バグがあったり、互換性のない変更を加える可能性があります。
|
||||||
バグ報告やフィードバックは[GitHubのissueページ](https://github.com/bdunderscore/modular-avatar/issues)へお願いします。
|
バグ報告やフィードバックは[GitHubのissueページ](https://github.com/bdunderscore/modular-avatar/issues)へお願いします。
|
||||||
|
|
||||||
## 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の+をクリックし、「適用」をクリックしてください。
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

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

|
|
||||||
|
|
||||||
## インストール後
|
|
||||||
|
|
||||||
インストール後は以下のチュートリアルを参照してください。
|
|
||||||
|
|
||||||
* [簡単な衣装設定](/docs/tutorials/clothing)
|
|
||||||
* [複雑な衣装設定](/docs/tutorials/adv_clothing)
|
|
||||||
* [アニメーターでトグル作成](/docs/tutorials/object_toggle/)
|
|
||||||
* [簡易メニュー作成](/docs/tutorials/menu/)
|
|
@ -7286,11 +7286,11 @@ __metadata:
|
|||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"estree-util-value-to-estree@npm:^3.0.1":
|
"estree-util-value-to-estree@npm:^3.0.1":
|
||||||
version: 3.3.3
|
version: 3.1.2
|
||||||
resolution: "estree-util-value-to-estree@npm:3.3.3"
|
resolution: "estree-util-value-to-estree@npm:3.1.2"
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/estree": ^1.0.0
|
"@types/estree": ^1.0.0
|
||||||
checksum: 73851f26715300046228cf8a36986c101d6741d7a2b024f684675e75d1191bc07b0dc069926876729efd5650343d23bffe76104221b7dc862965632302b05524
|
checksum: 31c4b9f3a2e64119b994a86d70070325b6ec238a21842669e79b0d6a7190150293616c8f38fee1c369c18bbef405064d883aa38c05311db5d0a211a30e9924d6
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "nadena.dev.modular-avatar",
|
"name": "nadena.dev.modular-avatar",
|
||||||
"displayName": "Modular Avatar",
|
"displayName": "Modular Avatar",
|
||||||
"version": "1.13.0-alpha.2",
|
"version": "1.12.4",
|
||||||
"unity": "2022.3",
|
"unity": "2022.3",
|
||||||
"description": "A suite of tools for assembling your avatar out of reusable components",
|
"description": "A suite of tools for assembling your avatar out of reusable components",
|
||||||
"author": {
|
"author": {
|
||||||
@ -16,6 +16,6 @@
|
|||||||
},
|
},
|
||||||
"vpmDependencies": {
|
"vpmDependencies": {
|
||||||
"com.vrchat.avatars": ">=3.7.4",
|
"com.vrchat.avatars": ">=3.7.4",
|
||||||
"nadena.dev.ndmf": ">=1.8.0-alpha.4 <2.0.0-a"
|
"nadena.dev.ndmf": ">=1.7.6 <2.0.0-a"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user