Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Unity中在网格上动态生成3D对象的最佳方法是什么?_C#_Unity3d_Dynamic_3d_Virtual Reality - Fatal编程技术网

C# 在Unity中在网格上动态生成3D对象的最佳方法是什么?

C# 在Unity中在网格上动态生成3D对象的最佳方法是什么?,c#,unity3d,dynamic,3d,virtual-reality,C#,Unity3d,Dynamic,3d,Virtual Reality,我是一个没有经验的程序员,我正在寻找关于新unity项目的建议: 我需要从相当大的瓷砖为3d游戏生成地形。现在我只需要一种类型的磁贴,但我在想,我最好现在就设置一个注册表系统,并在无限网格中动态生成默认磁贴。不过,我有一些顾虑,比如当角色移动到新平铺的渲染距离时,对象是否会继续加载(如果愿意,也可以是块)。此外,我发现的所有教程在某些方面对我来说都是错误的,比如它只在2d中工作,没有冲突,或者只是一个静态注册表,不允许在游戏中更改分幅的内容 现在我甚至不知道在场景中放置一个3d对象而不使用矢量构

我是一个没有经验的程序员,我正在寻找关于新unity项目的建议:

我需要从相当大的瓷砖为3d游戏生成地形。现在我只需要一种类型的磁贴,但我在想,我最好现在就设置一个注册表系统,并在无限网格中动态生成默认磁贴。不过,我有一些顾虑,比如当角色移动到新平铺的渲染距离时,对象是否会继续加载(如果愿意,也可以是块)。此外,我发现的所有教程在某些方面对我来说都是错误的,比如它只在2d中工作,没有冲突,或者只是一个静态注册表,不允许在游戏中更改分幅的内容

现在我甚至不知道在场景中放置一个3d对象而不使用矢量构建它们的代码是什么样子,也许我可以这样做。我也不知道该如何触发代码


有没有人能告诉我代码是什么样子的/要查找的术语/一个提供我所需内容的教程?

对于一个新程序员来说,这看起来是一个相当大的范围,但让我们试一试。在性能和优化方面,当您不知道自己在做什么时,生成地形将是一个巨大的学习体验

首先,您可能需要制作一个脚本,作为生成对象的控制器,并将其放入播放器中。我会先生成一个小区域,或者一个区块,然后在你理解你在做什么时再生成多个区块。要在场景中“放置”一个对象,您需要对该对象进行渲染。首先,我将尝试创建对象网格,这可以在初始化(start()函数)时通过for循环轻松完成,用于测试目的。也就是说,如果你想制作像minecraft一样的16x16正方形;有一个for循环运行16次(对于x),其中一个for循环运行16次(对于z)。这样你就可以把立方体做成一个完整的正方形。这里有一些未经测试的代码,只是给你一个我所说的例子

public GameObject cube; //Cube you want to make a copy of, this will appear in the editor
void Start(){
    for(var x=0; x < 16; x++){
        for(var z=0; z < 16; z++){
           GameObject newCube = Instantiate(cube); //Creates an instance of the 'cube' object, think of this like a copy.
           newCube.transform.position = new Vector3(x, 0, z); //Places the cube on the x and z which is updated in the for loops
        }
    }
}
公共游戏对象立方体//要复制的多维数据集将显示在编辑器中
void Start(){
对于(变量x=0;x<16;x++){
对于(var z=0;z<16;z++){
GameObject newCube=实例化(多维数据集);//创建“多维数据集”对象的实例,将其视为副本。
newCube.transform.position=new Vector3(x,0,z);//将多维数据集放置在x和z上,并在for循环中更新
}
}
}
现在,你们从这里开始会有很大的不同,这取决于你们到底想做什么,但你们可以从研究开始,加入一个看起来不错的随机y水平。一旦你掌握了一般概念,它就很容易使用,我提供的这个例子应该可以帮助你理解如何使用它。他们甚至给出了如何在Unity文档上使用此功能的好例子

总之,编程就是学习。你必须学会如何只获取你想要创造的东西所需要的部分资源。我认为我提供给你的应该给你一个良好的开端,你想创造什么,但它将需要一个更深入的理解,以实现自己的事情。只要测试不同的东西,真正尝试并理解它们是如何工作的,您就能够将它们的一部分实现到您自己的项目中


我希望这有帮助,祝你好运

我不知道为什么我的问题被否决了,我的问题是与代码相关的,它特别参考了我已经做过的研究,所以很明显我研究了这个问题,我试图弄清楚我面临的是什么样的问题,如果有具体的代码,我会把它包括在内,但现在还没有,也不建议总是包含代码。。。我不知所措,我会做错什么?他们是不是不喜欢这不是一个技术性很强的问题,或者是一个非常具体的代码问题?看来这不会让我的问题变得不合理。。。试图让游戏成为花花公子…堆栈溢出更多地用于帮助解决用户已经尝试解决的代码中的问题。在你的例子中,你是在寻求关于如何开始开发的建议,而不是在你不知道为什么不工作的代码的某个部分上寻求帮助。我能给你的一条建议是从各种教程、指南和文档中学习一些东西。你永远也找不到一本完全符合你想法的教程。答案不错,但我也不推荐Perlin noise/Unity Mathf.PerlinNoise,因为它在其生成的功能中显示出明显的45度和90度角度偏差。寻找一个好的单纯形实现,如果您需要3D+噪波,更具体地说是一个开放的实现。部分问题在于Unity比simplex(Unity、Mathematics、noise、snoise(float2))更突出地包含了这个函数。但我们可以帮助的一部分,是引导新来者远离它,使用性能更好的功能。这是我创建/使用/推荐的,可能比Unity.Mathematics更快。如果您不使用Burst编译器,则会产生数学噪音。但是如果你找到其他适合你的东西,那也太好了!