Unity3D新手入门

转自擅码网并修改
学习目的: 掌握Unity3D 常用的软件操作和一些基础脚本的使用

文章目录

  • Unity3D新手入门
    • 1. Unity3D软件
      • 1.1 Unity3D 介绍
      • 1.2 Unity Hub 下载与安装
    • 2. 游戏场景基本操作
      • 2.1 新建项目与新建场景
      • 2.2 基本3D 物体的创建
      • 2.3 Scene 面板基础操作
    • 3. 游戏场景制作3D模型
      • 3.1 尺寸与方向
      • 3.2 3D 模型制作与操作
    • 4. 3D 模型美化之材质球
      • 4.1 材质球与贴图
      • 4.2 创建与使用材质球
      • 4.3 shader简介
    • 5. 3D 模型重用之预制体
      • 5.1 父子关系
      • 5.2 预制体
    • 6. 基本组件之摄像机
      • 6.1 场景美化
      • 6.2 Game 视图
      • 6.3.摄像机常用操作
      • 6.4 摄像机主要相关属性
    • 7. 基本组件之灯光
      • 7.1 灯光简介
      • 7.2 方向光
      • 7.3 点光源
      • 7.4 聚光灯
    • 8. 组件与脚本
      • 8.1 Transform 组件
      • 8.2 C#脚本
    • 9. 鼠标键盘输入
      • 9.1 获取键盘输入
      • 9.2 获取鼠标输入
    • 10. 使用变换组件移动游戏物体
      • 10.1 组件、物体与类、对象的关系
      • 10.2 变换组件移动物体
      • 10.3 键盘控制移动方向
    • 11. 物理组件之刚体
      • 11.1 变换组件的运动特点
      • 11.2.刚体组件简介
      • 11.4 使用刚体移动物体
    • 12. 物理组件之碰撞体
      • 12.1 碰撞体简介
      • 12.2 Box Collider
      • 12.3 Sphere Collider
      • 12.4 Capsule Collider
      • 12.5 Mesh Collider
    • 13. 刚体常用方法介绍
      • 13.1 AddForce()
      • 13.2 AddRelativeForce()
      • 13.3 FixedUpdate()固定更新方法。
    • 14. 刚体碰撞事件监测与处理
      • 14.1 碰撞事件简介
      • 14.2 碰撞事件监测方法
    • 15. 刚体触发事件监测与处理
      • 15.1 触发事件简介
      • 15.2 触发事件监测方法
    • 16. 网格组件之网格过滤器和渲染器
      • 16.1 网格过滤器组件
      • 16.2 网格渲染器组件
    • 17. 开关门实现 与 查找游戏物体并使用其脚本
      • 17.1 模型旋转实现开门效果
      • 17.2.触发器实现开关门
    • 18. Tag 标签
      • 18.1 通过Tag 标签查找物体
      • 18.2 触发器实现
    • 19. PC 端游戏打包与发布
      • 19.1 游戏打包发布简介
      • 19.2 Unity 发布PC版游戏

1. Unity3D软件

1.1 Unity3D 介绍

  1. Unity3D 是什么?
    一个软件,一个游戏开发引擎(工具)
    别名:Unity3D Unity U3D

  2. Unity3D 能做什么?
    游戏开发(手游) ---- 60%
    游戏开发(页游) ---- 10%
    VR,AR,仿真— 30%

  3. Unity3D 有哪些优势?
    ①学习成本较低,开发效率高。
    ②跨平台运行,只需要开发一次,稍加修改,就可以发布到20 多个平台运行,
    比如:Windows,Android,IOS,Mac,Web…

  4. 为什么要学Unity3D?
    ①相对于其他编程,Unity3D 从业人数较少(物以稀为贵)。
    ②相对于其他编程,Unity3D 入门门槛较高(富有挑战性)。
    其他编程:Web、IOS、Android 等等

  5. 学习Unity3D 需要哪些基础?
    ① 编程语言基础:C# (硬性) ----------- 60%
    ② 英语基础:初中高中(软性) ----------- 30%
    ③ 数学基础:初中高中(软性) ----------- 10%

1.2 Unity Hub 下载与安装

  1. 下载与安装
    官网:https://unity.com/
    下载下来的是一个“下载器”,需要选择版本进行安装

  2. 注册Unity3D 账号
    ① 登录Hub
    ② 后期使用Unity3D 官网的相关服务

  3. 软件注册
    Person
    [友情提示:我们是为了更好的学习,研究,交流,使用Unity3D 才选择使用注
    册机,如果是用于商业开发建议购买正版授权]

2. 游戏场景基本操作

2.1 新建项目与新建场景

  1. 项目
    项目:每一个游戏都是一个独立的项目。

  2. 项目存储结构
    项目文件夹

文件夹名称 Name 作用
Assets 资源文件夹 保存游戏中所有的资源。
Library 库文件夹 保存当前项目需要的库文件。
Logs 日志文件夹 Unity工作过程中的日志文件
Packages 包管理文件夹 存放工程的包配置文件和development状态具体包
ProjectSettings 项目设置文件夹 保存项目的设置信息。
Temp 临时文件夹 保存项目的临时数据。

UPM用的,类似于隔壁nuget、npm、pip一样类型的东西,包管理工具。这个目录用来存放工程的包配置文件。和development状态具体包。(对于不知道这玩意干嘛的情况来说,只要知道它会存放当前工程的包配置信息就行了,可以粗略的理解为这是另一种projectsetting目录)

