我想把它做成当玩家用枪瞄准的时候相机可以稍微放大一点。
摄影机是玩家游戏对象的子对象。
我尝试过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‘的值类型返回值。请考虑将该值存储在临时变量中”。
有谁能告诉我怎么做才是正确的吗?
谢谢。
发布于 2018-12-07 22:12:29
我明白了:
不能直接更改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;
}https://stackoverflow.com/questions/53670538
复制相似问题