挂给摄像机的 C# 脚本
public class Demo: MonoBehaviour {
// 我的背景图片为关于 y 轴对称的
// 摄像机的延迟时间
public float smoothTime = 0.2f;
// 背景图片
public SpriteRenderer bgBounds;
// 角色
public Transform target;
// 用于缓冲摄像机
private Vector3 velocity = Vector3.one;
// 摄像机
private Camera mainCamera;
// 背景图片的宽度
private float bgWidth;
// 背景图片的宽度
private float bgHeight;
void Start() {
// 拿到摄像机
mainCamera = GetComponent<Camera> ();
// 获取背景图片宽度
bgWidth = bgBounds.sprite.bounds.size.x * bgBounds.transform.localScale.x;
// 获取背景图片宽度
bgHeight = bgBounds.sprite.bounds.size.y * bgBounds.transform.localScale.y;
}
// 比 Update 慢一帧执行
void LateUpdate () {
// 摄像机的一半宽度
float hight = mainCamera.orthographicSize;
// 摄像机的一半高度,会随分辨率的宽高比成正比
// 用高度乘以分辨率的宽高比得到宽度
float width = hight * Screen.width / Screen.height;
// 要移动到的位置
Vector3 temp;
// 当角色的横坐标 + 摄像机的一半宽度大于背景图片的一半宽度,则为到了边界,把摄像机的宽度设为临界点
if (width + Mathf.Abs (target.position.x) > bgWidth / 2) {
temp = new Vector3 (Mathf.Sign(target.position.x) * (bgWidth / 2 - width), target.position.y, transform.position.z);
} else {
// 否则则为正常移动
temp = new Vector3 (target.position.x, target.position.y, transform.position.z);
}
// 摄像机高度的临界点同理...
// 实现摄像机的延迟移动
transform.position = Vector3.SmoothDamp (transform.position, temp, ref velocity, smoothTime);
}
}