void Start() { bones = GetComponentsInChildren <SpringBoneComponent>(); // Initialization of SpringBone. foreach (var bone in bones) { bone.Initialize(); } // Initialization of SphereCollider foreach (var col in colliders) { col.Initialize(); } // Cache parent's transform. rootBoneParents = bones.Where(t => t.Value.IsRootBone) .Select(t => t.transform.parent) .ToArray(); // Cancel parentage relationship. if (optimizeGameObject) { foreach (var bone in bones) { bone.transform.SetParent(null); } } // Memory allocation. boneDataTemp = new BoneData[bones.Length]; parentDataTemp = new ParentData[rootBoneParents.Length]; colliderDataTemp = new ColliderData[colliders.Length]; boneData = new NativeArray <BoneData>(bones.Length, Allocator.Persistent); parentData = new NativeArray <ParentData>(rootBoneParents.Length, Allocator.Persistent); colliderData = new NativeArray <ColliderData>(colliders.Length, Allocator.Persistent); selectedColliderList = new NativeList <ColliderData>(bones.Length, Allocator.Persistent); // Set data. SetBoneData(); UpdateParentData(); UpdateColliderData(); UpdateComponentData(); // Register this component. SpringBoneJobScheduler.Instance.Register(this); // Create a job. calculateJob = new SpringBoneJob() { boneData = boneData, parentData = parentData, colliderData = colliderData, selectedColliderList = selectedColliderList, position = position, rotation = rotation, collider = sphereCollider }; }
/// <summary> /// Schedule transform calculate Job. /// </summary> public void ScheduleCalculateJob() { calculateJob = new SpringBoneJob() { boneData = boneData, parentData = parentData, colliderData = colliderData, selectedColliderList = selectedColliderList, position = position, rotation = rotation, collider = sphereCollider }; calculateJob.dt = Time.deltaTime; calculateJobHandle = calculateJob.Schedule(); }