Ejemplo n.º 1
0
        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
            };
        }
Ejemplo n.º 2
0
 /// <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();
 }