相机仅在玩家的Z轴上跟随玩家Unity 3D

时间:2018-12-11 13:52:07

标签: c# unity3d

我让脚本跟随摄像机跟随玩家,但是我不希望它跟随他的X轴。因此,它只能在玩家的Z轴上平稳地跟随玩家。有什么建议吗?

相机脚本:

public Transform Ball;
public float SmoothSpeed = 0.125f;
public Vector3 offset;
bool MoveCamera = true;


void Start () {

}


public void FixedUpdate () {

    if(MoveCamera == true){

        Vector3 desiredPosition = Ball.position + offset;
        Vector3 SmoothedPosition = Vector3.Lerp(transform.position, desiredPosition, SmoothSpeed);
        transform.position = SmoothedPosition;
    }


    if (transform.position.z >= 2f)
    {
        MoveCamera = false;
    }
}

3 个答案:

答案 0 :(得分:0)

    public gameObject toFollow;
    Vector3 camDistance;
    public void Start(){
    camDistance = toFollow.transform.position-Camera.main.position;
    }

    public void Update(){
    Vector3 following = new Vector3(Camera.main.x,Camera.main.z,toFollow.transform.position.z-Camera.main.position.z);

    Camera.main.transform.position = following;

}

我只是把这些放在一起,所以可能需要一些调整,但是它应该可以带您到需要的地方。或者...。您可以向相机添加刚体,然后在检查器中选中x和y轴上的约束框。这将使其仅在z轴上移动(如果您沿此路线行驶,请记住也要为相机刚体转动重力)

答案 1 :(得分:0)

那只改变z分量呢?

public void FixedUpdate () {

    if(MoveCamera == true){

       Vector3 desiredPosition = new Vector3(0, Ball.position.y + offset.y, Ball.position.z + offset.z);
        Vector3 SmoothedPosition = Vector3.Lerp(transform.position, desiredPosition, SmoothSpeed);
        transform.position = SmoothedPosition;
    }


    if (transform.position.z >= 2f)
    {
        MoveCamera = false;
    }
}

答案 2 :(得分:0)

2019年的每个人都需要相机使其3D角色偏离特定位置吗?这是一个简单的解决方案!将此脚本附加到要跟随播放器的摄像机。在Unity编辑器中选择播放器作为目标。

此脚本将摄像机的新位置设置为

(编辑:LaTeX到哪里去了?)

$v = <targetPosition.x + xOffset, targetPosition.y + yOffset, targetPosition.z + zOffset>$

此脚本的优点:

  • 即使角色转过身,摄影机的方向也不会改变(因为摄影机不是播放器的父级)。
  • 不管玩家处于什么位置都可以工作

限制:  -由于相机方向是固定的,因此您需要确保角色不会被风景遮挡。  -这种相机控制方式最适合于第三人称正投影。

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

public class CameraController : MonoBehaviour
{

    public Transform target;
    Vector3 targetPos;

    void Update()
    {
        targetPos = target.position;
        transform.position = new Vector3(targetPos.x + 10f, targetPos.y + 8.571067812f, targetPos.z - 10f);
        // transform.LookAt(target.transform);
    }
}

我的用例需要正交投影。正射角通常为30度的倾斜角,因此我的偏移量是后10个单位,超过10个单位,并且上斜边的一半(即,上10 * sqrt2 * 1/2)。我也将y位置增加了角色的高度(1.5个单位),我认为这将为相机目标提供更好的中心。这样得出的y偏移约为8.571067812。