UNITY 3D - 游戏编程入门






4.95/5 (96投票s)
本系列文章的第一篇,将介绍 Unity 3D 以及如何开始创建自己的 3D 项目。
引言
距离我上一篇文章已经有一段时间了,但回来后我决定写一篇文章,或者一系列文章,介绍一个名为 UNITY 3D 的游戏引擎,它恰好是当今行业中最流行的引擎之一。
该引擎有几个非常出色的优点
-
您可以获得社区版,它运行良好,并且对大多数人来说绰绰有余。
-
社区本身非常庞大且活跃,因此如果您需要任何帮助,总能找到其他开发者和设计师为您提供支持。
-
您可以在 Windows 或 Macintosh 以及某些 Linux 发行版上开发 Unity 3D。
-
您可以使用 C# 进行游戏的脚本编写/编程。
-
您可以为许多平台发布您的游戏。
列表还可以继续。我列出了一些我认为 Unity 3D 吸引人的主要点。此外,由于社区版是免费的,您可以在投入更多时间和金钱之前,研究和尝试该环境和您的想法。
无论如何,本文并非讨论引擎的财务方面,而是介绍游戏引擎的基础概念,以及对于那些渴望快速启动自己想法的人来说,如何开始。
那么,言归正传,我们将看一下 IDE 并讨论一些基础知识,然后再开始深入细节。
系列文章
-
Unity 3D – 游戏编程 – 第 1 部分
Unity 3D 网络文章
Unity 3D Leap Motion 和 Oculus Rift 文章
Windows Phone 8.x 演示
我提供了一个免费的手机应用程序,您可以在 Windows Phone 上下载并预览演示。要下载该移动应用程序,请点击此链接:CodeProjectArticleSample
文章代码和视觉效果的实时预览
实时预览链接:http://www.noorcon.com/CodeProject/CodeProjectArticlePreview.html
背景
假设读者对编程概念总体上是熟悉的。还假设读者对 C# 语言有理解和经验。还建议读者熟悉面向对象编程和设计概念。我们将在文章中简要涵盖它们,但不会深入探讨细节,因为它们是完全独立的主题。我们还假设您热衷于学习 3D 编程,并具备 3D 图形和向量数学的基本理论概念。
最后,本文使用 Unity 3D 版本 4.6.1,这是初始发布日期时的最新公共版本。本文系列中讨论的大部分主题将与旧版本的游戏引擎兼容,也许也可能与今年应该发布的新版本兼容。但是,当前 4.6.1 版本有一个主题与旧版本的游戏引擎相比有显著不同,那就是 UI(用户界面)管道。这是因为引擎中新的 UI 架构比我们在此版本发布之前的架构要优越得多。我个人对新的 UI 架构非常满意。
使用代码
在开始之前,您需要获取游戏引擎。您可以从以下链接下载:www.unity3d.com。这是一个大文件,所以在下载安装程序之前,请确保您的网络连接快速可靠。
您可以获取 Windows 和 Mac 操作系统的安装程序。本文中的所有内容都适用于这两个平台。主要区别在于键盘快捷键,除此之外一切都应该相同。
下载文章系列的项目/源代码:下载源代码。
好的,假设您已经下载并安装了 Unity 3D 引擎。我们现在可以开始学习基础知识了。
图 1 - IDE 的五个不同区域
当您首次启动 Unity 3D 时,您将看到默认的 IDE 布局。它可能看起来像图 1 中所示的布局,也可能不像。您可以通过将它们拖放到指定区域来非常轻松地更改 IDE 的布局。我喜欢将布局配置为图 1 中所示的方式,因为它使我对项目的所有重要元素都有一个很好的了解。
在图 1 中,您会注意到五个区域:
-
区域 1 - 场景编辑器: 这是您创建游戏场景或关卡,或 3D 项目的地方。您所有的 Game Objects 都将放置在场景编辑器中并进行操作。
-
区域 2 - 游戏视图: 这是您通过摄像机视角查看场景或关卡外观的地方。基本上就是摄像机视图,用户将看到的内容。
-
区域 3 - 层级窗口: 或者我称之为场景或关卡对象。此窗口将显示您在当前场景或关卡中的所有 Game Objects。基本上,您的游戏关卡正常工作所需的一切都将在此处列出。这将包括视觉和非视觉的游戏对象。
-
区域 4 - 项目窗口: 或者我称之为解决方案资源管理器。如果您熟悉 Microsoft Visual Studio,那么这与您的解决方案资源管理器相同。从 Game Objects、脚本、纹理、模型、音频、视频等一切内容都将在该窗口中访问和管理。它也是您在文件系统中定义的主项目结构的表示。
-
区域 5 - Inspector 窗口: 或者我称之为属性窗口。类似于 Microsoft Visual Studio 的属性窗口,它将显示所选 Game Object 的不同属性和特性。根据所选对象,将列出适当的属性和组件。您可以通过此窗口在编辑器中修改您的游戏对象。
创建我们的第一个游戏对象(立方体原始体)
假设您已经探索了环境并对 IDE 感到满意,我们将看看如何在场景中放置一些原始体。
默认情况下,有几个开箱即用的原始体可以创建。它们是:
-
立方体
-
球体
-
胶囊体
-
圆柱体
-
平面
-
四边形
注意:Unity 3D 不是 3D 建模软件!所以不要指望使用 Unity 3D 创建复杂的模型。Unity 3D 是一个游戏引擎。对于您的 3D 建模需求,您需要使用 3D Studio Max、Maya、Rhino 等软件。总的来说,您的模型将由 3D 设计师创建,然后您将其导入到您的游戏中。
我们将开始看看如何将一个立方体放入我们的场景中。为了创建立方体原始体,从主菜单中选择 GameObject->3D Object->Cube。此操作将在您的场景中放置一个立方体,您的 IDE 应该看起来像这样:
图 2 - 放置立方体原始体
花点时间研究一下您屏幕上看到的内容。正如您所见,您的屏幕不再那么无聊了!回想一下图 1 中 IDE 的不同区域,它们现在已经活起来了。您应该立即注意到的 IDE 中的一些变化:
-
一个立方体已被创建并放置在场景窗口(3D 原始模型)中。
-
一个 Cube GameObject 现在列在您的层级窗口下。
-
由于新创建的 Cube GameObject 已被自动选中,您将看到Inspector 窗口现在列出了原始的 Cube GameObject 的所有标准属性和特性。
|
查看 Inspector 窗口,您可以看到我们刚刚放入场景的立方体上附加了一些标准属性。这些属性是所有 GameObject 的一部分。 Cube GameObject 附加了不同的组件。
我们将在文章(系列)中介绍其中一些属性。 顶部部分使您能够按名称标识 GameObject,确定它是否是静态对象,为 GameObject 应用一个 Tag,以及它属于哪个 Layer。 任何 GameObject 最重要的属性之一是 Transform。 Transform 存储了 GameObject 在场景(3D 世界)中的位置、旋转和缩放。鼓励您尝试 Transform 的不同值,以查看它们对 3D 世界中 GameObject 的影响。 我们刚刚创建的立方体位于位置 (1.75, 0.3076, 1.5233),分别代表 (X, Y, Z) 坐标。 |
立方体的旋转向量分别位于 (X, Y, Z) 轴上的 (0,0,0)。使用设计工具来操作立方体非常直接。
要更改场景的设计透视图,您可以按住 Alt 键,然后使用鼠标左键单击并在场景窗口中移动。视图透视图将根据您的鼠标移动而改变。当您想更好地查看正在处理的游戏对象时,这很有帮助。
当您对设计视图满意后,您可以使用以下工具来定位、旋转和缩放对象:
图 4 - 带有位置、旋转和缩放按钮的工具栏
图 4 展示了用于定位 (1)、旋转 (2) 和缩放 (3) 的工具。当一个游戏对象在场景中被选中时,您可以对该对象应用任何变换。
|
|
|
现在我们对环境有了基本了解,让我们开始讨论一些有趣的事情,比如编程!Unity 3D 提供了多种语言,可以用于游戏的脚本编写或编程。我们将 C# 语言用于我们的演示目的。这里假设读者已经掌握了编程基础知识,并且熟悉面向对象概念。我们不会在这篇文章中详细介绍。
在 Unity 3D 中使用 C# 编程
在设计游戏或模拟时,您需要能够通过设计器以及在运行时动态地操纵您的环境。这就是您需要开始应用您的编程知识和技能来赋予环境生命的地方。这样它就不会闲置。幸运或不幸的是,没有办法绕过这一点。!
所以,为了让您入门,我们将看看通过代码操纵对象的 [基础知识]。假设我们想在构建或运行应用程序时围绕其 Y 轴旋转我们的立方体。您需要执行几个步骤:
-
您需要创建一个 C# 脚本。
-
在 C# 脚本中,您需要编写将旋转应用于对象的代码。
-
最后,您需要将脚本与所需的 Game Object 关联起来。
at this point, I am not going to discuss the structure and organization of your project and file system for your project. We will discuss this in future articles as we start building our knowledge throughout the series.
为了在您的项目中创建 C# 脚本,在项目窗口中,右键单击以调出上下文菜单,然后选择 Create->C# Script。此操作将在指定位置创建一个 C# 脚本文件,并要求您为其命名。此时,您给脚本的名称并不重要,但正如您应该考虑利用您组织或您自己定义的命名约定最佳实践一样。无论如何,我将我的脚本命名为articleRotate.cs。双击脚本以在 Mono Editor(默认编辑器)中打开它,您可以将其更改为您选择的任何其他 C# 编辑器。
您的代码应该看起来像这样:
using UnityEngine; using System.Collections; public class articleRotate : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { } }
在继续之前,有几件事需要解释。您创建的每个脚本默认都会继承自 MonoBehaviour。我们将在稍后讨论这个类。您创建的每个脚本还默认有两个函数:Start() 和 Update()。
Start() 函数只在程序开始时运行一次。所以任何您需要的或想做的逻辑和数据初始化都可以放在 Start() 函数中。
Update() 函数是大部分魔法发生的地方。这个函数在您的游戏或模拟的整个生命周期中被连续调用。这是您更新游戏对象的函数。简而言之,它是在渲染场景之前每一帧都会被调用的函数。
using UnityEngine; using System.Collections; public class articleRotate : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { this.transform.Rotate (new Vector3 (0, 1, 0), 1); } }
我们刚刚添加到代码中的那一行将执行我们正在寻找的、在应用于它的给定对象上的所需旋转。在不深入了解此函数的细节和幕后复杂性的情况下。我们可以利用我们对象 transform 组件上定义的 Rotate 函数,传入一个 Vector3 对象,代表我们的 (X,Y,Z),以及旋转角度。
由于我们计划在 Y 轴上旋转,因此我们将 Vector3 定义为 (0,1,0)。该函数将为您处理所有必要的转换和复杂性。下一个参数是旋转角度,我们将其定义为 1。
有几种方法可以将脚本应用于 Game Object。最简单的方法是将脚本拖放到场景中的所需游戏对象上。应用脚本后,在 Inspector 窗口中,您将看到该脚本是立方体的组件。
图 8 - 附加到 Game Object 的脚本
当您将此代码应用于您的 Cube 并运行程序时,您会注意到您的 Cube 正在围绕其 Y 轴连续旋转一度。这是因为我们的旋转逻辑位于 Update() 函数中,该函数在程序运行时由游戏引擎连续调用。每次,都会将一度旋转应用于 Cube 的 transform 组件!因此,您会获得旋转效果。
关注点
我鼓励您进一步阅读和练习 Unity 3D 游戏引擎。在我们讨论一些更复杂的概念和过程之前,您应该花一些时间来更多地熟悉和适应 IDE。
接下来最好的事情是确保您正在练习 C# 编程知识。
最后,慢慢开始阅读计算机图形学理论和概念,以便更好地感受和理解引擎内部发生的事情。
历史
这是我将逐渐贡献给 Code Project 社区的系列文章的第一篇。
-
Unity 3D – 游戏编程 – 第 1 部分
Unity 3D 网络文章
Unity 3D Leap Motion 和 Oculus Rift 文章