关于日志文件:https://baike.baidu.com/item/日志文件/1505348?fr=aladdin

  1. 面板布局
    有多种布局方式,选择不同布局方式,界面显示效果不一样。
    例如下面两个布局方式,分别是 default 与 2 by 3

  2. 新建场景
    场景: 指场面,具有多种元素,游戏中的场景的元素则是有:游戏角色、建筑、生物等。
    ①File–>New Scene(Ctrl + N)新建场景;
    ②File–>Save Scene(Ctrl + S)保存场景。
    场景的后缀为 “.unity”

  3. 两个面板

面版名称 作用
Scene(场景)面板 用于预览当前的场景
Project(项目)面板 用于管理当前项目中所有的资源

其中Project面板内的 Assets:对应我们项目文件夹中的Assets 文件夹。

注意:
为了更好的管理我们的游戏资源,我们会在Assets 中建立不同的文件夹,用来存储不同的游戏资源。比如“Scenes”文件夹,用来存储游戏场景。

Assets 中创建文件夹步骤
光标移至 Assets 上单击右键,会弹出菜单–>Create–>Folder,然后改名。

2.2 基本3D 物体的创建

  1. Hierachy 面板
    Hierachy:层级面板,用于显示当前场景中有哪些资源。在这个面板中可以往
    场景中添加资源。

  2. 创建基本3D 物体
    创建基本3D 物体步骤
    Hierachy 面板的空白处单击右键–>3D Object–>Cube

常用的5 中3D 物体:
Cube(立方体),Sphere(球体),Capsule(胶囊体),Cylinder(圆柱体),Plane(平面)

在Hierachy面板中,双击某个物体,可以在Scene 面板(视图)中聚焦到该物体。

2.3 Scene 面板基础操作

  1. 工具栏功能演示
    每一个物体都有三个轴和三个平面

    界面左上角有几个工具栏,分别对应键盘上:Q W E R T Y,

工具栏功能如下:
手型:平移场景的观察角度,左右上下
十字箭头:可以按某一轴或某一平面,移动物体的位置(箭头:固定方向移动; 面:平行于该面移动)
旋转:可以旋转物体
缩放:可以缩放物体(箭头:按某一轴缩放; 面:等比例缩放)
十字箭头与旋转结合:功能是两者的结合

  1. 鼠标功能演示
    鼠标左键:选中场景中的物体
    鼠标中键:按下–>平移场景的观察角度;滚动–>拉远拉近
    鼠标右键:旋转场景的观察角度

  2. 鼠标与键盘组合操作演示
    Alt + 鼠标左键:按照某一中心点,旋转观察角度
    Alt + 鼠标右键:拉远拉近

3. 游戏场景制作3D模型

3.1 尺寸与方向

  1. 尺寸
    以Cube 作为参照,Cube 是长宽高都为1 米的参照物。

  2. 方向-世界坐标系

    X(红色):右边
    Y(绿色):上边
    Z(蓝色):前边
    世界坐标系可以理解为游戏场景中的方向,东南西北上下。
    在游戏场景中世界坐标系是不变的。

  3. 方向-物体(自身)坐标系
    X(红色):右边
    Y(绿色):上边
    Z(蓝色):前边
    物体(自身)坐标系是以物体自身为参照,确定自身的右边,上边,前边。
    可以通过工具栏上的“Local”、“Global”来切换物体身上的坐标系显示效果。
    其中Local是切换成自身坐标系,Global则是切换成与世界坐标系重合。

  4. 世界坐标观察模式
    Persp:透视模式,近大远小。
    ISO:正交模式,远近一样大。

3.2 3D 模型制作与操作

  1. 快捷键
    Ctrl + D:复制物体
    左键单击物体 + F:快速聚焦某个物体

  2. 多个物体整体操作
    在场景中左键选取或在Hierachy面板中 Ctrl 多选,然后就可以使用工具栏整体操作。

4. 3D 模型美化之材质球

4.1 材质球与贴图

  1. 材质球与贴图介绍
    材质球:Material
    材质:物体的质地,物体看起来是什么做的。
    贴图:Texture,用于材质球的显示,相当于给物体套层皮。

  2. 管理材质球与贴图
    在Assets 中建立“Materials”文件夹,用于管理材质球。
    在Assets 中建立“Textures”文件夹,用于管理贴图。

4.2 创建与使用材质球

  1. 创建材质球
    在Assets 中的 Materials 文件夹上,右键弹出菜单->Create->Material,完成材质球的创建。
    材质球文件的后缀是“.mat”。

  2. Inspector 面板

名称 作用
Inspector:又称检视面板(属性面板)。 用于查看和编辑游戏物体和项目资源的具体信息。
  1. 编辑材质球

    ①在鼠标选中需要编辑的材质球物体;
    ②点击“Albedo”前的圆点,在弹出的“贴图选择界面”选择需要的材质;
    Albedo: 纹理贴图(漫反射贴图)

  2. 使用材质球
    ①将材质球拖拽到 Hierarchy 面板上相应的物体上;
    ②将材质球拖拽到 Scene 面板上相应的物体上。

4.3 shader简介

Shader:着色器。
通过着色器来编辑材质球的效果。

5. 3D 模型重用之预制体

