public override void MoveCamera(float zoomValue) { PlacementRelativeModel placement = this.GetPlacementRelativeModel(); base.MoveCamera(zoomValue); _desiredDistanceToModelCenter = (_modelPosition - transform.position).magnitude; this.CorrectTransformByModelBounds(placement); }
PlacementRelativeModel GetPlacementRelativeModel() { PlacementRelativeModel result = new PlacementRelativeModel(); Vector3 directionToModelCenter = _modelPosition - transform.position; result.isXPositive = directionToModelCenter.x < 0; result.isYPositive = directionToModelCenter.y < 0; result.isZPositive = directionToModelCenter.z < 0; return(result); }
void CorrectTransformByModelBounds(PlacementRelativeModel placement) { Vector3 cameraDirection = (this.Target - transform.position).normalized; if (!_collisionsDetector.IsPointInModel(transform.position)) { float distanceToTarget = (this.Target - transform.position).magnitude; float delta = distanceToTarget - _desiredDistanceToModelCenter; if (delta > 0) { transform.position += cameraDirection * delta; } } float step = 0.005f; while (_collisionsDetector.IsPointInModel(transform.position)) { transform.position += -cameraDirection * step; } transform.LookAt(this.Target); }