Unity 基本操作与组件

一、Unity 基本操作

1. Unity 界面详解
  • Hierachy:层级面板,游戏场景中的资源,比如UI、模型;

  • Scene:场景面板,用于管理游戏场景中的各种游戏物体;

  • Game:游戏场景面板,实际的玩家视角;

  • Project:项目面板,用于管理项目中的所有资源;

  • Inspector:检查面板,可以理解为属性窗口,查看 Hierachy 或 Project 中资源的属性。

2. Unity 游戏场景

游戏场景概念:

​ 一个游戏可以有多个场景,游戏场景是由游戏对象组成的,一个场景就相当于是一个独立的世界,我们可以简单的把游戏场景理解成是游戏对象的一个容器。

​ 创建项目时会默认创建一个 SampeScene 场景文件,Unity 中场景是以文件形式存在的

游戏场景漫游:

​ 由于Game面板是玩家视角,不方便观察,所以我们会在Scene面板中使用上帝视角来开发游戏。

​ 首先,可以点击Scene面板中任意地方,达到选中Scene面板的目的。

鼠标右键(按住):拖动鼠标旋转视角,WASD场景漫游;

鼠标中键:拖动鼠标平移视角

ALT键(按住)再按住鼠标右键,拖动前后缩放。

二、Unity 常用组件

1. 组件介绍

组件概念:

对于现实中的电脑来说,电脑里面的硬盘、内存条都是电脑的组件,其共同特点在于 可替换性

游戏组件:

Unity 的设计思想是基于组件,角色可以移动、角色可以播放动画、UI可以点击等等,一切都是基于组件。

Unity 中包含大量的系统,比如UI系统,UI系统中有按钮、图片、下拉框,这些功能都是不同的组件,这些组件组合在一起就是 UI系统。

2. Unity 内置简易模型和材质

模型介绍:

模型是一种美术资源,3D游戏中,场景、角色、武器等立体的元素一般都是模型。学习阶段我们可以使用Unity内置的简易模型来学习引擎操作。

添加模型步骤:在层级面板中 右键点击 --> 3DObject --> 各种模型

材质介绍:

模型本身是由“顶点组成的网格数据”,本身并不存在颜色。

材质决定了模型的实际外观,由于我们使用的是Unity内置模型,和模型一样,材质也是一种资源。

3. Scene 界面游戏物体操作

工具栏:

  • 手性工具,快捷键Q,用来拖动场景;
  • 移动工具,快捷键W,用来移动模型位置;
  • 旋转工具,快捷键E,用来旋转模型;
  • 缩放工具,快捷键R,用来放大缩小模型;
  • 移动&缩放工具,快捷键Y,可以同时移动、旋转模型。

以上都是在改变游戏物体的Transform组件中的各项数值。

约束与吸附

  • 变化约束:移动、缩放、旋转时按住Ctrl可以约束移动距离、缩放程度、旋转程度等,具体的约束程度可以在 Edit --> Grid And Snap 中可以设置。
  • 模型吸附:选择模型后按V,选择吸附位置再拖拽到需要吸附的位置上。

复制模型:Ctrl + c,粘贴模型:Ctrl + v,快速复制:Ctrl + D,快速定位:F.

4. 自定义组件

为什么要自定义组件?

​ Unity中提供的组件,都是单一功能。本身并没有复杂的业务逻辑,比如 Transform 组件确实可以位移角色,但是什么时候位移要由我们来决定。

​ 一般情况下,我们写的组件大多与游戏逻辑有关,比如玩家控制脚本。

创建组件:

​ Unity 的设计思想是基于组件,所有我们的代码本质上也是一个组件,比如我们写一个功能让角色可以移动,那这个C#文件也是一个组件,可以挂载到游戏物体上,挂载后就可以生效。

​ 创建组件步骤:项目面板中 右键点击 -> 创建 -> C#脚本,将脚本拖拽到游戏物体上即可。

组件特点:

​ 我们在Unity中创建的脚本,不一定非要是组件,那么怎么样确定一个脚本是组件?

  1. 继承了MonoBehaviour的类的都是组件;
  2. Unity 中创建脚本默认就是继承了MonoBehaviour;
  3. 只有组件才可以挂载到游戏物体身上

组件的学习方法:

