Unity的 2D 游戏的摄像机移动界限设置一种方法

挂给摄像机的 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);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值