5.1 父子关系

  1. 空物体
    Hierarchy 面板create–>Create Empty 创建一个空物体。
    空物体:好比就是电脑上的文件夹,可以用于管理资源。
    右键点击rename可以改名。

  2. 父子关系
    原则:移动父亲,儿子会跟着移动,就像移动电脑上的一个文件夹,文件夹中的资源会跟着一块移动一样的道理。
    在 Hierarchy 面板中,任意两个物体都可以建立父子关系。

如何建立父子关系?
①在 Hierarchy 面板中,将选中的物体(子)拖到某一物体中(父)
②在 Hierarchy 面板中,选中物体右键create一个新物体,将自动建立父子关系

5.2 预制体

  1. 预制体简介
作用
预制体:Prefab 预先准备好的物体,可以重复使用。
  1. 管理预制体
    在Assets 中建立“Prefabs”文件夹,用于管理预制体。

  2. 创建预制体
    直接将 Hierarchy 面板中的游戏物体拖拽到 Project 面板的Assets 中,即
    可创建一个预制体。
    预制体文件的后缀是“.prefab”

  3. 使用预制体
    ①将预制体直接拖拽到 Hierarchy 面板;
    ②将预制体直接拖拽到 Scene 面板;
    都可以在场景中创建一个相应的物体。

  4. 预制体与非预制体的区别
    ①非预制体的名字是黑色,预制体名字是蓝色;
    ②在 Inspector 面板,非预制体是图标颜色是白色的,预制体的图标是蓝色的。
    ③在 Inspector 面板,预制体比非预制体多了一个 “Prefab 选项”。

  5. 预制体的好处
    只要编辑其中的一个,然后在 Inspector 面板中的 Prefab 选项里的 Overrides–>“Apply All”一下,所有的预制体都会改变。
    包括场景中的所有同类预制体和Perfabs文件夹内的预制体。

6. 基本组件之摄像机

6.1 场景美化

  1. 给场景添加地板
    ①新建“plane”物体作为地板;
    ②创建地板使用的材质球;
    ③编辑地板材质球,设置“Tiling”选项中的x,y 的值,使地板进行分块显示。
Tiling:贴瓷砖 使贴图分块显示。

6.2 Game 视图

Game:游戏视图 游戏的预览(运行)窗口

当点击“播放”按钮,视图会自动切换到 Game(游戏)视图 进行预览;再一次的点击“播放”按钮,就可以退出游戏的运行状态,回归到编辑(Scene)视图。

注意:游戏在运行状态时,做的任何操作都不会被保留。

6.3.摄像机常用操作

  1. 摄像机的简介与作用
    简介:Hierarchy面板中有一个摄像机(Camera),用于观察我们的游戏世界。摄像机有一个白线构成的观察区间,叫做 “视锥体”
    所有在“视锥体”范围内的物体,我们都可以看到。
    作用:在合适的位置和角度观察我们的游戏世界。
    我们游戏中观看到的画面也是由摄像机的角度和位置决定的。

  2. 摄像机基本操作
    ① 在Hierarchy 面板上选中摄像机,再点击展开摄像机的Camera组件,Scene 视图右下角会出现预览窗口(Game Preview)。
    ② 根据轴向移动摄像机的位置,旋转摄像机的角度。
    创建摄像机: Hierarchy 面板右键–>Camera。
    选择物体或摄像机后,GameObject菜单–>Align With View或(Ctrl + Shift + F)对齐视图。
    让摄像机对齐到当前视图,使 Scene 与 Game 中的观看角度和位置一致。
    也可以选中物体使物体转移到 Scene 视图中的位置,并旋转成相同的角度


6.4 摄像机主要相关属性

位置:选中 Camera 后 Inspector 面板里面,

  1. Clear Flags[清除标记]
    效果呈现在 Game 视图 里。
    Skybox:天空盒
    Solid Color:固定颜色(纯色)

  2. Background[背景颜色]
    当 Clear Flags 为Solid Color 时,Game 视图里 场景的背景颜色。

  3. Projection[投影]
    Perspective:透视模式,3D 游戏使用,近大远小。
    Orthographic:正交模式,2D 游戏使用,无近大远小。

  4. Clipping Planes[切割面]
    Near:近平面,摄像机最近能看到的东西。
    Far:远平面,摄像机最远能看到的东西。

7. 基本组件之灯光

7.1 灯光简介

灯光:light,用于照亮我们的游戏世界。
附加作用:烘托场景的氛围;使场景中产生阴影,增加真实感和立体感。

在我们创建一个新的Scene 场景时,场景中会默认带有两个游戏物体:
一个是摄像机(Camera),一个是灯光(Light)。

隐藏与显示游戏物体:物体 Inspector 面板上“图标”右侧的复选框。

7.2 方向光

  1. 简介
    方向光:Directional Light,用于模拟太阳,模拟自然光。
    方向光任何地方都能照射到,就和太阳一样,但是要注意照射方向。
    创建方向光:
    Hierarchy 面板右键–>Light–>Directional Light
  2. 常用属性
属性 作用
Type[类型] 用于切换灯光的类型。比如方向光、聚光灯、点光源等
Color[颜色] 设置灯光的颜色
Intensity[强度] 设置灯光的照射强度
Shadow Type[阴影类型] 设置方向光照射到的物体显示的投影效果

