在 Unity3d 中,相机总是在玩家后面

HB1*_*963 3 c# camera unity-game-engine

我现在正在为退出而苦苦挣扎。我有一个游戏对象,它是一个球体,它是我在 3d 地形上的播放器。我有一个相机,它总是与玩家保持固定距离,跟随它跟随下面的脚本:

public GameObject player;
private Vector3 offset;


// Use this for initialization
void Start () {
    offset = transform.position - player.transform.position;


}

void LateUpdate () {

    transform.position = player.transform.position + offset;
}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好。然而我真正想要的是相机随着玩家旋转,所以它总是看球体移动的方向,但总是在玩家后面保持相同的固定距离,这样玩家在相机视图中总是可见的.

有很多脚本可用,但到目前为止我所看到的曾经的问题是摄像机确实随着玩家旋转,但是因为玩家实际上是一个滚动球体,所以摄像机视图也在滚动和转动。

到目前为止我找到的最好的脚本如下,但是这个脚本和其他脚本有同样的问题,相机随着播放器滚动。

public Transform target;
public float distance = 3.0f;
public float height = 3.0f;
public float damping = 5.0f;
public bool smoothRotation = true;
public bool followBehind = true;
public float rotationDamping = 10.0f;

void Update () {
    Vector3 wantedPosition;
    if(followBehind)
        wantedPosition = target.TransformPoint(0, height, -distance);
    else
        wantedPosition = target.TransformPoint(0, height, distance);

    transform.position = Vector3.Lerp (transform.position, wantedPosition, Time.deltaTime * damping);

    if (smoothRotation) {
        Quaternion wantedRotation = Quaternion.LookRotation(target.position - transform.position, target.up);
        //Quaternion ownRotation = Quaternion.RotateTowards;
        transform.rotation = Quaternion.Slerp (transform.rotation, wantedRotation, Time.deltaTime * rotationDamping);
    }
    else transform.LookAt (target, target.up);
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决这个问题吗?

小智 7

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraFollow : MonoBehaviour {

    public GameObject player;
    public float cameraDistance = 10.0f;

    // Use this for initialization
    void Start () {
    }

    void LateUpdate ()
    {
        transform.position = player.transform.position - player.transform.forward * cameraDistance;
        transform.LookAt (player.transform.position);
        transform.position = new Vector3 (transform.position.x, transform.position.y + 5, transform.position.z);
    }
}
Run Code Online (Sandbox Code Playgroud)