Spring on Controller

This commit is contained in:
ousttrue 2021-06-16 15:57:37 +09:00
parent 43ee6595c4
commit a35db5cf36
13 changed files with 54 additions and 37 deletions

View File

@ -211,9 +211,9 @@ namespace UniVRM10
rect.y += 2;
SerializedProperty element = prop.GetArrayElementAtIndex(index);
var elements = target.Vrm.SpringBone.ColliderGroups;
var elements = target.SpringBone.ColliderGroups;
var element_index = elements.IndexOf(element.objectReferenceValue as VRM10SpringBoneColliderGroup);
var colliderGroups = target.Vrm.SpringBone.ColliderGroups.Select((x, y) => x.GUIName(y)).ToArray();
var colliderGroups = target.SpringBone.ColliderGroups.Select((x, y) => x.GUIName(y)).ToArray();
var new_index = EditorGUI.Popup(rect, element_index, colliderGroups);
if (new_index != element_index)
{

View File

@ -37,9 +37,9 @@ namespace UniVRM10
// load
_map = new Dictionary<int, object>();
for (var i = 0; i < target.Vrm.SpringBone.ColliderGroups.Count; ++i)
for (var i = 0; i < target.SpringBone.ColliderGroups.Count; ++i)
{
var colliderGroup = target.Vrm.SpringBone.ColliderGroups[i];
var colliderGroup = target.SpringBone.ColliderGroups[i];
var name = colliderGroup.GUIName(i);
var id = _nextNodeID++;
var item = new TreeViewItem(id, 2, name);
@ -47,9 +47,9 @@ namespace UniVRM10
_colliderGroups.AddChild(item);
}
for (var i = 0; i < target.Vrm.SpringBone.Springs.Count; ++i)
for (var i = 0; i < target.SpringBone.Springs.Count; ++i)
{
var spring = target.Vrm.SpringBone.Springs[i];
var spring = target.SpringBone.Springs[i];
var name = spring.GUIName(i);
var id = _nextNodeID++;
var item = new TreeViewItem(id, 2, name);
@ -72,12 +72,12 @@ namespace UniVRM10
{
if (value is VRM10SpringBoneColliderGroup colliderGroup)
{
var i = Target.Vrm.SpringBone.ColliderGroups.IndexOf(colliderGroup);
var i = Target.SpringBone.ColliderGroups.IndexOf(colliderGroup);
_selected = new SelectedColliderGroupGUI(_so, i);
}
else if (value is VRM10ControllerSpringBone.Spring spring)
{
var i = Target.Vrm.SpringBone.Springs.IndexOf(spring);
var i = Target.SpringBone.Springs.IndexOf(spring);
_selected = new SelectedSpringGUI(Target, _so, i);
}
}

View File

@ -16,7 +16,6 @@ namespace UniVRM10
Meta,
Expression,
LookAt,
SpringBone,
FirstPerson,
}
Tabs _tab = Tabs.Meta;
@ -25,18 +24,20 @@ namespace UniVRM10
PropGui m_expression;
PropGui m_meta;
PropGui m_lookAt;
PropGui m_springBone;
PropGui m_firstPerson;
PropGui m_asset;
void OnEnable()
{
if (target == null)
{
return;
}
m_target = (VRM10Object)target;
m_expression = new PropGui(serializedObject.FindProperty(nameof(m_target.Expression)));
m_meta = new PropGui(serializedObject.FindProperty(nameof(m_target.Meta)));
m_lookAt = new PropGui(serializedObject.FindProperty(nameof(m_target.LookAt)));
m_springBone = new PropGui(serializedObject.FindProperty(nameof(m_target.SpringBone)));
m_firstPerson = new PropGui(serializedObject.FindProperty(nameof(m_target.FirstPerson)));
}
@ -64,10 +65,6 @@ namespace UniVRM10
m_lookAt.RecursiveProperty();
break;
case Tabs.SpringBone:
m_springBone.RecursiveProperty();
break;
case Tabs.FirstPerson:
m_firstPerson.RecursiveProperty();
break;

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6edfaddd4ff9b9f479c5490ed02b7e3c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -10,11 +10,24 @@ namespace UniVRM10
/// 各フレームのHumanoidへのモーション適用後に任意のタイミングで
/// Applyを呼び出してください。
///
/// ヒエラルキー内への参照のシリアライズ
///
/// * Humanoid(VRM必須)
/// * SpringBone の MonoBehaviour でない部分
/// * ColliderGroup
/// * Springs
///
/// </summary>
[AddComponentMenu("VRM10/VRMController")]
[DisallowMultipleComponent]
public class VRM10Controller : MonoBehaviour
{
[SerializeField, Header("VRM1")]
public VRM10Object Vrm;
[SerializeField]
public VRM10ControllerSpringBone SpringBone = new VRM10ControllerSpringBone();
public enum UpdateTypes
{
None,
@ -40,9 +53,6 @@ namespace UniVRM10
[SerializeField]
public VRM10ObjectLookAt.LookAtTargetTypes LookAtTargetType;
[SerializeField, Header("VRM1")]
public VRM10Object Vrm;
VRM10ControllerRuntime m_runtime;
/// <summary>
@ -58,6 +68,17 @@ namespace UniVRM10
return m_runtime;
}
void Start()
{
if (LookAtTargetType == VRM10ObjectLookAt.LookAtTargetTypes.CalcYawPitchToGaze)
{
if (Gaze == null)
{
LookAtTargetType = VRM10ObjectLookAt.LookAtTargetTypes.SetYawPitch;
}
}
}
private void Update()
{
if (UpdateType == UpdateTypes.Update)

View File

@ -1,7 +1,5 @@
fileFormatVersion: 2
guid: 09958303305bb37408d08e992481d7e9
timeCreated: 1517467747
licenseType: Free
guid: 82d8c2da05a1474478651e7a11d98a8f
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@ -52,7 +52,7 @@ namespace UniVRM10
//
// spring
//
m_target.Vrm.SpringBone.Process(m_target.SpringBoneCenter);
m_target.SpringBone.Process(m_target.SpringBoneCenter);
//
// gaze control

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: ebbe3112f524c99438364defdc03e140
guid: 75e82d601e36f0c4289ddb16757aab20
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: c7800be16a75f1542aa302a471b19524
guid: 35bca1258d58b5a4a9f0633d9d4fc322
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@ -12,13 +12,9 @@ namespace UniVRM10
/// ScriptedImporter から Extract して Edit 可能な項目なるべく増やすべく導入。
///
/// * Meta(VRM必須)
/// * Humanoid(VRM必須)
/// * Expressions(enum + custom list)
/// * LookAt
/// * FirstPerson
/// * SpringBone の MonoBehaviour でない部分
/// * ColliderGroup
/// * Springs
///
/// Serialize 可能な形で保持し、Editor経由で Edit可能にするのが目的。
///
@ -39,9 +35,6 @@ namespace UniVRM10
[SerializeField]
public VRM10ObjectFirstPerson FirstPerson = new VRM10ObjectFirstPerson();
[SerializeField]
public VRM10ControllerSpringBone SpringBone = new VRM10ControllerSpringBone();
void OnValidate()
{
Debug.Log($"VRM10Object.OnValidate");

View File

@ -340,7 +340,7 @@ namespace UniVRM10
}
// colliderGroups
foreach (var x in controller.Vrm.SpringBone.ColliderGroups)
foreach (var x in controller.SpringBone.ColliderGroups)
{
springBone.ColliderGroups.Add(new UniGLTF.Extensions.VRMC_springBone.ColliderGroup
{
@ -349,13 +349,13 @@ namespace UniVRM10
}
// springs
foreach (var x in controller.Vrm.SpringBone.Springs)
foreach (var x in controller.SpringBone.Springs)
{
var spring = new UniGLTF.Extensions.VRMC_springBone.Spring
{
Name = x.Name,
Joints = x.Joints.Select(y => ExportJoint(y, getNodeIndexFromTransform)).ToList(),
ColliderGroups = x.ColliderGroups.Select(y => controller.Vrm.SpringBone.ColliderGroups.IndexOf(y)).ToArray(),
ColliderGroups = x.ColliderGroups.Select(y => controller.SpringBone.ColliderGroups.IndexOf(y)).ToArray(),
};
springBone.Springs.Add(spring);
}

View File

@ -431,7 +431,7 @@ namespace UniVRM10
foreach (var g in gltfVrmSpringBone.ColliderGroups)
{
var colliderGroup = secondary.gameObject.AddComponent<VRM10SpringBoneColliderGroup>();
controller.Vrm.SpringBone.ColliderGroups.Add(colliderGroup);
controller.SpringBone.ColliderGroups.Add(colliderGroup);
foreach (var c in g.Colliders)
{
@ -453,11 +453,11 @@ namespace UniVRM10
continue;
}
var spring = new VRM10ControllerSpringBone.Spring(gltfSpring.Name);
controller.Vrm.SpringBone.Springs.Add(spring);
controller.SpringBone.Springs.Add(spring);
if (gltfSpring.ColliderGroups != null)
{
spring.ColliderGroups = gltfSpring.ColliderGroups.Select(x => controller.Vrm.SpringBone.ColliderGroups[x]).ToList();
spring.ColliderGroups = gltfSpring.ColliderGroups.Select(x => controller.SpringBone.ColliderGroups[x]).ToList();
}
// joint
foreach (var gltfJoint in gltfSpring.Joints)