Skip to content

Commit

Permalink
RendererをSkinnedMeshRenderer, MeshRendererに直接指定する
Browse files Browse the repository at this point in the history
  • Loading branch information
Narazaka committed Jan 30, 2025
1 parent f536bde commit 742cd02
Show file tree
Hide file tree
Showing 7 changed files with 37 additions and 19 deletions.
4 changes: 2 additions & 2 deletions Components/Editor/AvatarMenuCreatorBaseEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ void OnInspectorGUISingle()
{
EditorGUILayout.HelpBox(T.アセットからの復元機能は高度な設定に対応していません_n_生成後のアセットから設定を復元することは出来ません, MessageType.Warning);
}
EditorGUI.BeginDisabledGroup(Creator.AvatarMenu.IncludeAssetType == IncludeAssetType.Component);
EditorGUI.BeginDisabledGroup(Creator.AvatarMenu.IncludeAssetType == IncludeAssetType.Component || baseObject == null);
if (GUILayout.Button(hasAssets ? T.この設定でアセットを再生成 : T.この設定でアセットを生成))
{
var prefabPath = AssetDatabase.GetAssetPath(Creator.gameObject);
Expand All @@ -164,7 +164,7 @@ void OnInspectorGUISingle()
return;
}
var (basePath, baseName) = Util.GetBasePathAndNameFromPrefabPath(prefabPath);
var createAvatarMenu = CreateAvatarMenuBase.GetCreateAvatarMenu(Creator.AvatarMenu);
var createAvatarMenu = CreateAvatarMenuBase.GetCreateAvatarMenu(baseObject.transform, Creator.AvatarMenu);
createAvatarMenu.CreateAssets(baseName).SaveAssets(Creator.AvatarMenu.IncludeAssetType, basePath, (prefab) => CreateAvatarMenuBase.GetOrAddMenuCreatorComponent(prefab, Creator.AvatarMenu, true));
}
EditorGUI.EndDisabledGroup();
Expand Down
2 changes: 1 addition & 1 deletion Components/Editor/AvatarMenuCreatorPlugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ protected override void Configure()
foreach (var creator in creators)
{
if (!creator.IsEffective) continue;
CreateAvatarMenuBase.GetCreateAvatarMenu(creator.AvatarMenu).CreateAssets(creator.name).StoreAssets(creator.gameObject, false);
CreateAvatarMenuBase.GetCreateAvatarMenu(ctx.AvatarRootTransform, creator.AvatarMenu).CreateAssets(creator.name).StoreAssets(creator.gameObject, false);
UnityEngine.Object.DestroyImmediate(creator);
}
});
Expand Down
2 changes: 1 addition & 1 deletion Editor/AvatarMenuCreatorForMA.cs
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ void OnGUI()
var prefabPath = EditorUtility.SaveFilePanelInProject(T.保存場所, "New Menu", "prefab", T.保存場所, SaveFolder);
if (string.IsNullOrEmpty(prefabPath)) return;
var (basePath, baseName) = Util.GetBasePathAndNameFromPrefabPath(prefabPath);
var createAvatarMenu = CreateAvatarMenuBase.GetCreateAvatarMenu(avatarMenu);
var createAvatarMenu = CreateAvatarMenuBase.GetCreateAvatarMenu(VRCAvatarDescriptor.transform, avatarMenu);
createAvatarMenu.CreateAssets(baseName, children).SaveAssets(IncludeAssetType, basePath, modifyPrefab);
SaveFolder = System.IO.Path.GetDirectoryName(basePath);
}
Expand Down
8 changes: 4 additions & 4 deletions Editor/CreateAvatarChooseMenu.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ namespace net.narazaka.avatarmenucreator.editor
public class CreateAvatarChooseMenu : CreateAvatarMenuBase
{
AvatarChooseMenu AvatarMenu;
public CreateAvatarChooseMenu(AvatarChooseMenu avatarChooseMenu) => AvatarMenu = avatarChooseMenu;
public CreateAvatarChooseMenu(Transform avatarRoot, AvatarChooseMenu avatarChooseMenu) : base(avatarRoot) => AvatarMenu = avatarChooseMenu;

public override CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null)
{
Expand All @@ -40,7 +40,7 @@ public override CreatedAssets CreateAssets(string baseName, IEnumerable<string>
var curveName = $"m_Materials.Array.data[{index}]";
for (var i = 0; i < AvatarMenu.ChooseCount; ++i)
{
AnimationUtility.SetObjectReferenceCurve(choices[i], EditorCurveBinding.PPtrCurve(curvePath, typeof(Renderer), curveName), new ObjectReferenceKeyframe[] { new ObjectReferenceKeyframe { time = 0, value = value.ContainsKey(i) ? value[i] : null } });
AnimationUtility.SetObjectReferenceCurve(choices[i], EditorCurveBinding.PPtrCurve(curvePath, GetRendererTypeByPath(child), curveName), new ObjectReferenceKeyframe[] { new ObjectReferenceKeyframe { time = 0, value = value.ContainsKey(i) ? value[i] : null } });
}
}
foreach (var (child, name) in AvatarMenu.ChooseBlendShapes.Keys)
Expand All @@ -62,14 +62,14 @@ public override CreatedAssets CreateAssets(string baseName, IEnumerable<string>
var curveName = $"material.{name}";
for (var i = 0; i < AvatarMenu.ChooseCount; ++i)
{
choices[i].SetCurve(curvePath, typeof(Renderer), curveName, new AnimationCurve(new Keyframe(0, value.ContainsKey(i) ? value[i] : 0)));
choices[i].SetCurve(curvePath, GetRendererTypeByPath(child), curveName, new AnimationCurve(new Keyframe(0, value.ContainsKey(i) ? value[i] : 0)));
}
}
foreach (var (child, name) in AvatarMenu.ChooseShaderVectorParameters.Keys)
{
if (!matchGameObjects.Contains(child)) continue;
var value = AvatarMenu.ChooseShaderVectorParameters[(child, name)];
SetVector4Curve(choices, typeof(Renderer), child, $"material.{name}", value);
SetVector4Curve(choices, GetRendererTypeByPath(child), child, $"material.{name}", value);
}
foreach (var (child, member) in AvatarMenu.ChooseValues.Keys)
{
Expand Down
26 changes: 22 additions & 4 deletions Editor/CreateAvatarMenuBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,25 @@ namespace net.narazaka.avatarmenucreator.editor
{
public abstract class CreateAvatarMenuBase
{
public static CreateAvatarMenuBase GetCreateAvatarMenu<T>(T avatarMenu) where T : AvatarMenuBase
public static CreateAvatarMenuBase GetCreateAvatarMenu<T>(Transform avatarRoot, T avatarMenu) where T : AvatarMenuBase
{
switch (avatarMenu)
{
case AvatarChooseMenu avatarChooseMenu:
return new CreateAvatarChooseMenu(avatarChooseMenu);
return new CreateAvatarChooseMenu(avatarRoot, avatarChooseMenu);
case AvatarToggleMenu avatarToggleMenu:
return new CreateAvatarToggleMenu(avatarToggleMenu);
return new CreateAvatarToggleMenu(avatarRoot, avatarToggleMenu);
case AvatarRadialMenu avatarSliderMenu:
return new CreateAvatarRadialMenu(avatarSliderMenu);
return new CreateAvatarRadialMenu(avatarRoot, avatarSliderMenu);
default:
throw new System.ArgumentException($"unknown avatar menu type {avatarMenu.GetType()}");
}
}

Transform AvatarRoot;

protected CreateAvatarMenuBase(Transform avatarRoot) => AvatarRoot = avatarRoot;

public abstract CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null);

#if NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NDMF && !NET_NARAZAKA_VRCHAT_AvatarMenuCreator_HAS_NO_MENU_MA
Expand Down Expand Up @@ -61,6 +65,20 @@ public static AvatarMenuCreatorBase GetOrAddMenuCreatorComponentOnly(GameObject
throw new System.ArgumentException($"unknown menu type");
}
}

Transform GetByPath(string path)
{
return AvatarRoot.Find(path);
}

protected System.Type GetRendererTypeByPath(string path)
{
var obj = GetByPath(path);
if (obj == null) return typeof(Renderer);
var component = obj.GetComponent<Renderer>();
if (component == null) return typeof(Renderer);
return component.GetType();
}
#endif
}
}
6 changes: 3 additions & 3 deletions Editor/CreateAvatarRadialMenu.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ namespace net.narazaka.avatarmenucreator.editor
public class CreateAvatarRadialMenu : CreateAvatarMenuBase
{
AvatarRadialMenu AvatarMenu;
public CreateAvatarRadialMenu(AvatarRadialMenu avatarRadialMenu) => AvatarMenu = avatarRadialMenu;
public CreateAvatarRadialMenu(Transform avatarRoot, AvatarRadialMenu avatarRadialMenu) : base(avatarRoot) => AvatarMenu = avatarRadialMenu;

public override CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null)
{
Expand All @@ -32,13 +32,13 @@ public override CreatedAssets CreateAssets(string baseName, IEnumerable<string>
{
if (!matchGameObjects.Contains(child)) continue;
var value = AvatarMenu.RadialShaderParameters[(child, name)];
clip.SetCurve(child, typeof(Renderer), $"material.{name}", FullAnimationCurve(new Keyframe(value.StartOffsetPercent, value.Start), new Keyframe(value.EndOffsetPercent, value.End)));
clip.SetCurve(child, GetRendererTypeByPath(child), $"material.{name}", FullAnimationCurve(new Keyframe(value.StartOffsetPercent, value.Start), new Keyframe(value.EndOffsetPercent, value.End)));
}
foreach (var (child, name) in AvatarMenu.RadialShaderVectorParameters.Keys)
{
if (!matchGameObjects.Contains(child)) continue;
var value = AvatarMenu.RadialShaderVectorParameters[(child, name)];
SetVector4Curve(clip, typeof(Renderer), child, $"material.{name}", value);
SetVector4Curve(clip, GetRendererTypeByPath(child), child, $"material.{name}", value);
}
foreach (var (child, member) in AvatarMenu.RadialValues.Keys)
{
Expand Down
8 changes: 4 additions & 4 deletions Editor/CreateAvatarToggleMenu.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ namespace net.narazaka.avatarmenucreator.editor
public class CreateAvatarToggleMenu : CreateAvatarMenuBase
{
AvatarToggleMenu AvatarMenu;
public CreateAvatarToggleMenu(AvatarToggleMenu avatarToggleMenu) => AvatarMenu = avatarToggleMenu;
public CreateAvatarToggleMenu(Transform avatarRoot, AvatarToggleMenu avatarToggleMenu) : base(avatarRoot) => AvatarMenu = avatarToggleMenu;

public override CreatedAssets CreateAssets(string baseName, IEnumerable<string> children = null)
{
Expand Down Expand Up @@ -56,7 +56,7 @@ public override CreatedAssets CreateAssets(string baseName, IEnumerable<string>
var value = AvatarMenu.ToggleMaterials[(child, index)];
var curvePath = child;
var curveName = $"m_Materials.Array.data[{index}]";
var binding = EditorCurveBinding.PPtrCurve(curvePath, typeof(Renderer), curveName);
var binding = EditorCurveBinding.PPtrCurve(curvePath, GetRendererTypeByPath(child), curveName);
if (value.UseActive) AnimationUtility.SetObjectReferenceCurve(active, binding, value.ActiveCurve());
if (value.UseInactive) AnimationUtility.SetObjectReferenceCurve(inactive, binding, value.InactiveCurve());
if (transitionSeconds > 0)
Expand All @@ -73,12 +73,12 @@ public override CreatedAssets CreateAssets(string baseName, IEnumerable<string>
foreach (var (child, name) in AvatarMenu.ToggleShaderParameters.Keys)
{
if (!matchGameObjects.Contains(child)) continue;
clipSet.SetupAnimationToggleCurve(AvatarMenu.ToggleShaderParameters[(child, name)], path: child, type: typeof(Renderer), propertyName: $"material.{name}");
clipSet.SetupAnimationToggleCurve(AvatarMenu.ToggleShaderParameters[(child, name)], path: child, type: GetRendererTypeByPath(child), propertyName: $"material.{name}");
}
foreach (var (child, name) in AvatarMenu.ToggleShaderVectorParameters.Keys)
{
if (!matchGameObjects.Contains(child)) continue;
clipSet.SetupComplexAnimationToggleCurve(AvatarMenu.ToggleShaderVectorParameters[(child, name)], path: child, type: typeof(Renderer), prefix: $"material.{name}");
clipSet.SetupComplexAnimationToggleCurve(AvatarMenu.ToggleShaderVectorParameters[(child, name)], path: child, type: GetRendererTypeByPath(child), prefix: $"material.{name}");
}
foreach (var (child, member) in AvatarMenu.ToggleValues.Keys)
{
Expand Down

0 comments on commit 742cd02

Please sign in to comment.