mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-04-20 05:57:21 -05:00
Spring on Controller
This commit is contained in:
parent
43ee6595c4
commit
a35db5cf36
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
8
Assets/VRM10/Runtime/Components/VRM10Controller.meta
Normal file
8
Assets/VRM10/Runtime/Components/VRM10Controller.meta
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 6edfaddd4ff9b9f479c5490ed02b7e3c
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
|
|
@ -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)
|
||||
|
|
@ -1,7 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 09958303305bb37408d08e992481d7e9
|
||||
timeCreated: 1517467747
|
||||
licenseType: Free
|
||||
guid: 82d8c2da05a1474478651e7a11d98a8f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
|
|
@ -52,7 +52,7 @@ namespace UniVRM10
|
|||
//
|
||||
// spring
|
||||
//
|
||||
m_target.Vrm.SpringBone.Process(m_target.SpringBoneCenter);
|
||||
m_target.SpringBone.Process(m_target.SpringBoneCenter);
|
||||
|
||||
//
|
||||
// gaze control
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: ebbe3112f524c99438364defdc03e140
|
||||
guid: 75e82d601e36f0c4289ddb16757aab20
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
fileFormatVersion: 2
|
||||
guid: c7800be16a75f1542aa302a471b19524
|
||||
guid: 35bca1258d58b5a4a9f0633d9d4fc322
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user