主要从两个方面进行学习

  1. Inspector 面板,组件在 Inspector 面板中一般都会有一些属性可以设置,那我们需要研究的是这些属性的设置对于游戏物体有什么影响;
  2. C# 脚本,部分 Inspector 面板中的属性,我们因功能需求需要使用脚本来控制其发生变化。

5. Transform 组件

Transform组件介绍:

Transform组件的三个主要数值

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

Transform其实还包含了游戏物体在层级面板中的层级信息,后续会具体在代码中使用到。

transform.position表示 当前位置

transform.rotation表示 当前旋转

transform.localScale表示 当前缩放

如何修改 transform 中的值: transform.position = new Vector3(1, 1, 1);

Transform 组件常用属性和方法:

属性:

  1. childCount:子物体数量;
  2. parent:父物体的 Transform组件;
  3. root:最高级别父物体;
  4. position、eulerAngles(代表旋转修改值,不能直接使用rotation)、localScale.

方法:

  1. Find (string) :查找子物体;
  2. Translate (Vector3) :朝着一个坐标移动;
  3. Rotate (Vector3) :旋转一个角度;
  4. LookAt (Transform) :看向目标。

Transform组件的特殊性:

​ 在自定义的组件中,我们可以直接 使用变量transform来访问到当前游戏物体身上的Transform组件

6. GameObject

GameObject是什么?

​ GameObject 就是游戏对象或者说游戏物体,层级面板中可以选择的都是GameObject。

​ 同时,GameObject在代码中也是一个类型,这个类型代表着游戏物体。在C#中可以通过公开字段,在Inspector面板中设置该字段的值。

组件中可以使用来自基类继承的 gameObject 属性,直接访问脚本所在的游戏物体,类似 transform.

gameObject:直接获取当前组件所在的游戏物体;

transform:组件所在游戏物体的transform组件。

GameObject 常用属性和方法

属性:

  1. name:游戏物体名称,和层级面板中等同;
  2. tag:游戏物体的标签;
  3. activeInHierarchy:是否为 显示状态;
  4. transform:这个游戏物体的变换组件;
  5. static GameObject Find (string path) :一个静态方法,查找游戏物体。

方法:

  1. GetComponent<T> ():获取游戏物体身上的组件,T代表要查找的类型,类似的方法有很多;
  2. SetActive(bool) :修改显示状态。

7. 预制体 Prefab

预制体的概念:预先制作好的游戏物体。

预制体的创建:

​ 直接将游戏物体拖拽至 项目面板 中,Unity会自动为我们生成一个预制体。

预制体的使用:

​ 将预制体从项目面板中拖拽至层级面板中来达到复用的效果。

  • 基于预制体创建的游戏物体比较接近 “引用关系” ,我们修改预制体会直接导致场景中的游戏物体发生变化。
  • 预制体被删除,不会影响游戏中的游戏物体,但是游戏物体会在层级面板中变成红色,意味着预制体被删除了,我们可以在层级面板中右键取消这种引用关系,让这个游戏物体变成普通游戏物体。
  • 预制体的修改具备特殊性,需要双击进入“异世界”进行编辑。

预制体的修改:

​ 预制体可以嵌套,即预制体套预制体。预制体修改无法撤销。

变体:

​ 创建预制体的过程中,如果游戏物体已经是预制体,Unity会弹窗提醒我们选择创建模式,即:

  1. 原始预制体:一个完全独立的预制体;
  2. 预制体变体:旧的预制体变化,变体也会发生变化,但是变体保留和旧预制体不同的部分。

(从一个预制体中创建一个原始预制体,原始预制体改变,两个预制体都改变;而从该预制体中创建预制体变体,变体改变,该预制体不变,该预制体改变,变体却会改变)

8. Unity 生命周期函数

概念:在unity中指一个组件从激活到销毁的整个过程。

常用生命周期函数:

Awake():唤醒事件,一开始就执行,只执行一次

OnEnable():启用事件,每次启用都执行一次。每当脚本组件被启用的时候就执行一次

Start():开始事件,执行一次

FixedUpdate()固定更新事件,执行N次,0.02秒执行一次。所有物理相关的更新都在这个事件中处理。

Update():更新事件,执行N次,每帧执行一次,会受到帧率的影响。

