我在这里写两个方法,一种镜头是跟随主角,但不随着主角旋转而旋转。另一种是镜头是跟随主角,并且随着主角旋转而旋转。两个方法都会用不同的方式写。
第一种,脚本挂在Camera下
public class CameraFollow : MonoBehaviour {
private Transform target; //角色的Transform
public Vector3 Offset; //摄像机与角色的相对位置偏移距离
void Start()
{
//得到角色和偏移
target = GameObject.FindWithTag("Player").transform;//根据Tag获取角色,不懂的看图
Offset = target.transform.position - transform.position;//(如果这个不懂,可以看下面)
}
void Update()
{
//摄像机的位置等于 玩家的位置 减去 偏移距离值
transform.position = target.transform.position - Offset;
//摄像机朝向角色
transform.LookAt(target);
}
}
第二种,脚本一样挂着Camera下
public class CameraFollow : MonoBehaviour {
private Transform target;
public Vector3 offset;
public float smoothing = 10; //移动平滑度(可有可无)
public void Start()
{
target = GameObject.Find("Cube002").transform;
//offset直接在Unity中赋值,详细见图
}
public void LateUpdate()//做摄像机平滑用LateUpdate可以让画面更流畅
{
transform.position = Vector3.Lerp(transform.position,
target.position + target.TransformDirection(offset),
smoothing * Time.deltaTime);
}
}
//这段代码的意思就是:摄像机从原来自身的位置出发到达目标位置(最后一个是平滑值,平滑值越大,镜头跟随越快)
/*首先:offset是角色位置 - 摄像机的位置,是一个向量(方向+距离)
此时的向量是一个局部向量(并不是世界坐标下的向量)*/
/*然后:target.TransformDirection(offset)的意思就是,
将自身相对坐标的方向转换成世界坐标下的方向,这样摄像机才能保持在世界坐标下跟随角色/物体*/
红色的线就是offset,即摄像机与物体(角色)的距离
以上就这些。
结尾:快速获取offset;
第一步:
先在Scene模式下,找到合适的屏幕位置作为摄像机的位置,然后进行上图流程。
第二步:
将MainCamera放到需要跟随的物体上(脚本要事先先挂上)。
第三步:把MainCamera拖回原来的位置
这样获取的offset的向量方便快捷,又能达到自己想要的结果,是非常好的一种方法。