void DestroySpringBoneEntities(VRMSpringBone springBone) { foreach (var colliderEntity in springBone.SphereColliderEntities) { this.DestroyEntity(colliderEntity); } }
// ---------------------------------------------------- #region // Private Methods unsafe void CreateSphereColliderEntities(VRMSpringBone springBone) { var groups = springBone.ColliderGroups; if (groups == null || groups.Length <= 0) { return; } var createSphereColliderEntities = new List <Entity>(); foreach (var group in groups) { if (!group.IsActive) { continue; } var groupEntity = group.CreateEntity(); // SphereColliderEntityの生成 // ※こちらのEntityはNativeMultiHashMap生成時の長さの算出に使用する for (var i = 0; i < group.Colliders.Length; i++) { var entity = this._entityManager.Instantiate(this._sphereColliderPrefab); this._entityManager.SetComponentData(entity, new SphereColliderTag()); createSphereColliderEntities.Add(entity); } } springBone.SphereColliderEntities = createSphereColliderEntities; }
void CreateSpringBoneEntities(VRMSpringBone springBone) { foreach (var node in springBone.Nodes) { node.CreateEntity(); } }
public void RemoveSpringBone(VRMSpringBone springBone) { if (!this._springBones.Contains(springBone)) { return; } this.DestroySpringBoneEntities(springBone); this._springBones.Remove(springBone); springBone.Dispose(); }
// ---------------------------------------------------- #region // Public Methods public void AddSpringBone(VRMSpringBone springBone) { if (springBone.RootBones == null || springBone.RootBones.Count <= 0 || this._springBones.Contains(springBone)) { return; } springBone.Initialize(this._entityManager); this.CreateSphereColliderEntities(springBone); this.CreateSpringBoneEntities(springBone); this._springBones.Add(springBone); }