Shadow Type[阴影类型]
1.No Shadows:无阴影
2.Hard Shadows:硬阴影,方格组成的阴影
3.Soft Shadows:软阴影,模糊的阴影

  1. 注意事项
    方向光任何地方都能照射到,就和太阳一样,但是要注意照射方向。
    而照射方向可以通过 旋转功能 来改变。


7.3 点光源

  1. 简介
    点光源:Point Light,用于模拟电灯泡的照射效果。
    创建点光源:
    Hierarchy 面板右键–>Light–>Point Light
  2. 主要属性
    Range[范围]
    作用:设置点光源的照射范围,一个球状范围。

7.4 聚光灯

  1. 简介
    聚光灯:Spot Light,用于模拟聚光灯照射效果。
    创建聚光灯:
    Hierarchy 面板右键–>Light–>Spot Light
  2. 主要属性
    Spot Angle[聚光角]
    作用:设置聚光灯的照射角度。

8. 组件与脚本

8.1 Transform 组件

  1. 组件
    组件:Component,游戏物体的组成零件。
    在 Inspector 面板中就有一部分组件。而每一个物体包括 Light和Camera 都是有一个个组件构成的。

Unity3D 就是一款“组件式”游戏开发引擎,使用各种各样的组件拼装出我们
游戏物体,最终拼接出一款完整的游戏。
Unity3D 这款引擎提供了很多种类的组件,后期就需要学习这些组件的使用和特性,以及它们能实现的功能和效果。
在Unity3D 中,各种各样的组件,就是组成我们游戏世界最基本的元素。

而这些组件就在 Compone菜单 内

  1. Transform 组件
    Transform:变换。所有的游戏物体都具备的一个组件,是最基础的一个。组件,用于存储游戏物体的基本信息。

Position:位置;
Rotation:旋转;
Scale:缩放;

组件的启用与关闭:
点击Inspector 面板上相应的组件图标右侧的复选项,来进行切换。

其中 Transform 组件是不可以关闭的。

8.2 C#脚本

  1. 何为脚本?
    脚本:Scrpit,用于控制游戏的逻辑。

  2. 管理脚本
    在Assets 文件夹中创建“Scripts”文件夹,管理脚本资源。

  3. 创建脚本
    在Assets 文件夹上右键–>Create–>C# Script,马上改名。
    C# 脚本文件的后缀是“.cs”。
    双击脚本文件,就可以调用出“代码编辑器”进行代码的显示。

  4. 脚本代码简介
    Start()方法: 当游戏运行起来,就会马上执行,且只执行一次。
    Update()方法: 循环调用,每帧调用一次。一秒钟大概执行60 次。

帧:我们的游戏画面是在不停的刷新的,每刷新一次,就是一帧。

输出调试的方法:Debug.Log ();

Start()和Update()方法都是Unity3D 内部的“事件方法”,不需要我
们人工调用,系统会自动调用和管理这些“事件方法”。且返回值均为空(void)

  1. 使用脚本
    ①直接将脚本拖拽到 Hierarchy 面板上物体身上;
    ②直接将脚本游戏物体的 Inspector 面板上;
    只要运行游戏,脚本就会执行。

  2. Console 面板
    Console:控制台。用于输出显示游戏运行过程中的调试信息。


功能按钮:
Clear:清除功能,清除控制台中的全部信息;
Collapase:折叠功能,将相同的内容合并到一条显示,更新后面的数字;
Clear on Play:游戏每次运行时清除上一次运行的内容;

9. 鼠标键盘输入

9.1 获取键盘输入

  1. 相关方法
方法 作用
Input.GetKey(KeyCode.索引码); 按下某键后,持续返回true
Input.GetKeyDown(KeyCode.索引码); 按下某键的一瞬间,返回true
Input.GetKeyUp(KeyCode.索引码); 抬起某键的一瞬间,返回true

返回值:bool 类型
参数:KeyCode.索引码 比如KeyCode.A 键盘上的A
KeyCode是一个枚举类型(Enum)
KeyCode:键码,保存了键盘按键“索引码”。

9.2 获取鼠标输入

  1. 相关方法
方法 作用
Input.GetMouseButton(值); 按下某键后,持续返回true
Input.GetMouseButtonDown(值); 按下某键的一瞬间,返回true
Input.GetMouseButtonUp(值); 抬起某键的一瞬间,返回true

返回值:bool 类型
参数:鼠标按键索引值,0->左键, 1->右键, 2->中键。
比如Input.GetMouseButtonDown(0);表示左键按下时一瞬间返回true

10. 使用变换组件移动游戏物体

10.1 组件、物体与类、对象的关系

10.2 变换组件移动物体

  1. 相关方法
方法 作用
gameObject.GetComponent < 组件 >(); 获取相应组件的引用。并返回该组件类型的值
Transform变量名.Translate(Vector3.方向, Space.坐标系); 按照某一坐标系沿着某一方向移动物体的位置。通过修改位置,所以会发生穿模。

查找当前游戏物体身上的某个组件,然后返回该组件类型的字段,要用同类型字段保存。

注意: 该变量要先被赋值
Transform变量名 = gameObject.GetComponent<Transform>();

  1. 相关参数

Vector3(构造体):三维向量。
向量,可以表示一个方向,也可以表示一个位置。
比如 Vector3.forward向前走,速度为每秒一米
如何调整速度:在方向后加上* 几倍不允许使用 double类型,所以如果是0.5倍,就要写成 * 0.5f,每秒半米。

Space[enum]:空间。
Space.Self:表示物体自身的坐标系。
Space.World:表示物体所在的世界坐标系。

