错误CS0103:当前上下文中的名称[名称]不存在

Carl4020

新成员
加入
92,2020
消息
3
编程经验
5-10
你好。基本上我有时吮吸代码,我在故障排除时很糟糕。我在myshgenerator.cs中获得这些错误:

资产\ scripts \ OpenWorld \ Processural Landmass Generation \ Meshgenerator.cs(52,32):错误CS0103:当前上下文中的名称'高度核心'不存在
资产\ scripts \ OpenWorld \ Processural Landmass Generation \ Meshgenerator.cs(52,53):错误CS0103:当前上下文中不存在名称'高度图'
assets \ scripts \ openworld \ processural landmass生成\ meshgenerator.cs(52,72):错误cs0103:当前上下文中的名称'heightmultiplier'不存在
我将我的代码发布到讨厌中: 哈特宾
在这里,第52行是:
浮动高度=高度.Evaluate(高度图[x,y])*高度倍增倍数;

Mod编辑 - 来自主题绑定的代码帖子:
C#:
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;

public static class MeshGenerator
{
    public static MeshData GenerateTerrainMesh(float[,] borderedSizeMap, float borderedSizeMultiplier, AnimationCurve _borderedSizeCurve, int levelOfDetail)
    {
        AnimationCurve borderedSizeCurve = new AnimationCurve(_borderedSizeCurve.keys);

        int borderedSize = borderedSizeMap.GetLength(0);
        int meshSize = borderedSize - 2;

        float topLeftX = (meshSize - 1) / -2f;
        float topLeftZ = (meshSize - 1) / 2f;

        int meshSimplificationIncrement = (levelOfDetail == 0) ? 1 : levelOfDetail * 2;
        int verticesPerLine = (meshSize - 1) / meshSimplificationIncrement + 1;

        MeshData meshData = new MeshData(verticesPerLine);

        int[,] vertexIndicesMap = new int[borderedSize, borderedSize];
        int meshVertexIndex = 0;
        int borderVertexIndex = -1;

        for (int y = 0; y < borderedSize; y += meshSimplificationIncrement)
        {
            for (int x = 0; x < borderedSize; x += meshSimplificationIncrement)
            {
                bool isBorderVertex = y == 0 || y == borderedSize - 1 || x == 0 || x == borderedSize - 1;

                if (isBorderVertex)
                {
                    vertexIndicesMap[x, y] = borderVertexIndex;
                    borderVertexIndex--;
                }
                else
                {
                    vertexIndicesMap[x, y] = meshVertexIndex;
                    meshVertexIndex++;
                }
            }
        }

                for (int y = 0; y < borderedSize; y+= meshSimplificationIncrement)
        {
            for (int x = 0; x < borderedSize; x+= meshSimplificationIncrement)
            {
                int vertexIndex = vertexIndicesMap[x, y];
                Vector2 percent = new Vector2((x - meshSimplificationIncrement) / (float)meshSize, (y - meshSimplificationIncrement) / (float)meshSize);
                浮动高度=高度.Evaluate(高度图[x,y])*高度倍增倍数; 
                Vector3 vertexPosition = new Vector3(topLeftX + percent.x * meshSize, height, topLeftZ - percent.y * meshSize);

                meshData.AddVertex(vertexPosition, percent, vertexIndex);
                
                if (x < borderedSize - 1 && y < borderedSize - 1)
                {
                    int a = vertexIndicesMap[x, y];
                    int b = vertexIndicesMap[x + meshSimplificationIncrement, y];
                    int c = vertexIndicesMap[x, y + meshSimplificationIncrement];
                    int d = vertexIndicesMap[x + meshSimplificationIncrement, y + meshSimplificationIncrement];
                    meshData.AddTriangle(a, d, c);
                    meshData.AddTriangle(d, a, b);
                }

                vertexIndex++;
            }
        }

        return meshData;

    }
}

public class MeshData
{
    Vector3[] vertices;
    int[] triangles;
    Vector2[] uvs;

    Vector3[] borderVertices;
    int[] borderTriangles;

    int triangleIndex;
    int borderTriangleIndex;

    public MeshData(int verticesPerLine)
    {
        vertices = new Vector3[verticesPerLine * verticesPerLine];
        uvs = new Vector2[verticesPerLine * verticesPerLine];
        triangles = new int[(verticesPerLine - 1) * (verticesPerLine - 1) * 6];

        borderVertices = new Vector3[verticesPerLine * 4 + 4];
        borderTriangles = new int[24 * verticesPerLine];
    }

    public void AddVertex(Vector3 vertexPosition, Vector2 uv, int vertexIndex)
    {
        if (vertexIndex < 0)
        {
            borderVertices[-vertexIndex - 1] = vertexPosition;
        }
        else
        {
            vertices[vertexIndex] = vertexPosition;
            uvs[vertexIndex] = uv;
        }
    }

    public void AddTriangle(int a, int b, int c)
    {
        if (a < 0 || b < 0 || c < 0)
        {
            borderTriangles[borderTriangleIndex] = a;
            borderTriangles[borderTriangleIndex + 1] = b;
            borderTriangles[borderTriangleIndex + 2] = c;
            borderTriangleIndex += 3;
        }
        else
        {
            triangles[triangleIndex] = a;
            triangles[triangleIndex + 1] = b;
            triangles[triangleIndex + 2] = c;
            triangleIndex += 3;
        }
    }

