无法修改"UnityEngine.Transform.position"的值类型返回值



我想这样做,当玩家用枪瞄准时,相机会放大一点。

摄影机是玩家游戏对象的父对象。

我试过FieldOfView,它很有效,但这不是我需要的。相反,我只想真正放大(=更改相机位置的z值(。

当我使用FieldOfView时,我使用了以下代码:

private IEnumerator LerpFoV(float fov)
{
// lerping a value in this way may take quite some time to reach the exact target value, so we will just stop lerping when the difference is small enough, i.e 0.05
float dif = Mathf.Abs(camera.fieldOfView - fov);
while (dif > 0.05)
{
camera.fieldOfView = Mathf.Lerp(camera.fieldOfView, fov, 0.1f);
// update the difference
dif = Mathf.Abs(camera.fieldOfView - fov);
yield return 0;
}
camera.fieldOfView = fov;
yield return 0;
}

有人能告诉我如何对位置z进行同样的处理吗?

我想它没有我想象的那么复杂,但这个代码不起作用:

private IEnumerator LerpZPosition(float zValue)
{
float dif = Mathf.Abs(camera.transform.position.z - zValue);
while (dif > 0.05)
{
camera.transform.position.z = Mathf.Lerp(camera.transform.position.z, zValue, 0.1f);
// update the difference
dif = Mathf.Abs(camera.transform.position.z - zValue);
yield return 0;
}
camera.transform.position.z = zValue;
yield return 0;
}

编译器告诉我"无法修改'UnityEngine.Transform.position'的值类型返回值。请考虑将该值存储在临时变量中"。

有人能告诉我如何正确地做那件事吗?

谢谢。

我得到了:

不能直接更改camera.transform.position.x | y | z,但必须创建一个新的Vector3对象。

所以解决方案看起来是这样的:

private IEnumerator LerpZPosition(float zValue)
{
float dif = Mathf.Abs(camera.transform.position.z - zValue);
while (dif > 0.05)
{
float fLerp = Mathf.Lerp(camera.transform.position.z, zValue, 0.1f);
Debug.Log("fLerp: " + fLerp.ToString());
Vector3 v = new Vector3(camera.transform.position.x, camera.transform.position.y, fLerp);
camera.transform.position = v;
dif = Mathf.Abs(camera.transform.position.z - zValue);
yield return 0;
}
camera.transform.position = new Vector3(camera.transform.position.x, camera.transform.position.y, zValue);
yield return 0;
}

最新更新