我已经为游戏编写了这段代码,我想要的是统一翻转纹理上的法线。我有一个模型和一个纹理,希望该纹理位于球体模型内部,而不是外部。我想通过在翻转的纹理上方的球体内部的图像周围移动相机来创建360度全景效果。

现在,当我第一次按下“播放”按钮时,它可以正常工作,但是随后,当我停止播放并想再次播放时,我看不到桌面,也看不到周围的环境。

看来我尝试播放每2次就可以了。我有点新,不知道我的错误在哪里。

using UnityEngine;
using System.Collections;

public class InvertObjectNormals : MonoBehaviour
{
    public GameObject SferaPanoramica;

    void Awake()
    {
        InvertSphere();
    }

    void InvertSphere()
    {
        Vector3[] normals = SferaPanoramica.GetComponent<MeshFilter>().sharedMesh.normals;
        for(int i = 0; i < normals.Length; i++)
        {
            normals[i] = -normals[i];
        }
        SferaPanoramica.GetComponent<MeshFilter>().sharedMesh.normals = normals;

        int[] triangles = SferaPanoramica.GetComponent<MeshFilter>().sharedMesh.triangles;
        for (int i = 0; i < triangles.Length; i+=3)
        {
            int t = triangles[i];
            triangles[i] = triangles[i + 2];
            triangles[i + 2] = t;
        }

        SferaPanoramica.GetComponent<MeshFilter>().sharedMesh.triangles= triangles;
    }
}

最佳答案

您正在编辑sharedMesh,这将导致更改继续存在。发生的情况是,当您第二次点击运行时,您正在反转已经反转的网格,使其再次朝右侧显示。

代替

Vector3[] normals = SferaPanoramica.GetComponent<MeshFilter>().sharedMesh.normals;


尝试

Vector3[] normals = SferaPanoramica.GetComponent<MeshFilter>().mesh.normals;


有关更多信息,请参见here

关于unity3d - Unity 3D/球体中的翻转法线,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36423846/

10-12 02:07