// raycasts towards selected point and returns hit result private void CheckCollisionsFor(Vector3 fromPoint, Vector3 toPoint, ref CameraWhisker result) { RaycastHit outHit; result.distance = (toPoint - fromPoint).magnitude; result.hitPoint = toPoint; result.hitNormal = Vector3.zero; Vector3 direction = (toPoint - fromPoint).normalized; bool hasHit = Physics.Raycast( fromPoint, direction, out outHit, result.distance, 1 // Default layer ); result.hasHit = hasHit; result.direction = direction; if (hasHit) { result.distance = outHit.distance; result.hitPoint = outHit.point; result.hitNormal = outHit.normal; } }
// searches through (WHISKERS_COUNT/2) right raycasts and returns the one with the closest hit private CameraWhisker FindClosestRightObstacle() { float minDistance = float.MaxValue; // default 45 deg whisker CameraWhisker closestObstacleWhisker = null; for (int i = (int)(WHISKERS_COUNT * 0.5f); i < WHISKERS_COUNT; i++) { Vector3 direction = Vector3.Slerp(transform.right, transform.forward, (WHISKERS_COUNT - i) / (WHISKERS_COUNT - WHISKERS_COUNT * 0.5f)); // rotate the direction towards the character direction = Quaternion.Euler(0f, -m_lookOffset, 0f) * direction; CheckCollisionsFor(transform.position, transform.position + direction * m_whiskerLength, ref whiskers[i]); if (whiskers[i].hasHit) { if (whiskers[i].distance < minDistance) { closestObstacleWhisker = whiskers[i]; minDistance = whiskers[i].distance; } } } return(closestObstacleWhisker); }
void Awake() { for(int i = 0; i < WHISKERS_COUNT; i++) whiskers[i] = new CameraWhisker(); tempMaxDistance = maxDistance; }
void Awake() { for (int i = 0; i < WHISKERS_COUNT; i++) { whiskers[i] = new CameraWhisker(); } tempMaxDistance = maxDistance; }
public void CollectCameraWhiskers() { Vector3 targetFocusDir = (cameraFocusTarget.position - transform.position).normalized; CheckCollisionsFor(cameraFocusTarget.position, transform.position, ref lineOfSight); CheckCollisionsFor(transform.position, transform.position - targetFocusDir * tempMaxDistance, ref backWhisker); left = FindClosestLeftObstacle(); right = FindClosestRightObstacle(); }
// raycasts towards selected point and returns hit result private void CheckCollisionsFor(Vector3 fromPoint, Vector3 toPoint, ref CameraWhisker result) { RaycastHit outHit; result.distance = (toPoint - fromPoint).magnitude; result.hitPoint = toPoint; result.hitNormal = Vector3.zero; Vector3 direction = (toPoint - fromPoint).normalized; bool hasHit = Physics.Raycast( fromPoint, direction, out outHit, result.distance, 1 // Default layer ); result.hasHit = hasHit; result.direction = direction; if(hasHit) { result.distance = outHit.distance; result.hitPoint = outHit.point; result.hitNormal = outHit.normal; } }