我想做到这一点,以便当玩家用枪瞄准时相机会稍微放大。
相机是玩家游戏对象的父代。
我已经尝试了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'的值类型返回值。请考虑将值存储在临时变量中。”
有人可以告诉我如何正确进行操作吗?
谢谢。
答案 0 :(得分:-1)
我明白了
无法直接更改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;
}