备注:脚本是游戏物体的一部分,一般控制谁,脚本就挂载在谁的身上。

10.3 键盘控制移动方向

查使用键盘上的“W,A,S,D”来控制游戏物体的前后左右移动。

if (Input.GetKey(KeyCode.W))
{m_Transform.Translate(Vector3.forward * 0.5f, Space.World);
}
if (Input.GetKey(KeyCode.S))
{m_Transform.Translate(Vector3.back * 0.5f, Space.World);
}
if (Input.GetKey(KeyCode.A))
{m_Transform.Translate(Vector3.left * 0.5f, Space.World);
}
if (Input.GetKey(KeyCode.D))
{m_Transform.Translate(Vector3.right * 0.5f, Space.World);
}

11. 物理组件之刚体

11.1 变换组件的运动特点

使用Transform变量.Translate();方法移动物体的位置,特点如下:
①移动的物体若没有刚体组件,则会 直接“穿透” 场景中其他的物体模型;
②移动的物体若没有刚体组件,则物体不会受重力影响(到达场景边缘外,不会下落)。
③移动的物体若刚体组件,则物体会受重力影响,会发生不规则运动和碰撞, 也会直接“穿透” 场景中其他的物体模型。

Translate则是直接的位置position赋值会破坏刚体环境

刚体方法会模拟物理状态来达到一些接近于现实世界的物理效果。

11.2.刚体组件简介

  1. 刚体简介
    刚体:Rigidbody,属于物理类组件。
    作用: 添加了刚体组件的游戏物体,就有了重力,就会做自由落体运动。也就意味着可以像现实中的物体一样运动。

  2. 给物体添加刚体组件
    先选中游戏物体–>菜单Component–>Physics–>Rigidbody

  3. 刚体组件属性
    Inspector 面板中

属性 详情
Mass[质量] 设置物体的质量,也就是重量。质量单位是KG。
Drag[阻力] 空气阻力,0 表示无阻力,值很大时物体会停止运动。
Angular Drag[角阻力] 受到扭曲力时的空气阻力,0 表示无阻力,值很大时物体会停止运动。
Use Gravity[使用重力] 是否使用重力。

角阻力测试方法:
将两个物体放置在空中,并且设置刚体,然后下方物体设置空气阻力为5,让其下降慢些。然后分两次设置角阻力为 0 和 10。会发现角阻力越大,碰撞后的物体旋转的速度越来越慢。

11.4 使用刚体移动物体

  1. 相关方法
    Rigidbody变量.MovePosition( Transform变量.position + Vector3.方向);:使用刚体方法移动物体的位置。MovePosition直接改的是位置。所以速度过快还是会发生穿模。

注意: 该变量要先被赋值
Rigidbody变量 = gameObject.GetComponent<Rigidbody>();

其次
使用刚体移动物体,物体是只能根据世界坐标系的方向移动的。
使用刚体移动物体,物体会触发物理相关的事件

  1. 参数
    MovePosition 中的 Vector3 要使用“当前位置”+ 方向的方式。
    所以要先用Transform变量 = gameObject.GetComponent<Transform>();获取并储存组件信息,再使用Transform变量.position——属性当前物体的位置。

其中MovePosition()方法也可以用 Translate() 方法改变运动速度的格式来改变速度——*几倍,其中 几倍 也不能为 double 。

  1. 特点
    使用Rigidbody变量.MovePosition( Transform变量.position + Vector3.方向);移动物体,特点如下:
    ①速度慢时会与场景中的物体发生碰撞。速度太快时,会直接穿透物体。
    MovePosition直接改的是位置。 所以还是会发生穿模现象。
    ③会模拟物理状态来达到一些接近于现实世界的物理效果。
    ④物体是只能根据 世界坐标系 的方向移动的。
    ⑤刚体要配合碰撞器使用

移动方式最好用加力的方式

12. 物理组件之碰撞体

12.1 碰撞体简介

  1. 碰撞体
    “碰撞体”组件,也就是 Collider
    两个物体之间的碰撞,其实是两个物体的自身的“碰撞体”组件的碰撞。
    模型只要加了刚体,就必须要加碰撞体,否则没有意义。

碰撞体可以理解为我们的模型的“外骨骼”,是由一条条绿线构成的碰撞框。在 Inspector 面板取消 Mesh Renderer 组件后,展开 XXX Collider 组件,即可看到绿线构成的碰撞框

  1. 各种情况

  2. 给物体添加碰撞体组件
    选中游戏物体–>菜单Component–>Physics–>Xxxx Collider

(我们在Unity 中创建的基本模型,比如Cude、Sphere等,都自带碰撞体组件)

12.2 Box Collider

  1. 简介
    盒子碰撞体,形状是立方体形,用于包裹类似“立方体”的模型,比如:盒子,
    箱子,门,房子等。

  2. 组件属性

属性 作用
Center[中心点] 设置Box Collider 的中心点
Size[大小] 设置Box Collider 的大小

12.3 Sphere Collider

  1. 简介
    球形碰撞体,形状是球形,用于包裹类似“球形”的模型。

  2. 组件属性

属性 作用
Radius[半径] 设置Sphere Collider 的大小

12.4 Capsule Collider

  1. 简介
    胶囊碰撞体,形状是胶囊状,用于包裹“胶囊形”的模型。

  2. 组件属性

属性 作用
Radius [半径] 设置Capsule Collider 的半径
Height [高度] 设置Capsule Collider 的高度
Direction [方向] 设置Capsule Collider 的高度方向(Self的轴向):x、y、z

Direction[方向],以自身坐标系为轴, 演示如下:

12.5 Mesh Collider

  1. 简介
    网格碰撞体,用于包裹复杂结构的模型。

  2. 组件属性

属性 作用
Mesh[网格] 根据指定的网格,生成碰撞体

13. 刚体常用方法介绍

13.1 AddForce()

  1. 作用
    刚体 添加一个力,让刚体按 “世界坐标系” 进行运动。

  2. 代码

Rigidbody变量.AddForce(Vector3.方向,ForceMode.模式);

Vector3:力的方向和大小,也可以通过 * 几倍改变力的大小;
ForceMode:力的模式[enum 类型]

  1. ForceMode 参数
    类型为枚举类型,以什么样的方式添加力给刚体。

枚举值说明:

枚举值 说明
Acceleration (加速度)
Force:(力) 这种模式通常用于设置真实的物理
Impulse:(冲击力) 这种模式通常用于瞬间发生的力
VelocityChange (速度的变化)

13.2 AddRelativeForce()

  1. 作用
    刚体添加一个力,让刚体按 “自身坐标系” 进行运动。

  2. 代码

Rigidbody变量.AddRelativeForce(Vector3.方向,ForceMode.模式);

Vector3:力的方向和大小,也可以通过 * 几倍改变力的大小;
ForceMode:力的模式[enum 类型]。

  1. AddRelativeForce()实例演示
    编写下面这个脚本给一个Sphere 物体,运行并切换Scene 视图选中该物体,观察它的坐标系。
void Update()
{m_Rigdbody.AddRelativeForce(Vector3.forward , ForceMode.Force);
}




因为物体是滚动前进的,所以自身坐标系会不断变化,使它来回滚动,由于力很小只有一倍,所以到最后几乎停止。(注意看蓝色的轴向最后垂直指向地板)

13.3 FixedUpdate()固定更新方法。

  1. 所有和物理相关的操作 ,代码都要写在 FixedUpdate() 方法体内。
    固定默认的更新时间间隔是0.02 秒,1 秒执行50 次。
    可以在 Fixed Timestep 中 修改, 步骤如下:
    Edit–>Project Settings–>Time 面板中的Fixed Timestep 参数设置。

  2. Update() 方法是每帧执行一次。
    画面每渲染完一次,就是一帧,而每帧的时间是不固定的,因为画面渲染的速度是不固定的。
    若在 Update() 方法中执行物理操作,会出现卡顿的情况。

14. 刚体碰撞事件监测与处理

14.1 碰撞事件简介

  1. 何为碰撞事件?
    当一个用刚体控制的物体与另外一个物体碰撞时,就会触发碰撞事件。
    注:目标物体必须带有Collider 组件。
    碰撞 Collision

14.2 碰撞事件监测方法

方法 作用和调用次数
OnCollisionEnter(Collision 变量) 当碰撞开始时调用,只会调用该方法一次
OnCollisionExit(Collision 变量) 当碰撞结束时调用,只会调用该方法一次
OnCollisionStay(Collision 变量) 当碰撞进行中时,会持续调用该方法

Collision 类
作用: 用于传递 碰撞 信息。

Collision变量.gameObject 属性,对当前物体 所碰撞到的物体 的引用。
Collision变量.gameObject .name 属性,当前物体 所碰撞到的物体 的名字。

注意:

①这三个方法的级别与Start()、Update()和FixedUpdate()级别一样。
②且使用时,返回值也为空(void)。
③这三个方法都需要 一个类型为Collision 的参数
OnCollisionStay() :仅当其中一个Collider 还附加了非运动刚体时,才发送碰撞事件。碰撞停留事件不会发送给睡眠中的刚体。

15. 刚体触发事件监测与处理

15.1 触发事件简介

  1. 触发器
    选中某一物体后,将 Inspector 面板 里Collider 组件属性面板的 “Is Trigger” 选项选中,该物体的碰撞体就变成了触发器。
    移动的刚体物体会 穿透 碰撞体勾选了“Is Trigger”的物体。

  2. 触发事件
    当一个用刚体控制的物体进入到另外一个物体的触发器范围内,就是触发事件
    触发用途: 不与目标物体发生直接的碰撞(接触),而是只要进入目标物体的“触发范围”就能执行某些特定操作。

15.2 触发事件监测方法

方法 作用和调用
OnTriggerEnter(Collider 变量) 当进入触发范围时开始时调用,只会调用该方法一次。
OnTriggerExit(Collider 变量) 当离开触发范围时开始调用,只会调用该方法一次。
OnTriggerStay(Collider 变量) 在触发范围内,会持续调用该方法。

Collider 参数
作用: 用于传递 触发 信息。

Collider变量.gameObject 属性,进入触发范围内的目标物体的引用。
Collider变量.gameObject.name 属性,当前物体的名字。

注意:

①这三个方法的级别与Start()、Update()和FixedUpdate()级别一样。
②且使用时,返回值也为空(void)。
③这三个方法都需要 一个类型为Collider 的参数

16. 网格组件之网格过滤器和渲染器

16.1 网格过滤器组件

  1. 简介
    网格过滤器:Mesh Filter。
    该组件只有一个“Mesh”属性,用于设置当前游戏物体使用哪个模型进行展示。
    Mesh:网格,也就是模型。

16.2 网格渲染器组件

  1. 简介
    网格渲染器:Mesh Renderer。
    该组件用于“渲染”显示模型。如果没有该组件,模型就不会显示。
  2. 主要属性
属性 选项与效果
Cast Shadows [投射阴影] On:开启自身阴影显示 ;Off:关闭自身阴影显示 ;Two sided:以允许表面的两面都投射阴影(此时,背面剔除被忽略);Shadows Only :只产生阴影,而游戏对象不可见。
Receive Shadows [接收阴影] 选中就是接收别的物体照射到该物体身上的阴影,不选中就是不接收
Materials [材质球] 用于设置用哪个材质球渲染当前的模型(Mesh)

其中关于Two sided 选项的详细讲解转载自 百度网友654老四的回答
这个是针对半封闭的凹凸物体,比如茶杯,普通的光照渲染,都沿表面法线向里投射阴影。如果你选择two sided模式,同时会沿着法线的反向向内部投射阴影。

注:我们拖拽到游戏物体身上的材质球,其实就是赋予给了这个组件的Materials [材质球]属性上。

17. 开关门实现 与 查找游戏物体并使用其脚本

17.1 模型旋转实现开门效果

  1. 模型中心点
    模型身上的坐标轴的中心点,也就是模型的中心点
    模型的的位置,旋转,缩放都是相对于模型的中心点来进行变化的。

  2. 改变物体中心点
    ①创建一个物体,一般都是空物体
    ②以该物体为父物体,创建父子关系,通过父物体来控制子物体。

此时父物体的中心点就是整个模型的中心点。 也就是说空物体间接的改变了物体的中心点。

  1. 中心点工具
    Center: 当选中两个模型的时候,设置为“Center”,模型组的中心点就在两个模型的中间中心位置。
    Pivot: 当选中两个模型的时候,设置为“Pivot”,模型组的中心点就在后选
    中的模型的中心点位置。

但是有特殊情况如下,已验证:

注意:若这两个模型是父子关系,则 Pivot 显示的是父物体的中心点,同时这也是 其它子物体和整个父子物体的中心点。此时切换 Center 是不会改变该父子关系内任何物体的中心点。
因为父子物体可以看成是一个物体,而一个物体的中心点只有一个。



4. 使用键盘按键实现开关门
使用 Transform变量.Rotate(Vector3.方向,Float); 旋转模型。

注意:这只是 Rotate() 六个重载中的一个

相关参数:
Vector3:沿某个轴向旋转
Float:旋转的度数,同样不允许double,因为无法隐式转换

17.2.触发器实现开关门

  1. 添加触发器
    ① 创建一个空物体,添加 “Box Collider” 组件,并设置大小和中心点;
    ② 将“Box Collider”勾选“Is Trigger”变成触发器;

  2. 代码实现触发器开关门

方法 作用
OnTriggerEnter(Collider 变量) 进入触发器时候执行,且只执行一次
OnTriggerExit(Collider 变量) 退出触发器时候执行,且只执行一次

注意:

①这两个方法的级别与Start()、Update()和FixedUpdate()级别一样。
②且使用时,返回值也为空(void)。
③这三个方法都需要 一个类型为Collider 的参数

  1. 查找游戏物体
方法 作用
GameObject.Find(string变量或常量) 通过名字查找游戏物体(gameObject)

string 该场景中要寻找的游戏物体的名字

然后就可以通过这样的方式找到gameObject身上的脚本

脚本名 变量A;//定义一个脚本名为class的变量用于储存查找到的gameObject
变量A = GameObject.Find (string变量或常量).GetComponent<脚本> ();

18. Tag 标签

18.1 通过Tag 标签查找物体

  1. Tag 简介
    Tag 标签——标签可以起到标识,区分的作用。
    同一类的模型,我们可以根据需要给他们设置成统一的标签。

  2. 给模型添加Tag 标签
    选中一个模型,在模型的Inspector 面板上的顶部位置,设置Tag 选项为一个
    具体的标签。
    如果说引擎提供的标签没有自己想要的标签,可以自己手动添加新标签,或者使用shift 和ctrl 多选添加。

  3. 通过Tag 标签查找N 个物体

GameObject.FindGameObjectsWithTag(string变量或常量);
//该方法也为[静态方法]

通过特定的标签,查找到所有“贴有”该标签的游戏物体,返回一个GameObject 数组
string:标签名

还有一个FindGameObjectWithTag方法,区别是没有s。

  1. for 循环输出模型信息
    通过for 循环遍历FindGameObjectsWithTag() 方法返回的数组,输出
    游戏物体的信息。

18.2 触发器实现

  1. 创建触发器
    在桌椅的范围内,创建一个空物体,然后添加Box Collider,并调整大小。
    最后勾选“Is Trigger”属性。

  2. 使用触发器实现
    OnTriggerEnter()
    OnTriggerExit()

19. PC 端游戏打包与发布

19.1 游戏打包发布简介

  1. 简介
    现在的项目文件必须在Unity 引擎中才能运行,通过“打包发布”可以将工程
    文件转换成独立的“游戏文件”,就可以脱离Unity 引擎直接在电脑上运行。
    打包好的“游戏文件”就可以到处发布传播了。
  2. Unity 发布游戏
    Unity 的最大的一个特点就是“跨平台运行”,一处开发多处运行。
    常用的发布平台:Windows,Android,IOS,Mac,Web…
    我们现在演示打包发布Windows 版本的游戏。

