我在这里写两个方法,一种镜头是跟随主角,但不随着主角旋转而旋转。另一种是镜头是跟随主角,并且随着主角旋转而旋转。两个方法都会用不同的方式写。
第一种,脚本挂在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);
    }

}

unity调用摄像头画面翻转 unity摄像机跟随角色旋转_世界坐标


第二种,脚本一样挂着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)的意思就是,
将自身相对坐标的方向转换成世界坐标下的方向,这样摄像机才能保持在世界坐标下跟随角色/物体*/

unity调用摄像头画面翻转 unity摄像机跟随角色旋转_Unity3D摄像机跟随主角_02


红色的线就是offset,即摄像机与物体(角色)的距离

以上就这些。

结尾:快速获取offset;

unity调用摄像头画面翻转 unity摄像机跟随角色旋转_Unity3D摄像机跟随主角_03


第一步:

先在Scene模式下,找到合适的屏幕位置作为摄像机的位置,然后进行上图流程。

第二步:

将MainCamera放到需要跟随的物体上(脚本要事先先挂上)。

unity调用摄像头画面翻转 unity摄像机跟随角色旋转_世界坐标_04


第三步:把MainCamera拖回原来的位置

这样获取的offset的向量方便快捷,又能达到自己想要的结果,是非常好的一种方法。