Unity2D摄像头根据玩家到对象的距离进行缩小,当对象离对象更远时进行放大

时间:2019-06-13 10:11:09

标签: c# unity3d scale

我正在开发侧滚动2D平台游戏,我有一会儿在背景中有一个焦点,我想向玩家展示一个“ aw”时刻,并且我想缩小相机显示该时刻,然后再次放大。我想您可以说,当他们要显示的对象对于相机的大小来说太大时,可以像《死亡的甘比特》或《空心骑士》一样做。

试图从某个区域的玩家那里获得变换,并计算到我希望相机尺寸达到最大的点的距离,然后从中计算出一个百分比,以乘以尺寸差会破坏视口,使视口变亮或缩小到允许的最大单位。

预期结果是使相机缩小到世界上某个点的距离,超过该点将停止缩小,向后移动应使用初始OrtographicSize放大到播放器。

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您可以这样做:

public Transform Target1;
public Transform Target2;

public float sensetivity = 1f;
public float maxOrthographicSize = 10f;

Camera thisCam;
float minOrthographicSize = 5f;

private void Start() {
    thisCam = GetComponent<Camera>();
    minOrthographicSize = thisCam.orthographicSize;
}
void Update()
{
    thisCam.orthographicSize = minOrthographicSize + Mathf.Clamp(Vector2.Distance(Target1.position, Target2.position) * sensetivity, 0f, maxOrthographicSize);
}

在此解决方案中,minOrthographicSize仅在Target1Target2处于相同位置时才能发生,以进行更改以实现:

public Transform Target1;
public Transform Target2;

public float minOrhtographicDistance = 5f;
public float sensetivity = 1f;
public float maxOrthographicSize = 10f;

Camera thisCam;
float min = 5f;

private void Start() {
    thisCam = GetComponent<Camera>();
    min = thisCam.orthographicSize;
}
void Update()
{
    thisCam.orthographicSize = min + Mathf.Clamp((Vector2.Distance(Target1.position, Target2.position) - minOrhtographicDistance) * sensetivity, 0f, maxOrthographicSize);
}

在此解决方案中,对于minOrthographicSize距离,正交大小将为minOrhtographicDistance,然后根据目标之间的距离而改变。