我有一台摄像机跟随着使用“ SmoothDamp”的播放器,但是我希望停止摄像机超出背景精灵的范围。
我可以使用“ SmoothDamp”单独执行此操作,但不能使用“ Mathf.Clamp”单独执行此操作。
transform.position = Vector3.SmoothDamp(transform.position, targetPos, ref velocity, smoothTime);
要么
bgBounds = GameObject.Find("Background").GetComponentInChildren<SpriteRenderer>();
bottomLeftLimit = bgBounds.sprite.bounds.min;
topRightLimit = bgBounds.sprite.bounds.max;
transform.position = new Vector3(Mathf.Clamp(transform.position.x, bottomLeftLimit.x, topRightLimit.x), Mathf.Clamp(transform.position.y, bottomLeftLimit.y, topRightLimit.y), transform.position.z);
最佳答案
为了确保正交摄影机的边界不会留下Bounds
,您需要将摄影机视图的范围包括在内以填充到夹具上。
您可以使用camera.orthographicSize
和camera.aspect
来获取摄像机视图的范围。
// Clamp the target position to be within the boundaries
float cameraVertExtent = camera.orthographicSize;
float cameraHorizExtent = camera.orthographicSize * camera.aspect;
Vector3 clampedTargetPos = new Vector3(
Mathf.Clamp(targetPos.x, bottomLeftLimit.x+cameraHorizExtent, topRightLimit.x-cameraHorizExtent),
Mathf.Clamp(targetPos.y, bottomLeftLimit.y+cameraVertExtent, topRightLimit.y-cameraVertExtent),
transform.position.z
);
// SmoothDamp to the clamped target position.
transform.position = Vector3.SmoothDamp(transform.position, clampedTargetPos, ref velocity, smoothTime);
如果您没有使用正交摄影机,则需要找到摄影机视图的边缘与背景相交的位置,并从那里解决必要的填充。
关于c# - 带有定位夹的SmoothDamp,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53505383/