Example #1
0
        private void Awake()
        {
            Collider = GetComponent <Collider>();
            Rb       = GetComponent <Rigidbody>();

            KinematicController = GetComponent <KinematicController>();

            FollowCamBasic cam = FindObjectOfType <FollowCamBasic>();

            cam.SetTarget(transform);
        }
        public bool CalculateDepenetration(KinematicController controller, out Vector3 adjustedPosition, out bool foundInteractiveObject)
        {
            bool adjustPosition = false;

            adjustedPosition       = controller.transform.position;
            foundInteractiveObject = false;
            for (int i = 0; i < controller.NeighborResultCount; ++i)
            {
                var collider = controller.Neighbors[i];

                if (collider == null || collider == controller.Collider)
                {
                    continue;
                }

                Vector3    otherPosition = collider.gameObject.transform.position;
                Quaternion otherRotation = collider.gameObject.transform.rotation;

                Vector3 resolutionDirection;
                float   resolutionDistance;

                bool overlapped = Physics.ComputePenetration(
                    controller.Collider, controller.transform.position, controller.transform.rotation,
                    collider, otherPosition, otherRotation,
                    out resolutionDirection, out resolutionDistance
                    );

                if (overlapped)
                {
                    Vector3 resolutionMovement = resolutionDirection * (resolutionDistance + CollisionOffset);
                    adjustedPosition += resolutionMovement;
                    adjustPosition    = true;

                    if (InteractiveObjectMask.Contains(collider.gameObject.layer))
                    {
                        foundInteractiveObject = true;
                    }
                }
            }

            return(adjustPosition);
        }
 private void SetControllerNeighbors(KinematicController controller)
 {
     controller.NeighborResultCount = Physics.OverlapSphereNonAlloc(controller.transform.position, controller.NeighborSearchRadius,
                                                                    controller.Neighbors, PenetrationTestMask, QueryTriggerInteraction.Ignore);
 }
 public void Unregister(KinematicController controller)
 {
     Controllers.Remove(controller);
 }
 public void Register(KinematicController controller)
 {
     Controllers.Add(controller);
 }