    Vector3[] CalculateNormals()
    {

        Vector3[] vertexNormals = new Vector3[vertices.Length];
        int triangleCount = triangles.Length / 3;
        for (int i = 0; i < triangleCount; i++)
        {
            int normalTriangleIndex = i * 3;
            int vertexIndexA = triangles[normalTriangleIndex];
            int vertexIndexB = triangles[normalTriangleIndex + 1];
            int vertexIndexC = triangles[normalTriangleIndex + 2];

            Vector3 triangleNormal = SurfaceNormalFromIndices(vertexIndexA, vertexIndexB, vertexIndexC);
            vertexNormals[vertexIndexA] += triangleNormal;
            vertexNormals[vertexIndexB] += triangleNormal;
            vertexNormals[vertexIndexC] += triangleNormal;
        }

        int borderTriangleCount = borderTriangles.Length / 3;
        for (int i = 0; i < triangleCount; i++)
        {
            int normalTriangleIndex = i * 3;
            int vertexIndexA = borderTriangles[normalTriangleIndex];
            int vertexIndexB = borderTriangles[normalTriangleIndex + 1];
            int vertexIndexC = borderTriangles[normalTriangleIndex + 2];

            Vector3 triangleNormal = SurfaceNormalFromIndices(vertexIndexA, vertexIndexB, vertexIndexC);
            if (vertexIndexA >= 0)
            {
                vertexNormals[vertexIndexA] += triangleNormal;
            }
            if (vertexIndexB >= 0)
            {
                vertexNormals[vertexIndexB] += triangleNormal;
            }
            if (vertexIndexC >= 0)
            {
                vertexNormals[vertexIndexC] += triangleNormal;
            }
        }

        for (int i = 0; i < vertexNormals.Length; i++)
        {
            vertexNormals[i].Normalize();
        }

        return vertexNormals;

    }

    Vector3 SurfaceNormalFromIndices(int indexA, int indexB, int indexC)
    {
        Vector3 pointA = (indexA < 0) ? borderVertices[-indexA - 1] : vertices[indexA];
        Vector3 pointB = (indexB < 0) ? borderVertices[-indexB - 1] : vertices[indexB];
        Vector3 pointC = (indexC < 0) ? borderVertices[-indexC - 1] : vertices[indexC];

        Vector3 sideAB = pointB - pointA;
        Vector3 sideAC = pointC - pointA;
        return Vector3.Cross(sideAB, sideAC).normalized;
    }

    public Mesh CreateMesh()
    {
        Mesh mesh = new Mesh();
        mesh.vertices = vertices;
        mesh.triangles = triangles;
        mesh.uv = uvs;
        mesh.normals = CalculateNormals();
        return mesh;
    }

}
 
最后编辑了主持人:

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,901
地点
切萨皮克,va.
编程经验
10+
请在此处在代码标记中发布代码,以便它具有与此线程相同的寿命。这个线程的机会是您的汉语帖子。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,901
地点
切萨皮克,va.
编程经验
10+
看起来你从这里窃听代码并开始更改变量名:

 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,731
地点
悉尼,澳大利亚
编程经验
10+
如果您被告知那些上下文中的那些名称不存在,那么最可能的原因是在该上下文中不存在这些名称。也许向我们展示上下文中的代码,即您认为介绍这些名称的位置,这样他们应该存在?

作为一般的建议,也许您应该在编码和故障排除时尝试更好地变得更好。声明您在代码中使用的变量是基本的一个概念,因为在编程中,如果您不明白,那么您不明白编程。在这种情况下,网格发生器可能是您现在应该单独留下的东西,并通过更多基本项目建立您的知识和技能。如果你试图在走路之前跑步,你将继续让别人倾向于你的皮肤膝盖,这不是学习的方式。作为一个拥有并确实在网络上的人们在帮助人们进行编程问题的人中花了很多时间的人来说,我们倾向于厌倦解释你应该已经知道的东西,而是因为你想跳进性感的东西而被忽视。
 
Last edited:

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,901
地点
切萨皮克,va.
编程经验
10+
不。我生命中从未见过这个页面。请帮我帮助我,而不是指责我偷窃。我甚至不明白这种语言。
好的,它可能没有那个网站,但它来自其他地方。

在您的代码中,您正在使用:
C#:
public static MeshData GenerateTerrainMesh(float[,] borderedSizeMap, float borderedSizeMultiplier, AnimationCurve _borderedSizeCurve, int levelOfDetail)
{
    AnimationCurve borderedSizeCurve = new AnimationCurve(_borderedSizeCurve.keys);
关于网格生成的大多数其他教程都有这个签名:
C#:
public static MeshData GenerateTerrainMesh(float[,] heightMap, float heightMultiplier, AnimationCurve _heightCurve, int levelOfDetail)
{
    AnimationCurve heightCurve = new AnimationCurve(_heightCurve.keys);

Hmmm. How odd that the the parameters line up. How odd that your line of code that doesn't compile has the variables heightMap and heightMultiplier and heightCurve.
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
欢迎来到该网站。我把垃圾箱发布的代码带到了我们的论坛,所以它不会丢失。

除了旁边,你可能会发现如果您有点常见于您的代码,您可能会发现这些家伙有点乐于助人。

如果您承认您从杰克和吉尔的网站上获得了代码,我们可能可以比较违规行为。

我们知道你肯定没有自己写这个,因为如果你这样做,你会知道每一块的每一寸都写在每个街区,它的预期目的是什么以及如何使用它。
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,901
地点
切萨皮克,va.
编程经验
10+
第12集的代码 still uses heightMap, heightMultiplier, and _heightCurve
C#:
public static MeshData GenerateTerrainMesh(float[,] heightMap, float heightMultiplier, AnimationCurve _heightCurve, int levelOfDetail) {
    AnimationCurve heightCurve = new AnimationCurve (_heightCurve.keys);
 
最佳 底部