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

问题描述

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

我需要使用相当大的图块为3d游戏生成地形。现在,我只需要一种类型的图块,但是我在想,我现在最好设置一个注册表系统,并在无限网格中动态生成该默认图块。不过,我有些担心,就像随着角色移动到新图块(如果愿意的话,是块)的渲染距离中一样,对象将继续加载。另外,我发现的所有教程都在某种程度上对我来说是错误的,例如它只能在2d中使用并且没有碰撞,或者只是静态注册表,并且不允许在游戏中更改图块的内容。

现在,我什至不知道在没有矢量的情况下将3d对象放置在场景中的代码是什么样子,也许我可以做到。我也不知道如何触发代码。

有人可以让我知道代码是什么样的/查找术语/提供我所需内容的教程吗?

解决方法

对于新程序员来说,这似乎是一个很大的范围,但请尝试一下。当您不知道自己在做什么时,就性能和优化而言,生成地形将是一种丰富的学习经验。

首先,您可能需要制作一个脚本来充当生成对象的控制器,并将其放入播放器中。首先,我将仅生成一个小区域或一个块,然后在您了解自己的工作时继续生成多个块。要将对象“放置”到场景中,您需要对对象创建instance。我首先尝试使您的对象网格化,这可以通过for循环在初始化(Start()函数)时很容易地完成,以进行测试。 IE,如果您想像我的世界一样制作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,z); //Places the cube on the x and z which is updated in the for loops
        }
    }
}

现在,根据要尝试执行的操作,您要从此处去的地方将有很大不同,但是您可以先查看perlin noise,然后添加看起来不错的随机y级别。一旦掌握了一般概念,它就非常容易使用,而我提供的这个示例应该可以帮助您了解如何使用它。他们甚至提供了有关如何在Unity文档中使用此功能的好示例。

总而言之,编程就是学习。您将必须学习如何仅获取要创建的内容所需的部分资源。我认为,我为您提供的内容应该为您要创建的内容提供一个良好的开端,但是您将需要更深入的了解才能自行完成工作。只需测试不同的事物并真正尝试并了解它们的工作原理,您就可以将其中的一部分实现到您自己的项目中。

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...