如何在最小/不使用可视化编辑器的情况下在Unity中构建游戏?


24

我想完全用C#编写游戏。在搜索引擎时,我找到了Unity3D,但是所有教程和文档都在谈论可视化编辑器和Unity IDE,您可以在其中单击并指向以创建场景和脚本。

我不想那样做。我更喜欢完整的代码覆盖范围,而不是设计师从我身上抽象出来的东西。我只想从头开始编写纯C#代码,或者如果需要,可以编写Unity脚本。我找不到有关此操作的任何解释或文档。我该如何使用Unity来构建游戏并最小化(或不使用)可视化编辑器?


1
投票结束,这是一个伪装成关于Unity的框架建议。
BlueRaja-Danny Pflughoeft 2014年

2
尽管我不会推翻社区的亲密投票,但我实际上不确定是否同意。但是,我会注意到,这个问题专门问的是Unity的某些功能:无法解决的答案可能会被删除。我们不是变成一个题外话,这个问题如果不就得了,好吗?
2014年

2
大多数开发人员都在某个时候寻求视觉编辑器来设计其关卡,因为视觉定位的东西比设置代码中每个小东西的位置要简单得多。编辑/设计GUI布局也是如此。恕我直言,已经内置了这些东西是一个巨大的好处。
bummzack 2014年

4
I prefer writing my own level editor which provides only the stuff really neccessary for my game好的,这基本上意味着您不想使用游戏引擎,而是想使用图形库进行编程。但是,当您尝试这样做时,您已经遇到了技术难题,因此...我在这里感到矛盾。
飞速

3
@jhocking然后我们对游戏引擎的定义似乎非常不同。如果类库抽象出典型的游戏任务(例如相机数学,声音系统甚至可能是一些物理方面的东西),那么它就是一个游戏引擎,但不是设计师的必要条件,我认为它甚至不是必需的。

Answers:


27

我是Unity的入门者,但这是我目前的做法,并将编辑器使用率降至最低:

在编辑器中,我只有三个对象:一个名为“ main”的空GameObject,一个摄像头和一个灯光。这仅仅是因为到目前为止,我只使用单个摄像机和单个光源,所以这种方式速度更快。稍后我可能会删除它们,而仅保留“ main”。

在“资产/ MyScripts”中,我有一个“ Main”类,该类作为一种行为添加到“ main” GameObject中。这意味着程序启动时,实例化的“ Main”类及其方法将被调用。“ Main”类是这样的:

using UnityEngine;

public class Main : MonoBehaviour
{

    void Start ()
    {
        // initialize the game
    }

    void Update ()
    {
        // update physics
    }

}

在游戏中,我动态构建如下环境:

GameObject floor = GameObject.CreatePrimitive (PrimitiveType.Cube);
floor.renderer.material.color = RandomGreen ();

但这是因为到目前为止,我仅在制作原型。稍后,我将要用在Blender中编辑的一些不错的东西替换多维数据集。这需要在Blender中制作它们,并将它们作为“预制件”导入到Units中。然后,我将类似地从C#代码实例化“预制件”。

如果要使对象对事件做出反应,例如与其他对象发生碰撞,则可以实例化该对象并将其动态添加到一个行为类,该类是从MonoBehavior派生的C#类。例如,如果您想拥有一辆汽车,则可以制作汽车预制件,并为其在游戏中的行为编写一个“ CarBehavior”类。

这样,您可以将与编辑器的交互减少到最小,尽管可能不会完全减少到零。现在,这取决于您是否可以接受此解决方案。


2
我想这对于Unity初学者来说似乎是一个非常明确而可靠的答案:)
2014年

谢谢!否则,我是一位经验丰富的程序员,但这是我在Unity中的第一个项目,距离完成还很遥远。我还没有使用预制件。我目前可能尚不了解某些并发症,因此建议您服用一些盐。顺便说一下,Unity中的序列化对我来说有点违反直觉。我将不得不对其进行更深入的研究,它可能会影响某些设计决策。
ViliamBúr2014年

9

使用Unity时,您必须在Unity的编辑器中进行一些工作。这就是Unity的工作原理。

但是,您作为程序员所做的绝大多数工作不会在Unity的编辑器中发生;脚本文件是用外部IDE编写的外部文本文件,作为程序员,您只能使用Unity的编辑器来链接要运行的脚本,然后单击Play才能真正运行游戏。这与在项目设置中的类中进行链接,然后在IDE中单击“运行”没什么不同。

其他大多数具有中央视觉编辑器的游戏开发工具也受到有限而僵化的脚本支持的困扰,但是Unity并没有遭受这种劣势。尽管为Unity创建的所有内容最终都通过可视化编辑器进行,但此核心界面涉及将项目链接到在Unity游戏引擎中运行的自定义代码的大量链接。经验丰富的程序员,请不要忽视这个开发环境,不要将其误认为编程能力有限的游戏制作人!

(另外,听起来我正在写的书对您来说是个好资源,因为它是针对有经验的程序员的)


1
当我遇到这个答案时,我正在阅读您的书中
max pleaner

6

我相信您正在寻找的是Futile Unity 框架

基本上,您可以使用脚本来完成所有编程,而无需“拖放”东西或使可视化编辑器陷入混乱。您所需要的只是场景中的单个GameObject,它将成为整个游戏的容器。然后,您将像使用非可视编辑器一样,按程序进行所有操作。

免责声明:尽管Futile以代码为中心,但不可避免的是,您将不得不以某种方式来使用Unity编辑器。但是,使用Futile可以大大减少这种情况。


2

我想在这里添加所有好的答案,尤其是@jhocking的答案:

我在Unity中找到的几乎所有内容在项目文件夹树中都有纯文本副本。我直接编辑了预制件和其他gameObjects,而没有打开Unity,而其他开发人员在提交时成功地找到了这些更改。

直到今天,我对Futile框架的了解还不多,但这似乎是一种掌握所有内容的绝佳方法。

我目前使用的是所有拖放内容,而不是基于脚本的内容,但这将必须更改,因为我的目标是按照程序生成级别和坏人。

我的两分钱说,基本上可以得到Unity中所需的几个对象,然后依靠外部编辑器中的脚本。您几乎可以用纯文本格式进行所有操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.