Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- origin = charHead.position;
- Vector3 occRay = transform.position - origin;
- float thinRadius = 0.15f;
- float thickRadius = 0.3f;
- var colPoint = GetCollisionSimple(transform.position, thinRadius, true);
- var colPointThick = GetCollisionSimple(transform.position, thickRadius, false);
- var colPointThickProjectedOnRay = Vector3.Project(colPointThick - origin, occRay.normalized) + origin;
- var vecToProjected = (colPointThickProjectedOnRay - colPointThick).normalized;
- var colPointThickProjectedOnThinCapsule = colPointThickProjectedOnRay - vecToProjected * thinRadius;
- var thin2ThickDist = Vector3.Distance(colPointThickProjectedOnThinCapsule, colPointThick);
- var thin2ThickDistNorm = thin2ThickDist / (thickRadius - thinRadius);
- float currentColDist = Vector3.Distance(origin, colPoint);
- float currentColDistThick = Vector3.Distance(origin, colPointThickProjectedOnRay);
- currentColDist = Mathf.Lerp(currentColDistThick, currentColDist, thin2ThickDistNorm);
- colDist = currentColDist < colDist? currentColDist : Mathf.SmoothStep(colDist, currentColDist, Time.deltaTime*100);
- colDist = Mathf.Min(colDist, 2);
- vec = transform.position - origin;
- transform.position = origin + vec.normalized * colDist;
- Vector3 GetCollisionSimple(Vector3 cameraOptPos, float radius, bool pushByNormal)
- {
- float farEnough = 1;
- RaycastHit occHit;
- Vector3 origin = charHead.position;
- Vector3 occRay = origin - cameraOptPos;
- float dt = Vector3.Dot(transform.forward, occRay);
- if (dt < 0) occRay *= -1;
- if (Physics.SphereCast(origin, radius, occRay.normalized, out occHit, farEnough, mask))
- {
- origin = origin + occRay.normalized * occHit.distance;
- }
- else
- {
- origin += occRay.normalized * farEnough;
- }
- occRay = origin - cameraOptPos;
- if (Physics.SphereCast(origin, radius, -occRay.normalized, out occHit, occRay.magnitude, mask))
- {
- return pushByNormal? occHit.point + occHit.normal*radius : occHit.point;
- }
- else
- {
- return cameraOptPos;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement