(一)搭建开发环境

(1)下载visual studio

    在我们下载unity编译器的时候,会让我们选择当前unity编译器搭配的vs编译器。我们最好就直接勾选上,或者可以自己手动下载vs,在vs的installer里勾选unity引擎开发需要的环境

unity3d天空贴图 unity怎么做天空_游戏引擎

(2)unity中设置脚本编译器

    下载好了之后,我们要在unity中更新vs作为脚本编译器。方式很简单,打开编译器,选择Edit -> Preferences目录 ,在 External Tools 页签里,选择 VS 作为脚本编辑器

unity3d天空贴图 unity怎么做天空_游戏引擎_02

(3)设置随脚本修改重新编译

为了方便之后的开发调试,我们需要设置每当脚本修改了之后,unity自动帮我们编译这个脚本,让改动可以实时的生效。选择Edit -> Preferences目录 ,在 General  页签里,把Script Change While playing 选项调整为:Recompile After Finished Playing即可

unity3d天空贴图 unity怎么做天空_unity3d天空贴图_03

(4)创建C#文件

    在Unity中,脚本也属于资源的一部分。因此我们同样的在Asserts目录下创建一个Scripts的文件夹用来存放脚本文件

右键create菜单,选择C#脚本即可生成第一个C#文件

unity3d天空贴图 unity怎么做天空_unity_04

(5)重命名C#文件

    生成的C#脚本默认命名为NewBehaviourScript,双击这个脚本,unity会自动帮我们打开vs(如果没有请重阅读上文配置)

unity3d天空贴图 unity怎么做天空_unity_05

    我们可以看到,里面存在一个同样命名为NewBehaviourScript的类,这是unity的特数规则:类名和文件名相同,因此我们在重命名类名或者文件名时就不可以像以往直接rename了,我们需要在脚本中选中类名然后右键重命名,比如修改成FirstLogic,我们就可以看到脚本和类名同时发生修改

unity3d天空贴图 unity怎么做天空_unity_06

    在unity编译器中查看,也是已经同步修改过来了的

unity3d天空贴图 unity怎么做天空_游戏引擎_07

  (6)挂载脚本组件

    接下来我们只需要把脚本挂载到场景的对象中并运行就可以了(注意不挂上去的话脚本是不会生效的!)

unity3d天空贴图 unity怎么做天空_天空盒_08

会发现对象的inspector面板中多了我们的FirstLogic组件

 (二)物体运动

(1)制作一台运动的小车

  transform组件提供了一个接口Translate,帮助我们调整物体的位置,只需要传入需要变化的位置信息就可以了

    以下是Translate方法的定义:

transform.Translate是Unity引擎中Transform组件的一个方法,用于平移物体。该方法接受一个三维向量作为参数,表示需要平移的距离和方向。平移距离和方向的单位是世界坐标系中的单位

    因此我们的代码可以改成这样:

void Update()
    {
        float DisPreSec = 6f; // 每帧运动的距离
        this.transform.Translate(0, 0, DisPreSec * Time.deltaTime);
    }

 然后把脚本拖动至小车对象上就可以了,运行看看:

unity3d天空贴图 unity怎么做天空_天空盒_09

(2)改变运动的朝向

假设这台小车车有一个移动的目标,我们需要朝着红旗对象前进,驶向终点那要如何做呢?

    首先创建一个红旗对象,然后随便放置一个位置

unity3d天空贴图 unity怎么做天空_脚本_10

为了能使小车的车头朝向红旗,我们需要获取到红旗的位置。在获取红旗位置之前,我们就需要在脚本中先获取到红旗这个对象

    怎么做呢?可以通过GameObject.Find这个静态方法来寻得红旗

GameObject.Find是Unity引擎中的一个方法,用于查找场景中指定名称的游戏物体。该方法接受一个字符串作为参数,表示需要查找的游戏物体的名称,返回一个代表该游戏物体的GameObject对象

    而用法也很简单,直接把目标的名字传入就可以了

GameObject flag = GameObject.Find("红旗");

