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); }