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