(3)transform.LookAt

但阿发老师直接给我们提供了一个更好用的接口:transform.LookAt

transform.LookAt是Unity引擎Transform组件中的一个方法,用于使物体朝向指定的目标位置。该方法接受一个三维向量作为参数,表示需要朝向的目标位置

    只需要调用这个方法,就把车头位置朝向红旗了

void Update()
    {
        GameObject flag = GameObject.Find("红旗");
        this.transform.LookAt(flag.transform);

        Vector3 localPos = this.transform.localPosition;
        float DisPreSec = 6f;
        this.transform.Translate(0, 0, DisPreSec * Time.deltaTime);
    }

    看看效果:

unity3d天空贴图 unity怎么做天空_unity3d天空贴图_11

(二)自转与公转

(1)地球自转

    我们学习了如何在脚本中获取物体对象,并使用transform组件下的translate接口使物体运动

    接下来我们进一步学习,用脚本控制物体的旋转

    transform组件提供了Rotate这个接口,它可以直接传入欧拉角的偏移值,我们只需要在update方法中加入旋转接口就可以实现物体自转了

void Update()
    {
        this.transform.Rotate(0, 360 * Time.deltaTime, 0);
    }

我们把RotateLogic脚本挂在地球上就可以了

unity3d天空贴图 unity怎么做天空_天空盒_12

    嗯...有点快,我们把速度调低一些。缩小个4倍吧,让它四秒转一圈,看上去好多了

unity3d天空贴图 unity怎么做天空_unity_13

 (2)月亮公转

这个时候我们就应该想起我们的父子关系

    如果月亮是地球的子节点,那地球转的时候就可以带动月亮转了

unity3d天空贴图 unity怎么做天空_脚本_14

我们知道地球一转一天,月球绕地球一周是需要27天的,速率明显不一样

    这个时候我们只需要在地球的位置挂载一个空节点作为旋转节点,调整其旋转速率,并让月亮成为它的子节点就可以了

unity3d天空贴图 unity怎么做天空_unity3d天空贴图_15

    随便把速度设置为地球的三分一,看看效果:     

unity3d天空贴图 unity怎么做天空_天空盒_16

(三)天空盒

(1)天空盒Skybox

    天空盒就是3d世界里面的背景概念,我们可以想象在3d的世界中,我们就是处在一个巨大无比的矩形之中

    我们知道一个矩形是由6个面组成的,面与面之间无缝连接,那么接下来看看天空盒的图片构成

unity3d天空贴图 unity怎么做天空_天空盒_17

    我们创建的unity3d的项目中,会默认自带一个天空盒,我们可以在编辑器的这个位置控制天空盒是否显示:

unity3d天空贴图 unity怎么做天空_天空盒_18

(2)替换天空盒

    天空盒本质上也是一个材质,我们接下来看看它的具体构成以及要如何进行替换

unity3d天空贴图 unity怎么做天空_天空盒_19

里面包含了一个天空盒材质,以及一个textures文件夹,文件夹中包含的是天空盒6个面所用到的资源

Rending->Lighting子菜单,然后在Enviroment页签下,找到天空盒定义材质和纹理的地方,把我们实现准备好的天空盒材质和资源替换上去即可

unity3d天空贴图 unity怎么做天空_unity_20

们可以看到它的shader的选项中勾选的是skybox/6个面的shader,也就是物体的表面由6个面组成

unity3d天空贴图 unity怎么做天空_游戏引擎_21

(3)创建天空盒

    刚才我们的天空盒材质是直接导入的,那我们可不可以自己创建一个天空盒呢?

    无疑是可以的,我们首先准备6张无缝连接的图片,导入项目中

unity3d天空贴图 unity怎么做天空_unity_22

     然后我们创建一个空白的材质,并把它的shader模式改成skybox/6

unity3d天空贴图 unity怎么做天空_游戏引擎_23

    紧接着把贴图一一对应的放置在对应的面上即可,是不是很简单~

unity3d天空贴图 unity怎么做天空_unity3d天空贴图_24