首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法修改`UnityEngine.Transform.position的值类型返回值

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

Stack Overflow用户
提问于 2018-12-07 21:26:31
回答 1查看 93关注 0票数 0

我想把它做成当玩家用枪瞄准的时候相机可以稍微放大一点。

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

我尝试过FieldOfView,它可以工作,但这不是我所需要的。相反,我只想真正放大(=更改相机位置的z值)。

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

代码语言:javascript
复制
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做同样的事情吗?

我猜它并不像我想的那么复杂,但这段代码不能工作:

代码语言:javascript
复制
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‘的值类型返回值。请考虑将该值存储在临时变量中”。

有谁能告诉我怎么做才是正确的吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-12-07 22:12:29

我明白了:

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

因此,解决方案将如下所示:

代码语言:javascript
复制
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;
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53670538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档