您当前的位置:首页 > 精选问答

Unity引擎能实现3D建模吗?

时间:2024-11-01 16:10:13

一、Unity引擎能实现3D建模吗?

unity本身并没有自带建模工具,不过有些相关的插件,功能远没有专业的建模软件强大,所以unity是将外部的静态模型素材直接导入,进而让其具备游戏中的动态效果。

而在游戏中一般常用的建模工具是3Dsmax和maya,两者很多功能基本相同,但是操作上的差异很大。

Max比maya更容易上手一些,max用中文居多,maya一般用英文;

操作方面,max操作方面比较生硬,很多功能更加智能一些。maya操作比较灵活,功能比较零碎,建模要更加方便快捷。

Unity开发是偏编程的,3D建模是偏美术的,这两个学习方向还是很不一样的,如果对开发方向感兴趣的话建议考虑一下优就业的VR/AR游戏开发课程,包含C#基础、unity基础及高级、游戏策划运营、VR/AR开发等内容,同时也提供了多种就业选择,助力成为行业的复合型人才。

二、Unity3D的介绍(1):界面、菜单、面板、组件

打开Unity3D,会进入这个界面,用来选择需要打开的项目。双击已有项目会打开该项目,点击NEW,可以新建项目。点击OPEN,可以通过选择磁盘上的项目文件夹直接打开项目,也就是说如果要打开的项目没有显示在这个列表中,就可以直接OPEN项目文件夹开启项目,然后项目就会显示在列表中了。

项目和项目彼此之间是独立的,大家可以把上课练习时的项目文件夹整个复制回家直接打开继续练习,这时需要的操作就是OPEN了。

新建项目需要指定一个路径以及一个项目名称,之后项目文件夹便是这个路径下的该名称的文件夹了。其他的选项不是很重要,后期都可以调整。

Unity3D的界面还算是蛮友好的,大部分的面板都可以随意拖动放置,也可以关闭掉。通过右上角的界面布局选择框可以返回默认的几种界面布局:

我个人比较喜欢这样的布局:

这里是对视窗的操纵按钮。几个按钮分别是:手型工具、移动、旋转、缩放、操纵器模式;轴心切换、全局坐标系/自身坐标系切换

这里是控制游戏运行的按钮。分别是:运行游戏、暂停游戏运行、下一个关卡

这里分别是:云端协作、云端项目、用户账户、层、界面布局

工作区视图主要有场景视图(scene view)和游戏视图(game view)。

Scene view是我们的编辑视窗,类似Maya的4视图,操作方式也类似于Maya。可以切换不同的显示模式,过滤不同类型的场景元素,并调节透视/正交视图类型等等。Scene view并不对应某个场景摄影机(camera),属于引擎内置的camera视图。

Game view是游戏运行视窗,相当于在引擎中直接运行我们制作的游戏。Shaded可以选择模型呈现方式;2D开启2D视图模式,后面3个按钮分别开关光照、声音和贴图效果;Gizmos可以选择哪些游戏物体的图标允许显示在场景视图中,以及Gizmos的缩放比例。

当按下菜单栏下方“运行游戏”按钮时,会自动切换显示Game view,并编译运行当前游戏项目,如果编译不成功则不会运行。编辑状态下Game view显示的也是我们设置好的游戏摄影机视图,部分UI元素不会在编辑状态下显示在game view中。

从Windows菜单中可以打开各种常用的面板:

默认界面中就显示出来的,或者说我们最常用的面板有如下几个:

其他比较经常被用到的面板包括:

游戏物体通过被附加上不同的组件(components)以实现不同的功能,组件的详细信息就显示在Inspector面板上。

比如我们创建一个基本的cube物体,默认就有4个组件:

用户自己编写的脚本也显示为组件,可以在脚本内将变量(variable)定义为public使之能够显示在Inspector面板中,以方便调试。

PlayMaker的FSM(状态机)也显示为组件,可以在FSM中将变量(variable)的 Inspector 选项勾上使之能够显示在Inspector面板中。

三、Unity3d/NGUI 在面板上画图。

可以参考NGUIEditorTools.cs里的这个方法自己实现

/// <summary>

/// Draws the tiled texture. Like GUI.DrawTexture() but tiled instead of stretched.

/// </summary>

static public void DrawTiledTexture (Rect rect, Texture tex)

{

GUI.BeginGroup(rect);

{

int width = Mathf.RoundToInt(rect.width);

int height = Mathf.RoundToInt(rect.height);

for (int y = 0; y < height; y += tex.height)

{

for (int x = 0; x < width; x += tex.width)

{

GUI.DrawTexture(new Rect(x, y, tex.width, tex.height), tex);

}

}

}

GUI.EndGroup();

}

我的博客中有讲解

项目