19.2 Unity 发布PC版游戏

  1. Build Settings[生成设置]
    File–>Build Settings 弹出项目生成设置面板。
    ① 选择要发布到的平台;
    ② 添加要发布的场景;
  2. Player Settings[详细设置]
    Company Name:公司名称
    Product Name:产品名称(游戏名称)
    Default Icon:默认图标
  3. 成品文件介绍
    一个exe 可执行文件,一个Data 数据文件夹,两个缺一不可以,且不可分割。

Unity3D 2018 3.0新手入门相关推荐

  1. Unity3D初级课程之新手入门

    参考链接:<Unity3D初级课程之新手入门> 文章目录 第一课:课程介绍与Unity3D环境搭建 第二课:游戏场景基本操作 第三课:游戏场景制作3D模型 第四课:3D模型美化之材质球 第 ...

  2. Vue2.0 新手入门 — 从环境搭建到发布

    什么是 Vue.js? Vue.js 是用于构建交互式的 Web 界面的库. Vue.js 提供了 MVVM 数据绑定和一个可组合的组件系统,具有简单.灵活的 API. 本章节是关于 Vue1.x 版 ...

  3. Scratch3.0新手入门教程

    Scratch是由MIT(麻省理工学院)米切尔·瑞斯尼克(Mitch Resnick)教授带领的"终身幼儿园团队"(Lifelong Kindergarten Group)开发的一 ...

  4. 【LayaAir2.0】LayaAir2.0新手入门指南(目录)

    第一章  全部课程介绍 1.1 大纲简介 1.2.课程目标 1.2.1  了解产业机会与Layabox的产品 1.2.2  认识LayaAir引擎的结构 1.2.3  真正掌握IDE的使用 场景 UI ...

  5. 新手入门指导:Vue 2.0 的建议学习顺序

    起步 1. 扎实的 JavaScript / HTML / CSS 基本功.这是前置条件. 2. 通读官方教程 (guide) 的基础篇.不要用任何构建工具,就只用最简单的 <script> ...

  6. 新手入门教程,从0开始入手APIcloud(二)

    前面一篇主要讲了项目的创建和布局方式.总结一下APP的布局方式最佳为win+frame,多写个文件多弄点优化才能让你的APP流畅度提高. 这篇主要来讲一下模块的引入.服务器数据对接及APP数据存储方式 ...

  7. 新手入门百度地图开发的(0,0)坐标问题

    对于大部分人来讲,由于百度地图资料众多,过度依赖搜索引擎等等原因.新接触百度地图开发工作其实并不容易.今天说说关于坐标(0,0)的问题. 首先仍然介绍坐标系,我们先不管采用的和wgs84还是gcj02 ...

  8. python输入年月日输出年月日_新手学习必看的0基础入门Python与python的输入输出...

    我平常使用的编程语言主要是Fortran和Python,用于做数值计算,两种语言各具优势,Fortran更快,Python写起来更方便,更适合阅读,而且可以直接对数据进行可视化处理.但是有时候输出数据 ...

  9. 新手入门机器学习十大算法

    新手入门机器学习十大算法 2018年9月17日 磐石 TensorFlowNews, 机器学习 0 在机器学习的世界中,有一种被称为"无免费午餐"的定理. 它意在说明没有哪种算法能 ...

最新文章

  1. 完美脱壳组装PE的一般步骤(Obsidium1.3.6.4 DEMO 主程序)
  2. sdut-1148 相加和最大值
  3. Hibernate -- Dao层 -- CURD -- 随记
  4. C语言实用算法系列之strtok字符串分割、strcat字符串拼接、strcpy、strcmp
  5. 如何制定客户留存策略_商客通:办理石家庄400电话如何留存客户
  6. 线性回归实现——梯度下降
  7. vue 原型设计 拖拽_设计即开发,如何打通软件研发的“任督二脉”?
  8. apache-ab并发负载压力测试(转)
  9. web 折线图大数据量拉取展示方案_对比多种微前端方案
  10. ipad mini2 进入DFU模式
  11. Matlab中的Smith 预估器
  12. 软件使用小技巧-Linux疑难杂症
  13. JAVA程序计算圆的周长面积
  14. 计算机网络——各种时延的计算
  15. 华为手表GT2 模拟加密门禁卡
  16. 机器学习实现简单人脸识别
  17. 【100个 Unity踩坑小知识点】| Unity 的 LOD技术(多细节层次)
  18. 永磁同步电机凸极和隐极之间的区别
  19. redis高并发处理由浅入深(备java基础,javaee课程)-任亮-专题视频课程
  20. STM32CubeMX实现串口中断通信

热门文章

  1. 跨境电商APP如何高效测品提升GMV?真金白银经验总结告诉你
  2. [OS-Linux] CentOS 7.x 系统安装以及常用配置
  3. ESLint+Prettier+Vetur 统一Vue项目代码风格
  4. Android-打开系统相机并拍照两种显示方式。
  5. BT、VeryCD倒下了,但是后继有种
  6. c++语言中break的作用,c++ 中break的用法介绍
  7. 如何做好一个项目经理
  8. 关于网络文学发展形势的三点判断
  9. MySQL8.0Clone插件
  10. Python socket和前端html