从MAYA建模到Unity漫游的详细教程 bysking

MAYA建模Unity漫游的详细教程_bysking

 

 

 

一、MAYA建模部分(maya版本:windows 2018版 (64-bit))

 

我们的思路是建立一楼各个房间及楼梯然后不断的向上复制出整个楼栋

 

1.首先我们要拿到模型的俯视图了解大致的布局:

 

建立一楼的地板,原理:新建一个立方体再建立另外一个立方体让它们相交,按住ctrl键选中其中一个再加选另外一个然后使用maya的布尔运算工具,在设置里面选择旧版算法,作差集利用此原理得到如下效果:

 

 

预计效果图如下:

 

元素类型有以下的几种:房间分为三种类型教室(有桌子椅子讲台黑板),会议室(有桌子椅子会议桌柜子)和左下角的小房子,所以我们分别把这些元素建出来然后拼装在一起。

--桌子(倒角工具+立方体的组装+贴图)

 

--椅子

椅子模型,限于篇幅,不做讲解,简单说来就是,绘制曲线,绘制圆环曲线,同时选中,使用曲面挤出工具就可以做出弯曲的框架,还可以使用倒角工具美化模型棱角。

 

 

--会议桌(挤出+倒角+贴图)

 

--柜子(布尔差工具+贴图)

 

--讲台(立方体的面的挤出以及倒角就可以实现,再贴图)

 

--黑板(倒角+贴图)

--房间框架

新建一个立方体,利用布尔工具抠去镂空,得到房间的框架,这里要注意使用的是旧版算法,

 

(带窗户的房间框架)

用立方体组装一个窗户并赋予玻璃材,用立方体组装一个窗户并赋予玻璃材质。

选中房间框架模型进行uv展开,烘焙UVTGA格式的图像文件,使用ps工具绘制贴图,再重新贴回模型(导入部分有详细教程)

 

--楼梯

 

 

好了,基本元素做完之后我们就开始组装最基本的两间房间:教室以及会议室,并把他们打组命名,并居中枢轴,清除构建历史,最核心的基本元素就做好了。

 

 

然后在我们根据卫星地图构建的地板上再次组装出我们的一楼:

 

加上楼顶,整体打组,命名比如:floor1(一楼),选中这个组,居中枢轴,清除历史:

 

剩下的工作十分简单,可以在maya里面整体复制五份堆出五层楼,但是在Unity里面还需要进行添加碰撞,所以我们选择去unity里面,为一层楼添加碰撞后再复制,节省工作时间,于是这栋楼就算完成了。

 