LateUpdate()稍后更新事件,执行N次,在Update () 事件执行完毕后再执行

OnDisable():禁用事件,每次禁用都执行一次。在OnDestroy () 事件也会执行。

OnDestory():销毁事件,执行一次。当组件被销毁时执行。

(上述生命周期函数顺序即为 Unity 生命周期顺序)

9. Invoke 函数

Invoke( ) 函数:用于在特定时间间隔内调用、执行特定方法

Invoke函数常用执行方法

// 输入一个方法名称,过几秒来执行一次
Invoke(string methodName, float time){}// 重复调用
InvokeRepeating(string methodName, float time, float repeatRate){}// 取消调用,使用无参重载就是取消全部调用
CancelInvoke(string methodName){}/*methodName:表示方法名称;time:表示几秒后执行;repeatRate:表示重复间隔时间。
*/

10. 协程

协程的概念:

协程即 “协同程序” ,并不等同于多线程。协程的本质是迭代器

Unity 中,协程就是一个能暂停协程执行,暂停后立即返回主函数,执行主函数剩余部分,直到中断指令完成后,从中断指令的下一行继续执行协程剩余的函数。

函数体全部执行完成,协程结束。由于中断指令的出现,使得可以将一个函数分割到多个帧里去执行。

协程的使用场景:

  1. 延时调用某个函数;
  2. 某块逻辑要一直循环判断执行。

为什么需要协程?

主程序已经在执行某个任务,希望”同时运行“其他逻辑,这里的同时,并不是多线程意义上的同时,只是感官上同时。

如何定义协程函数:

public IEnumerator Demo()  // 协程特定返回值IEnumerator
{Debug.Log("具体操作1");yield return new WaitForSeconds(1.0f);  // 等待一秒Debug.Log("具体操作2");// 协程不会因为前面返回则不执行后面的代码
}public void Start()
{// 调用协程函数的两种方式StartCoroutine(Demo());StartCoroutine("Demo");
}

停止协程函数:

协程如果运行到最后一行,意味着停止,但是如果我们想主动停止,则使用下面的方法。

 // 结束全部协程
StopAllCoroutines();
// 结束某个协程用 StopCoroutine
// 和调用协程一样使用,但是如果协程有参数不要使用这个
StopCoroutine(IEnumerator routine);
// 参数填写协程变量
Coroutine routine = StartCoroutin(Demo());
StopCoroutine(Coroutine routine);
// 参数填写协程方法名
StopCoroutine(string methodName);

11. 常用工具类

数学工具类
  1. Mathf.Abs(int num):返回绝对值

  2. Mathf.Max(int a, int b):返回更大的值(不限制数量)

  3. Mathf.Min(int a, int b):返回最小的值

  4. Mathf.Round(2.5f)返回四舍五入的值(四舍六入,五取偶数)

  5. Mathf.Ceil(2.5f):返回向上取整的值;

  6. Mathf.Floor(2.5f):返回向下取整的值;

  7. Random.Range(0, 5):返回范围内随机值

    (1)如果是 int 重载:返回0-4的随机值,包含0、不包含5;

    (2)如果是 float 重载:返回0-5的随机值,包含0并包含5。

时间工具类

只读

  • Time.time:表示从游戏运行到现在的时间,会随着游戏的暂停而停止计算;
  • Time.deltaTime:表示从上一帧到当前帧单独时间,以秒为单位;
  • Time.realtimeSinceStartup:表示自游戏开始后的总时间,即使暂停也会增加,也就是现实时间

读写

  • Time.timeScale时间缩放,默认值为 1,若设置 < 1,表示时间减慢,若设置 > 1,表示时间加快,0 意味着游戏暂停。

