美文网首页我爱编程
零基础入门-古迹探险(Unity 2017)笔记

零基础入门-古迹探险(Unity 2017)笔记

作者: 街头顽禽 | 来源:发表于2018-05-24 21:11 被阅读97次

001

工程的创建和打开

打开已经存在的工程

Assets  (资源目录)

Library (库文件夹)        Unity开发游戏时生成的一些中间文件

ProjectSettings            (工程设置文件夹)

Temp (临时文件夹)Unity打开时会自动创建,关闭时会自动删除此文件夹

002

工程目录

Assets:

Textures (贴图)

Models  (模型)

Mats    (材质)

Project面板中可以切换单列视图和双列视图

003

Unity中资源的导入方式

① Window -> Asset Store    如果无法打开,可以试试右上角的Reload(重新载入)

② 在Project面板中直接搜索Asset Store(资源商店),如果不显示,在Edit -> Preferences -> Show Assets Store Search Hits

③ 直接拖到Project面板下

④ 在Project面板下右键Import Package -> Custom Package(自定义资源)

⑤ 导入Unity的标准资源(前提是在Unity安装包中安装Standard Assets插件,然后在Project面板中 Import Package下面选择

004

Unity中的3D物体

3D GameObject : Cube     立方体

                               Sphere  球体

                               Capsule  胶囊体

                               Cylinder 圆柱体

                               Plane    平面 (单面大面片) 

                               Quad    1*1的平面(单面面片) 之前是用这个这2D游戏                 

                               Ragdoll  布娃娃系统 

                              Terrain  地形系统 

                              Tree    枯萎的树干 

                               Wind Zone (风系统) 它会模拟风区

                              3D Text  3D的文字

  导入一棵树: Mesh(网格) 控制模型的一个形状和样子

                           Materials (材质) 控制它的外观  -> 贴图控制它的光滑度,反光等

005

菜单栏

Unity中可以添加同样的窗口 Add Tab

GameObject -> Align With View  使Game视图和Scene视图保持一致

GameObject -> Move To View 移动相机,向前聚焦

006

工具栏

T 调节游戏物体的大小,和缩放类似,常用于调节2D游戏的UI

Pivot点  原点

Center    整体的中心点(包含子物体)

※区别: 例如我们导入一颗树,它的Pivot点位置树根,而中心点是计算出模型的中心点。

Layers 层 显示与隐藏与锁定

007

窗口操作

窗口最大化:右上角的小列表里的Maximize

008

Scene窗口下视野控制

在Scene场景面板下按住右键可以围绕自身旋转,Q键向下移动,E键向上移动,W键向前移动,S键向后移动,可以在

视野中进行漫游

控制Main Camera的视野: Main Camera -> Camera -> Prejection,里面有Perspective(透视视图)和Orthographic(正交视野)。

009

Transform组件

Transform组件中修改Rotate中x,y,z的角度,x和z会围绕其自身的轴旋转,y轴会按照世界坐标的y轴旋转。

010

控制游戏物体移动的小技巧

按住Ctrl移动物体是以一米为单位的

移动物体的步长是可以修改的,默认为1.

Edit -> Snap Settings进行修改,里面的值都是在按住Ctrl移动才会生效

按下V可以吸附顶点,移动物体时可以和其他物体的顶点吸附

011

导入资源,Prefab预制体

在这里把Prefab(预制体)比作父亲,通过Prefab复制到Hierarchy面板下的物体比作儿子,他们的关系式:父拉子

,改变的子的不理父

如果将Hierarchy物体关联的Project下的Prefab删除掉,物体会曾红色,显示Missing,解决方法是:GameObject ->

Break Prefab Intance (删除关联的预制体)

Apply:Hierarchy面板中修改的物体,如果想要将通过Prefab复制的物体和Hierarchy中修改的物体保持一致,请点

击Apply (应用),就会应用到对应的Prefab

脱离Prefab: 同上 GameObject -> Break Prefab Instance

012

地形设计1

创建地形面片(Terrain)

选择Terrain组件,选择设置小按钮:Terrain Width(地形宽度)

                                Terrain Length (地形长度) T

                                Terrain Height (地形的最大高度)

选择地形升高降低按钮一: Brushes 笔刷

                    Brush Size 笔刷大小

                    Opacity 地形增高的快慢程度

                    包含20种不同的地形

按住Shift再进行粉刷会降低地形,最低为0

013

地形只升高按钮2:这个工具只能升高地形

Height可以设置所描绘地形的最大高度 -> 下面有一个Flatten按钮:只将地形粉刷到某个高度上

地形平滑按钮3:Smooth Height 用于平滑那些过于尖锐或缺乏真实感的地形

地形贴图工具按钮4: Paint Texture (绘制贴图)

                    Texture (贴图) -> Add Texture 添加贴图 -> 第二个是法线,可以让地形更加有质感

                    Edit Texture 编辑视图

                    Remove Texture 移除视图

※ 第一次添加贴图是给整个地形添加的,第二次则可以自己绘制

添加树按钮5: Place Trees (添加树) Shift 减少树

绘制细节按钮6:Paint Details (粉刷细节) 粉刷一些植被,草地等。

014

古迹探险地形设计1

实操

015

古迹探险地形设计2

实操

016

古迹探险地形设计3

实操

017

什么是刚体

Rigidbody刚体组件可以模拟物理效果,让物体拥有物体特性。

Mass 质量

Drag 摩擦力或阻力 下降和旋转都会变得缓慢

Angular Drag 只控制旋转的阻力

Use Gravity 是否使用重力

Constraints: 冻结选项 -> Freeze Position 冻结方向 :x y z

                        Freeze Rotation 冻结旋转方向 :x y z

018

如果禁用Box Collider(碰撞器),物体就可以被穿过。

编辑碰撞器(Box Collider):点击 Edit Collider

关于碰撞器的性能:Collider有Box Collider和Sphere Collider和Capsule Collider和Terrain Collider等等

                                    其中Box Collider(顶点越多越耗费性能)最节约性能。

最耗费性能的碰撞器: Mesh Collider 最精准的碰撞器,也是最耗费性能的碰撞器。

                                         取消勾选 Mesh Renderer 可以显示Mesh Collider的表格

019

碰撞检测函数

void On CollisionEnter (Collision collision){

        print ("OnCollisionEnter"); //碰撞开始(接触)的那一刻,只会调用一次

}

void On CollisionExit (Collision collision) {

        print ("OnCollisionExit");  //碰撞结束(离开)的那一刻,只会调用一次     

}

void On CollisionStay (Collision collision) {

        print ("OnCollisionStay");  //碰撞发生的时候,逐帧调用

}

020

如何取得碰撞函数

俩个物体碰撞的条件:①:双方身上都有Collider(碰撞器) 

                                        ②: 其中一个身上有刚体组件(Rigidbody)

                                        Static Collider(静态的碰撞器):物体身上只添加了一个Collider,没有Rigidbody组件

                                        Is Kinematic :如果勾选上,相当于禁用Rigidbody组件

                                        //该碰撞检测脚本位于主动方

                                        void OnCollisionEnter (Collision collision) {

                                                   print(collision.collider);      //取得被碰撞物体的碰撞器

                                                   print(collision.collider.name);  //取得被碰撞物体的名称

                                                   print(collision.collider.tag);  //取得被碰撞物体的标签

                                       }

021

触发检测

在Box Collider中将Is Trigger勾选上,这个物体就成为了一个触发器

做触发检测:Mesh Filter (×) 可以删除

                        Mesh Renderer (×) 可以删除

                        Box Collider(Is Trigger) (√) 必须保留

※ 触发检测脚本可用于碰撞体和被碰撞体任何一方,都可以检测到碰撞和触发

void OnTriggerEnter (Collider other) {        //other是触发器所在的游戏物体

            print("OnTrigger"+other);      //获取触发器的名称

            print("OnTrigger"+other.name); //获取触发器所在游戏物体的名称

            print("OnTrigger"+other,tag);  //获取触发器所在游戏物体的标签

}

022

Unity中的四种灯光

Directional Light  平行光 可以改变光的照射位置,影子的方向也会改变,世界中的太阳会跟着平行光位移

                               Reset 复位后旋转可模拟日出和日落

Point Light            点光源 相当于一个电灯泡,由中心向四周发射,可改变其Range(范围)Color(颜色)Intensity(强度)

Spot Light             聚光灯 相当于一个手电筒,可以调节Spot Angle(角度)和Intensity(强度) (这里让我想到恐怖游戏)

Area Light            区域光 烘焙中用到吧,有待补充

023

给场景添加火堆

创建黄色点光源(Point Light),渲染火堆

024

如果不使用光照贴图的话,灯光它是实时计算的,这样会耗费性能

Mode : Realtime 实时计算

Baked 烘焙贴图 (选择Baked烘焙再Generate Lingting擦会有光照贴图)   

Mix  混合(实时+烘焙) 用于火光

025

Lightingmapping补充

火堆的阴影:选择Point Light -> Inspector面板 -> Shadow Type(阴影类型): No Shadow (无阴影)

                                                                                     Hard Shadow (硬的阴影)

                                                                                     Soft Shadow (柔和的阴影)

※ 每次修改完灯光的Range和Shadow等需要重新渲染(Generate Lighting)才有效果

026

使用粒子系统创建火焰

① 在火堆(复制的一个Prefab)下面,右键Effects(特效)-> Particle System(粒子系统),调节好它的位置

② 点击粒子界面里的Shape(形状),在Scene视图调节它的缩口

③ 选择Start Lifetime(生命时间),比如火焰,数值越大,火焰越向上

④ 选择Statr Speed (速度),调节火焰的速度,也可以调节随机的速度,右键Random Between Two Constants,规定Min值和Max值

⑤ 在Project面板中选择动画,在这里是4*4帧的火焰动画,然后创建一个材质(Material),在材质球中的Shader(着色器)中选    择Particles -> Additive(添加物) -> 选择4*4帧的Texture(贴图) -> 选择颜色(可省略)->

⑥ 将材质指定给Particle System(粒子系统)。在Particle System中选择Renderer(渲染器)-> Material -> 指定之前创建的  火焰材质球

⑦ 此时动画没有播放,在Particle System中 -> Texture Sheet Animation(贴图纸张动画) -> Tiles(格式) 默认为1*1设置为4*4

⑧ Start Size 改小贴图,目的是让火焰变小

⑨ Emission(发射) -> Rate over TIme(速率) 右键也可以取一个范围 Random Between Two Constants 修改Min值和Max值

⑩ 往中间聚拢,缩小上边的口子 大小应该是慢慢变小的 选择Particle System -> Size over Lifetime (生命周期的规模)

  -> Size 选择由大变小的曲线 

  最后修改Emission(发射)-> Rate over time 增加发射的速率

027

创建动画(火光闪烁)

① 选中要添加动画的灯光 -> Windows -> Animation -> 点击Create -> Add Property(添加性能) -> Light -> Intensity

② 打开红色录制按钮 一帧一帧编辑灯光的强度变化 点三角运行按钮观看效果

③ 添加火光的摇摆 Transform -> Position

④ 调节Samples的值可以改变速度快慢,越大越快

028

导航系统-导航网格生成

让主角自动寻找最短路径,并且避障

① 确定环境的Navigation都勾选上,全部勾选Static也行

② Windows -> Navigation -> Bake -> 点击Bake键进行导航网格的烘焙

③ 修改物体的不可靠近区域 减小Agent Radius(实体半径)

④ 草可以穿过去,将Inspector面板下的Static下的Navigation Static取消勾选,重新烘焙

⑤ 生成导航网格是根据Mesh Renderer生成的,双击物体显示Mesh Renderer,Navigation -> Object -> Navigation Area(导航区  域) -> Not              Walkable

⑥ 选中Hero 给主角添加Nav Mesh Agent(导航网格代理) 修改半径(Radius)和高度(Height)

029

通过导航系统控制英雄移动

在主角身上创建脚本Hero

using UnityEngine.AI;

public NavMeshAgent agent;            //通过拖拽方式赋值

void Update () {

    if(GetMouseButtonDown(0))            //按下鼠标左键

    {

        Ray ray = Camera,main.ScreenPointToRay(Input.mousePosition);    //鼠标位置转换为射线

        RaycastHit hit;    //保存碰撞信息

        if(Physics.Raycast(ray, out hit)      射线检测(这里没细讲)         

        {

            //hit.point

            //print(hit.point);    //在Console输出坐标点(x,y,z)

              agent.SetDestination(hit,point);  //设置目的地

        }

    }

}

Nav Mesh Agent: Angular Speed(旋转角度的速度) 这里讲Hero设置为500 数值越大转身越快

030

控制摄像机的跟随

public Transform hero;

private Vector3 offset;

void Start () {

    offset = transform.position - hero.position;

}

void Update () {

    transform.position = offset + hero.position;

}

031

控制角色的动画播放

① 创建一个Animation Controller(动画控制器)指定给Animator

② Idle Walk Run动画

③ Nav Mesh Agent : Speed(主角移动的最大速度)

④ Parameters -> 添加一个参数float Inspector面板 -> greater (相当于大于)

                                                                                         -> less    (相当于小于)

⑤ 取消勾选 Has Exit Time(无结束时间,就是立即切换)

⑥ 在主角的脚本编辑

  public Animator anim; //拖拽进行赋值

  void Update (){

        anim.SetFloat("Speed",agent.velocity.magnitude);  //anim.SetFloat(名字,组件.速度.数值);

  }

相关文章

网友评论

    本文标题:零基础入门-古迹探险(Unity 2017)笔记

    本文链接:https://www.haomeiwen.com/subject/tbkejftx.html