Unity学习笔记(四)—— 制作第三个小游戏(像模像样的)

一、创建项目,取名为HistoricalAdventure(古迹探险),导入素材

方法一:访问unity 素材网:Asset Store (unity.com),比如我们要导入一个天空的素材,我们在搜索栏输入Skybox,然后找到免费的素材(这里我已经添加)然后点进去选择“添加到我的资源”(需要登录你的unity账号才能添加)然后选择在Unity中打开,然后

然后下载

下载完成后导入

最终我们会在Project目录下得到一个这样的文件夹 

 方法二:第三方网站或其他渠道下载的资源文件(类似下图,以unitypackage结尾的文件),下载下来后直接拖到project目录下即可导入(或者在Project面板鼠标右键->import package->custom package)

然后就会弹出一个这样的框,然后我们选择import即可导入

 

二、创建地形(3dobject->terrain,创建好后在project面板会多出一个New Terrain,它用来保存地形相关的数据,故我们命名为Terrain Data,并新建Terrain文件夹放入),然后我们修改一下它的长宽高为50m(这里的高是最大高度)

 

 编辑地形(这里Brush Size代表绘制笔刷的大小,Opacity代表绘制密度,即值越低坡度越缓,值越高坡度越陡)

 如果想减低地形(按住Shift再用刷子刷即可)

如果想固定地形最高高度可以选择Set Height并指定最高高度

 如果想是地形光滑一些,则选择Smooth Height进行粉刷

 给地形添加贴图,选择Paint Texture->create Layer,选择之前导入好的素材就可以了(再Texture中)

 

设置法线使岩石更有质感

左边是设置了法线,右边是没有设置法线

 

 在中间空的部分在添加一些地形

 再创建一个地形用于粉刷(默认第一个Layer铺满全景,第二个用于粉刷)

 

 

添加树(模型)(这里的树资源是unity Assets store里Standard Assets里的) 

 使用shift可减少树

添加草(贴图)

 三、前面我们知识学习了一些基本操作,接下来正式开始制作游戏,创建人物(在Meshes中把人物拖到Hierarchy面板,,命名为Hero)

 根据人物大小创建地形(设置长宽高为20m),绘制地形(可适当平滑调节),调节光强度

这里需要注意下Size的大小(Size大小代表贴图单位以多大范围去铺满地形,太小就会密密麻麻不好看了) 

 

 添加石头(赋值多块后适当调整位置使其美观)

 添加古迹遗迹

 添加草(小草、大草、植被等,调节角度和大小不要都一样了)添加树

调整相机位置

 Mesh Coliider:与原物体一本一致的coliider,碰撞检测复杂j计算量大不建议使用,系统性能消耗大,一般使用Box coliider/sphere collider/capsule coliider

四、添加火堆光

太阳光:最上面的太阳是游戏中的模拟太阳,下面是平行光对象(相当于太阳光),当我们调节平行光对象时上面的太阳位置是会变化的(你可以调节来看到日出和日落)

还有其他光源:

Directional Light:平行光

Point Light:点光,相当于一个电灯泡

Spot Light:点光,相当于一个手电筒光

Area Light:区域光

 

 了解了光源后,我们来进一步制作,首先把太阳光调暗营造一个黑夜的场景

 

 制作灯(先做一个灯座,然后使用Point Light,再做成prefabs)

使用LightMapping取消实时灯光而是做成贴图形式减少实时计算压力,打开Window->Rendering->Lighting,将窗口拖至右侧以便查看

将Terrain、Env、Light中Inspector面板中的static勾选 

 

 

 

 修改每个灯光的Mode为Baked(注意是每个都要改)

然后选择Lighting->Scene->Generate Lighting,点击后会有进度条(加载会慢需要耐心等待)

 

 当进度条加载完毕后,我们禁用所有灯光后,就会看到新生成了同样效果的灯光贴图了

 将有灯座的灯光Mode设置为Mixed,shadow Type设置为Soft Shadows

 然后再次选择Lighting->Scene->Generate Lighting,最终效果:

 设置火堆效果

创建火堆,并调整到灯座中心位置,

 设置火焰有效区域

设置火焰个数和范围 

设置火焰大小 

 

创建火焰材质并设置火焰的材质 

 

然后apply All,即给其他火堆也添加效果 

 

最终效果 

 补充:

创建火堆动画

点击创建,然后在Animations下新建一个Flicker文件 

 为Intensity添加动画

调节每帧的灯光强度,然后Apply All应用到其他火堆 

 为火苗添加运动,改变火堆的位置从而改变影子的朝向

五、添加人物导航(即点击地面某点,人物自动通过最短路径移动到该点)

Window->AI->Navigation,然后在右侧就会出现对应面板

调整半径,然后点击Bake 

 

 其中蓝色部分为角色可行走区域

 取消草的navigation static,然后再次Bake(这样做是让人物可以穿过草移动,即增加可移动区域,其他草同理)

 同时我们注意到石头上方也被设置为了可移动区域(但实际是不可移动的)所以我们需要设置其为不可移动,其他石头同理,然后再次Bake

 

 为主角添加导航组件(导航组件是为了判断某个位置角色是否可以穿过)

 调整高度和半径

创建Hero代码(并把Hero与Hero对象绑定)当鼠标左键点击地面某点时,控制角色移动(实现逻辑:点击鼠标后从点击位置生成一束射线,当射线与地面碰撞时则输出地面上的该点)

绑定NavMeshAgent,并设置导航目的地

设置Angular Speed(人物转向速度),然后演示时就可以看到小人能移动了

 添加相机跟随(添加FollowTarget脚本、绑定Camera)

绑定Hero

 现在相机跟着人物同步移动了

但是,我们发现人物移动没有行走动画,所以接下来,我们做进一步添加

预览动画 

在Animations文件夹下新建Animator Controller,命名为HeroController

 绑定HeroController

打开Animator面板 

 设置默认状态(将下图框选部分拖入面板中即可)

 同理添加walk和run动画

添加参数 

 

添加从idle到walk的转变关联,并设置促发时的速度阈值(如下图为速度大于0时转变为walk动画状态)

 

 同理设置从walk变为idle状态的阈值(速度小于0.1时转变)

 将两段箭头的Has Exit Time取消勾选(表示动画的切换随时发生)

 同理,设置walk与run状态变换阈值,同时取消Has Exit Time勾选

 设置speed参数值(需要在代码中设置),首先在Hero代码中声明一个animator,然后绑定Animator

 最后运行游戏,可以看到在人物移动时状态的切换(角色移动时先走一小段距离然后变为跑的状态)

引用:登录 - SiKi学院 - 生命不息,学习不止!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值