Unity基础笔记(1)—— Unity基本操作与基本组件介绍相关推荐

  1. 【Unity学习笔记】[Unity中文课堂教程] C#中级编程代码

    [Unity学习笔记][Unity中文课堂教程] C#中级编程代码 最近想补一补C#基础,Unity官方的C#中级编程教程质量很高,于是开个帖子把跟着敲+记录了部分价讲解和我自己的理解的代码存在这 原 ...

  2. Unity学习笔记:Unity 3D 飞机大战

    Unity学习笔记:Unity 3D 飞机大战 1.打开unity软件后,首先新建Quad作为背景,导入飞机模型,并为其添加刚体 然后创建C#脚本,挂载到飞机上. 2.给飞机创建子弹,让子弹成为预制体 ...

  3. Unity基础笔记(5)—— Unity渲染基础与动画系统

    Unity渲染基础与动画系统 Unity渲染基础 一.摄像机 1. 摄像机概念 和现实中的摄像机很接近,Unity 中 Camera 组件负责将游戏画面拍摄然后投放到画面上 Camera 拍摄到的画面 ...

  4. Unity基础笔记(3)—— Unity UI系统

    Unity UI系统 一.UI系统介绍 1. Unity2D 和 UI的区别 Unity2D:主要基于 SpriteRenderer 和 2D物理系统等组成. UI:由 Canvas 以及 各种 UI ...

  5. Unity学习笔记:unity介绍(一)

    一.Unity是什么? 1.Unity发音[ˈjuːnəti] 2.俗称有U3D,Unity3D.unity 3.Unity开发商是美国的Unity公司,成立于2004年,位于美国旧金山. 4.uni ...

  6. Scrapy基础 第三节:Scrapy框架结构和组件介绍

    前置知识: 掌握Python的基础知识 对爬虫基础有一定了解 说明: 运行环境 Win10,Python3 64位 目录: 第一节:Scrapy介绍和安装配置 第二节:Scrapy版的Hello Wo ...

  7. Unity基础笔记(2)—— Unity2D及输入系统

    Unity2D及输入系统 Unity2D 部分 一.Unity 2D 介绍 1. 游戏中 2D.3D 以及 UI 的概念 先笼统地将整个游戏分为两部分:UI 和游戏内容. UI :即 User Int ...

  8. Unity基础笔记(6)—— Unity导航系统

    Unity导航系统 一.NavMeshAgent组件 1. 导航系统介绍 首先看两个导航系统的应用: 网络游戏中的自动寻路功能,点击地图上的某个位置,角色自动跑到这个位置 RTS 和 Moba 类游戏 ...

  9. Unity学习笔记——Unity基础一:unity界面、场景、游戏物体、组件等基本概念

    一.unity界面 如下图,unity最主要的界面为Scene(场景视图).Hierarchy(层级视图).project(工程视图).Inspector(检视视图) project--工程视图 当前 ...

最新文章

  1. 【机器学习】基于概率论的分类方法和Logistic回归
  2. Python中的sort()方法使用基础
  3. 换晶振导致stm32串口数据飞码的解决办法(补充)
  4. android集成测试工具,android – 集成测试和Cucumber测试
  5. n阶幻方c语言编程,求单偶阶与双偶阶幻方编程思想及其算法!
  6. linux查看系统内存和使用量,LINUX 查看当前系统的内存使用情况
  7. 国产数据库年终大盘点!
  8. HTML5与CSS3权威指南.pdf7
  9. python卸载_手把手教Python环境安装
  10. php如何把图片铺满,PHP如何裁剪图片成固定大小
  11. 0-1背包问题、贪心算法、动态规划
  12. 【转】纯干货:PS高手完全自学宝典(原创文章)
  13. 电脑壁纸尺寸比例_怎么设置桌面壁纸尺寸比例
  14. 总结获得【酷我音乐】歌曲URL地址
  15. 浏览器显示域名解析错误怎么办
  16. linux学习-解决“sshd: no hostkeys available -- exiting”
  17. rosbag录制话题、播放话题多种模式
  18. Linux服务器使用Less查看日志文件
  19. C语言:用贪心策略计算活动安排问题的最优解
  20. Proteus仿真报错——No power supply specified for net VDDA/VSSA in Power Rail Configuration

热门文章

  1. excel实现套用模板批量打印_标签打印软件如何导入excel表批量制作光缆标牌
  2. buuctf 黑客帝国 解析
  3. element table表格合并行和列
  4. 控制单元(也就是控制器)
  5. 如何给自己的公众号引流的八种方法《知乎篇》
  6. element-ui table组件化,重新封装
  7. ApacheCN 活动汇总 2019.2
  8. 元宇宙与我们有哪些联系
  9. 怎么删除win11系统休眠文件?
  10. 【小程序外链】实现桌面图标、短信和邮件以及第三方APP外链跳转到小程序