存储不同对象的信息Unity C#

问题描述

我正在尝试存储有关由不同游戏对象中的 6 个独立面构建的立方体的信息。所以我可以有这个立方体的多个版本,每个版本都有不同的参数,比如颜色、大小、每个面的分辨率等。重要的是,最后我有一个具有完全不同值的对象的 n 个版本或副本。 面作为子对象生成,仅包含网格渲染器和网格过滤器组件。

我的第一次尝试是用现有的立方体对象制作一个预制件,然后在其他地方实例化这个预制件(比如在不同场景中的占位符变换)。 当我用现有的立方体创建一个预制件时,每个面的 MeshFilter 都是空的/空的。

另一个尝试是考虑以某种方式保存所有参数,然后将它们应用到另一个立方体。但我不确定如何以正确的方式做到这一点?也许让整个事情成为一个可编写脚本的对象,或者我不知道。

另一个核心问题是,如果我复制多维数据集,然后更改其中一个的值,所有多维数据集都会因生成多维数据集的方式而改变。任何如何解决这个问题的建议都会有很大帮助!

FACES.cs:

    private Mesh mesh;
    private int resolution;
    private Vector3 localUp;

    private Vector3 axisA,axisB;

    public Face(Mesh mesh,int resolution,Vector3 localUp)
    {
        this.mesh = mesh;
        this.resolution = resolution;
        this.localUp = localUp;

        axisA = new Vector3(localUp.y,localUp.z,localUp.x);
        axisB = Vector3.Cross(localUp,axisA);
    }

    public void ConstructMesh()
    {
        Vector3[] vertices = new Vector3[resolution * resolution];
        // getting nb of vertices; nmb of faces = (r-1)^2; *2 for triangles; *3 to get all vertices for every triangle 
        int[] triangles = new int[(resolution - 1) * (resolution - 1) * 6];

        int triangleIndex = 0;

        for (int y = 0; y < resolution; y++)
        {
            for (int x = 0; x < resolution; x++)
            {
                // index of vertices
                int i = x + y * resolution;
                Vector2 percent = new Vector2(x,y) / (resolution - 1);
                Vector3 pointOnUnitCube = localUp + (percent.x - 0.5f) * 2 * axisA + (percent.y - 0.5f) * 2 * axisB;
                // get vertices same distance to center of cube
                Vector3 pointOnUnitSphere = pointOnUnitCube.normalized;
                // calculate elevation and set them to the vertices
                vertices[i] = pointOnUnitSphere;

                // check if index is not outside the face
                if (x != resolution - 1 && y != resolution - 1)
                {
                    // first triangle,clockwise
                    triangles[triangleIndex] = i;
                    triangles[triangleIndex + 1] = i + resolution + 1;
                    triangles[triangleIndex + 2] = i + resolution;
                    // second triangle,clockwise
                    triangles[triangleIndex + 3] = i;
                    triangles[triangleIndex + 4] = i + 1;
                    triangles[triangleIndex + 5] = i + resolution + 1;
                    // update triangleIndex by 6 because we created 6 triangle
                    triangleIndex += 6;
                }
            }
        }
        mesh.Clear();
        mesh.vertices = vertices;
        mesh.triangles = triangles;
        mesh.RecalculateNormals();

    }

CUBE.CS:

public int resolution = 5;

[SerializeField,HideInInspector]
private MeshFilter[] meshFilters;
private Face[] faces;


void Initialize()
{
    if (meshFilters == null || meshFilters.Length == 0)
    {
        meshFilters = new MeshFilter[6];
    }        
    faces = new Face[6];

    // all cardinal directions
    Vector3[] directions = { Vector3.up,Vector3.down,Vector3.left,Vector3.right,Vector3.forward,Vector3.back };


    for (int i = 0; i < 6; i++)
    {
        if(meshFilters[i] == null)
        {
            GameObject meshObj = new GameObject("mesh");
            meshObj.transform.parent = transform;

            meshObj.AddComponent<MeshRenderer>().sharedMaterial = new Material(Shader.Find("Universal Render Pipeline/Lit"));
            meshFilters[i] = meshObj.AddComponent<MeshFilter>();
            meshFilters[i].sharedMesh = new Mesh();                               
        }

        // generate Faces
        faces[i] = new Face(meshFilters[i].sharedMesh,resolution,directions[i]);
    }
}

void GenerateMesh()
{
    foreach (Face face in faces)
    {
        face.ConstructMesh();
    }
}

private void OnValidate()
{
    Initialize();
    GenerateMesh();
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...