摄像机控制
1.新建脚本CameraController.cs
2.绑定主摄像头
3.设置target
//摄像机跟随目标变动
transform.position = new Vector3(target.position.x, transform.position.y, transform.position.z);
4.设置背景跟随摄像机
//背景移动x距离
float amountToMoveX = transform.position.x - lastXPos;
//背景跟随摄像机移动,中间的比远方的慢
farBackground.position += new Vector3(amountToMoveX, 0f, 0f);
middleBackground.position += new Vector3(amountToMoveX * 0.5f, 0f, 0f);
//重设上一帧
lastXPos = transform.position.x;
5.设置摄像机上下移动效果及限制
定义最小最大高度
public float minHeight; //摄像机最小高度
public float maxHeight; //摄像机最大高度
移动摄像机位置,以获取最小最大高度
//摄像机跟随目标变动
transform.position = new Vector3(target.position.x, Mathf.Clamp(target.position.y, minHeight, maxHeight), transform.position.z);
重新设置上一帧坐标信息
//上一帧时摄像机的位置
//private float lastXPos;
private Vector2 lastPos;
//背景移动x距离
//float amountToMoveX = transform.position.x - lastXPos;
Vector2 amountToMove = new Vector2(transform.position.x - lastPos.x, transform.position.y - lastPos.y);
//背景跟随摄像机移动,中间的比远方的慢
farBackground.position = farBackground.position + new Vector3(amountToMove.x, amountToMove.y, 0f);
middleBackground.position += new Vector3(amountToMove.x, amountToMove.y, 0f) * .5f;
//重设上一帧
//lastXPos = transform.position.x;
lastPos = transform.position;
6.代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour
{
//
public Transform target; //目标主体
public Transform farBackground, middleBackground; //背景目标
public float minHeight; //摄像机最小高度
public float maxHeight; //摄像机最大高度
//上一帧时摄像机的位置
//private float lastXPos;
private Vector2 lastPos;
// Start is called before the first frame update
void Start()
{
//初始化上一帧位置
//lastXPos = transform.position.x;
lastPos = transform.position;
}
// Update is called once per frame
void Update()
{
//摄像机跟随目标变动
/* transform.position = new Vector3(target.position.x, target.position.y, transform.position.z);
float clampedY = Mathf.Clamp(transform.position.y, minHeight, maxHeight);
transform.position = new Vector3(transform.position.x, clampedY, transform.position.z); */
transform.position = new Vector3(target.position.x, Mathf.Clamp(target.position.y, minHeight, maxHeight), transform.position.z);
//背景移动x距离
//float amountToMoveX = transform.position.x - lastXPos;
Vector2 amountToMove = new Vector2(transform.position.x - lastPos.x, transform.position.y - lastPos.y);
//背景跟随摄像机移动,中间的比远方的慢
farBackground.position = farBackground.position + new Vector3(amountToMove.x, amountToMove.y, 0f);
middleBackground.position += new Vector3(amountToMove.x, amountToMove.y, 0f) * .5f;
//重设上一帧
//lastXPos = transform.position.x;
lastPos = transform.position;
}
}