(可以看一下复制五层的效果:

然后是中间的大厅部分,也是很简单,几何体,不断运用布尔差工具,拼装。

 

大厅:

 

大厅顶:

大厅楼梯和台阶:

 

墙壁就是简单几何体,压缩后拼装,就像搭积木一样,再贴图,玻璃门那里有给玻璃材质:

玻璃门的建模和上面的窗户建模一个原理。

 

最后是右边的大楼和左边大楼的建模是同样的原理:

我们只需要做出一层就好:

 

看一下五层的效果:

 

看一下整体效果(注意,unity使用模型的时候,只需要导入两栋楼的一楼即可):

 

 

二、导入部分(Unity版本:Windows Unity 2018.1.0f2 (64-bit))以及贴图教程

导入部分需要注意的问题就是贴图:下面我们进行举个小例子进行两种方式导入尝试

(1)建模:创建一个多边形:

 

ctrl+d复制一份,r键进行调整缩小如图:

 

 

作布尔运算:

 

确保旧版算法(方便uv展开)

 

 

得到如下结构:

 

同理,再新建多边形,做出窗户:

 

布尔运算后:

 

选中多边形,进入uv编辑器:

 

先确保以对象级别选中左侧物体,点击uv编辑器里面的创建,一般规则物体选择自动就行

 

 

 

uv被自动展开,放在长宽为1单位的正方形内,每一块uv壳可以直观理解为和多边形的某一个面相对应

 

由于我们只需要做墙外面的贴图,所以只关心外边的四个面,所以全选uv,

 

重新缝合这些uv

 

在左边多边形上,按住鼠标右键不放,拖动到面级别,按住shift+鼠标左键依次点击我们关注的四个墙壁外面,在uv编辑器里面,点击自动展开:

 

 

 

把我们关注的uv壳和其他不关注的分离,保证关注的部分所占的比例最大,充分利用1*1的面积。

 

再点击保存uv快照。

 

选择存放的位置以及文件名记住。

 

 

点击应用并关闭:

 

 

如果无法保存是因为没选择左边的对象,鼠标移动到左边,切换到对象级别并选择物体,再点击应用并关闭即可。这样就在我们事先选择的目录下面就有了贴图的文件。

 

 

接着就在刚下的目录找到,我们的贴图,选择ps打开。

 

 

 

 

 

新建图层并且在对应区域绘制,或者插入图片

 

最后隐藏掉黑色的参考图层

输出为png图片,用作最终的贴图。

 

回到maya界面,点击多边形,创建新材质lambert

 

点击小箭头,切换到lambert属性

 

 

 

点击创建文件节点

 

点击文件夹

 

打开贴图文件:

 

 

打开渲染开关:

 

以上就是一个完整的绘制贴图的教程。

 

我们保存为两种格式,fbx,mb(导出时保留纹理,以及引用)文件

---方式一(fbx文件):

 

建立一个fbx文件夹把fbx模型和贴图文件一起放进去,导入unity才能有贴图

 

 

新建unity项目-把文件夹一起拖到unityassets资源文件夹下,在再拖到项目里面就可以了。

 

 

 

 

 

 

 

--方式二(mb文件):这种方式直接拖就行,纹理被置入mb文件,会自动贴纹理,不过会花费一点时间,现在的unity版本支持对maya导出文件的mb格式进行直接解析。

 

 

 

三、Unity实现漫游部分

好了现在我们Unity就有了带材质的模型.在实现漫游之前还需要对模型添加碰撞

为了快速进项漫游讲解,先使用未贴图的模型:

 

 

选中地面,点击右边的add Component,有两种选择,地板的话,可以选第一个box Collider,房间框架的话就选mesh Collider,就这样为每一个一楼的物件都添加碰撞(可以批量选择,整体添加碰撞)

 

然后就是添加第一人称控制器:在Assests目录下右键导入需要的控制器包

 

 

依次展开如下目录:

 

 

 

拖动到世界里面,调整大小,并且调整到合适的位置

 

 

点击三角形,运行发现可以wasd四个按键来控制镜头移动,鼠标来控制视角方向。

 

因为我们要做两个主场景,一个是第一人称,一个是第三人称,当然加上开始界面,一共有三个场景,更改当前场景名字为first,再新建两个场景thirdstart

 

 

 

进入third场景,(可以在first场景里面把添加好碰撞的模型重新从世界里面拖回ASSETS目录再导入third场景)导入添加好碰撞的模型,添加第三人称控制器,拖到游戏场景里面

 

 

 

但是直接点击运行是不可取的(我们可以控制角色,但是摄像机却是固定的),我们还需要有后续的工作,即让摄像机跟随角色视角

于是我们新建脚本followby

 

双击脚本(我们事先安装好vs或者其他unity支持的代码编辑工具)

添加如下代码并点击保存:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class followby : MonoBehaviour {

    public float mouse_x;

    public float mouse_y;

    public float mouse_scroll;

    public GameObject player;

    void Start()

    {

        mouse_x = 0;

        mouse_y = 0;

        mouse_scroll = 0;

    }

    // Update is called once per frame

    void Update()

    {

        transform.LookAt(player.transform);

        mouse_scroll = Input.GetAxis("Mouse ScrollWheel");

        if (mouse_scroll != 0)

        {

            transform.Translate(new Vector3(0, 0, mouse_scroll * Time.deltaTime * 50f), Space.Self);

        }

        //  if (Input.GetMouseButton(1))

        //{

        mouse_x = Input.GetAxis("Mouse X");

        mouse_y = Input.GetAxis("Mouse Y");

        transform.RotateAround(player.transform.position, player.transform.up, mouse_x * Time.deltaTime * 50f);

        transform.RotateAround(player.transform.position, transform.right, -1 * mouse_y * Time.deltaTime * 50f);

        //  }

    }

}回到unity的third场景,把脚本托给摄像机,再点击摄像机,展开属性列表,把第三人称控制器拖到对应位置:

 

摄像机和第三人称控制器都有位置属性,可以直接把摄像机的位置值改为第三人称控制器的值,

 

调整可以看到人物,其实这个时候点击运行就可以看到,摄像机能跟随人物进行旋转视角了,不过这还不够,还差运动跟随,于是再新建一个脚本follow_move

编辑如下代码:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class follow_move : MonoBehaviour {

    public GameObject player;

    // Use this for initialization

    void Start()

    {

    }

    // Update is called once per frame

    void Update()

    {

        transform.position = player.transform.position;

    }

}

 

返回unity,我们新建立一个空对象,把follow_move脚本拖给它,再把第三人称控制器作为对象拖给这个空对象的脚本作为参数:

 

 

 

然后最后一个步骤,把main camera拖到这个空对象下面作为它的子物体,

这样就实现了摄像机的跟随并且可以根据用户的鼠标进行旋转,推移镜头

最后一个就是实现页面跳转了,我们保存当前场景,进入start场景,新建脚本rotate

输入以下代码:

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class rotate : MonoBehaviour {

// Use this for initialization

void Start () {

}

// Update is called once per frame

void Update () {

        transform.Rotate(Vector3.up, Time.deltaTime * 15, Space.World);

    }

}

 

再把这个脚本拖给我们的模型,这样就实现了模型的自动旋转,可点击三角启动运行,正常。

 

然后我们需要创建基本的UI元素,简单的几个按钮:第一人称漫游,第三人称漫游,退出游戏

首先,新建一个pannel,然后在这个pannel下面添加三个按钮:展开按钮text属性,修改为第一人称漫游,第三人称漫游,退出游戏

 

 

 

把按钮拖放到中间

 

 

点击运行:效果如下

 

 

然后接下来我们需要做最后的步骤 ,添加场景切换,即按钮事件

新建场景加载脚本:load

using UnityEngine;

using System.Collections;

using UnityEngine.SceneManagement;//增加命名空间

public class load : MonoBehaviour

{

    public void OnStartGame(string sceneName)

    {

        Application.LoadLevel(sceneName);

    }

}

 

回到unity场景,新建空对象,把这个脚本拖给它,

 

接着点击第一人称漫游按钮,为其添加事件:

 

展开,选中我们自定义的方法

 

然后按钮1就代表加载名字为first的场景,我们在对应位置输入first

 

第二个按钮也是同样的原理:

 

 

 

最后还剩下一个退出按钮,新建一个quit脚本

 

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class quit : MonoBehaviour {

    public void BtnQuit()

    {

#if UNITY_EDITOR

UnityEditor.EditorApplication.isPlaying = false;

#else

        Application.Quit();

#endif

    }

}

 

回到unity场景,把该quit脚本继续拖给之前创建的空对象,再点击退出按钮,展开属性,添加点击事件,

再把带有quit脚本的空对象拖给它

 

 

然后找到我们创建的退出函数

 

 

 

最后就是可能需要调节一下光照的位置

 

至此项目的所有流程编写完毕。

 

 

截图:

 

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/bysking/p/9222658.html