Animation Rigging 包可以在运行时为动画骨架启用程序化的运动,该示例项目演示了设置的工作流程步骤。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

86 行
3.0 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.Animations.Rigging;
public class TwoBoneIKAutoSetup : Editor
{
[MenuItem("Animation Rigging/Utilities/Auto-Setup TwoBoneIK from Tip Transform", false, 0)]
public static void TwoBoneIKAutoSetupSelected(MenuCommand command)
{
var selection = Selection.activeObject as GameObject;
if (!selection)
{
Debug.LogWarning("Please select a GameObject with TwoBoneIKConstraint before running auto setup.");
return;
}
var constraint = selection.GetComponent<TwoBoneIKConstraint>();
if (!constraint)
{
Debug.LogWarning("Please select a GameObject with TwoBoneIKConstraint before running auto setup.");
return;
}
if (!constraint.data.tip)
{
Debug.LogWarning("Please provide a tip transform for the TwoBoneIKConstraint before running auto setup.");
return;
}
TwoBoneIKAutoSetupUtility(constraint);
}
public static void TwoBoneIKAutoSetupUtility(TwoBoneIKConstraint constraint)
{
var tip = constraint.data.tip;
if (!constraint.data.mid)
{
Undo.RecordObject(constraint, "Setup mid bone for TwoBoneIK");
constraint.data.mid = tip.parent;
}
if (!constraint.data.root)
{
Undo.RecordObject(constraint, "Setup root bone for TwoBoneIK");
constraint.data.root = tip.parent.parent;
}
if (!constraint.data.target)
{
var target = constraint.transform.Find(constraint.gameObject.name + "_target");
if (target == null)
{
var t = new GameObject();
Undo.RegisterCreatedObjectUndo(t, "Created target");
t.name = constraint.gameObject.name + "_target";
Undo.SetTransformParent(t.transform, constraint.transform, "Set new parent");
target = t.transform;
}
constraint.data.target = target;
}
if (!constraint.data.hint)
{
var hint = constraint.transform.Find(constraint.gameObject.name + "_hint");
if (hint == null)
{
var t = new GameObject();
Undo.RegisterCreatedObjectUndo(t, "Created hint");
t.name = constraint.gameObject.name + "_hint";
Undo.SetTransformParent(t.transform, constraint.transform, "Set new parent");
hint = t.transform;
}
constraint.data.hint = hint;
}
// align target and hint to bones
constraint.data.target.position = constraint.data.tip.position;
constraint.data.target.rotation = constraint.data.tip.rotation;
constraint.data.hint.position = constraint.data.mid.position;
constraint.data.hint.rotation = constraint.data.mid.rotation;
}
}