Here are the examples of the csharp api System.Collections.Generic.List.Contains(VRMSpringBoneColliderGroup) taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.
1 Examples
19
Source : DynamicBoneReplacer.cs
with Mozilla Public License 2.0
from esperecyan
with Mozilla Public License 2.0
from esperecyan
private static void SetSpringBones(GameObject instance, ParametersConverter swayingParametersConverter)
{
var boneInfo = new BoneInfo(instance.GetComponent<VRMMeta>());
var secondary = instance.transform.Find("secondary").gameObject;
GameObject.DestroyImmediate(secondary.GetComponent<VRMSpringBone>());
foreach (var dynamicBones in instance.GetComponentsInChildren(DynamicBoneType)
.Select((dynamic dynamicBone) =>
{
var parameters = swayingParametersConverter(new DynamicBoneParameters()
{
Damping = dynamicBone.m_Damping,
DampingDistrib = dynamicBone.m_DampingDistrib,
Elasticity = dynamicBone.m_Elasticity,
ElasticityDistrib = dynamicBone.m_ElasticityDistrib,
Stiffness = dynamicBone.m_Stiffness,
StiffnessDistrib = dynamicBone.m_StiffnessDistrib,
Inert = dynamicBone.m_Inert,
InertDistrib = dynamicBone.m_InertDistrib,
}, boneInfo);
var colliderGroups = new List<VRMSpringBoneColliderGroup>();
if (dynamicBone.m_Colliders != null)
{
foreach (var collider in dynamicBone.m_Colliders)
{
// コライダーが削除された、などで消失状態の場合がある
if (collider == null)
{
continue;
}
if (!collider.transform.IsChildOf(instance.transform))
{
// ルート外の参照を除外
continue;
}
VRMSpringBoneColliderGroup colliderGroup
= collider.GetComponent<VRMSpringBoneColliderGroup>();
if (colliderGroup == null || colliderGroups.Contains(colliderGroup))
{
continue;
}
colliderGroups.Add(colliderGroup);
}
}
Vector3 gravity = dynamicBone.m_Gravity;
return (dynamicBone, parameters, colliderGroups, compare: string.Join("\n", new[]
{
parameters.StiffnessForce,
gravity.x,
gravity.y,
gravity.z,
parameters.DragForce,
(float)dynamicBone.m_Radius,
}.Select(parameter => parameter.ToString("F2"))
.Concat(colliderGroups
.Select(colliderGroup => colliderGroup.transform.RelativePathFrom(instance.transform)))
));
})
.GroupBy(dynamicBones => dynamicBones.compare)) // 同一パラメータでグループ化
{
var dynamicBone = dynamicBones.First();
var springBone = secondary.AddComponent<VRMSpringBone>();
springBone.m_stiffnessForce = dynamicBone.parameters.StiffnessForce;
Vector3 gravity = dynamicBone.dynamicBone.m_Gravity;
springBone.m_gravityPower = gravity.magnitude;
springBone.m_gravityDir = gravity.normalized;
springBone.m_dragForce = dynamicBone.parameters.DragForce;
springBone.RootBones = dynamicBones.Select(db => (Transform)db.dynamicBone.m_Root)
.Where(transform => transform != null && transform.IsChildOf(instance.transform))
.Distinct()
.ToList();
springBone.m_hitRadius = dynamicBone.dynamicBone.m_Radius;
springBone.ColliderGroups = dynamicBone.colliderGroups.ToArray();
}
}