Unity基础笔记—— Unity基本操作与基本组件介绍

Posted Dukenone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity基础笔记—— Unity基本操作与基本组件介绍相关的知识,希望对你有一定的参考价值。

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 意味着游戏暂停。

UnityUnity学习笔记目录整理

概述及周边

【Unity】Unity 基本介绍
【Unity】Unity 相关知识分类
【Unity】Unity 特殊文件夹【未完成】
【Unity】Unity 常用插件

基础知识

【Unity】Unity 跨平台及编译过程【精】
【Unity】Unity 进程、线程、协程【精*】
【Unity】渲染管线基础【精】

C#基础

【Unity】Unity C#基础(一)C#发展史
【Unity】Unity C#基础(二)类型转换、拆装箱
【Unity】Unity C#基础(三)封装、修饰符、方法、参数、扩展方法
【Unity】Unity C#基础(四)命名空间
【Unity】Unity C#基础(五)数据类型:值类型、引用类型、指针类型
【Unity】Unity C#基础(六)运算符、运算符重载
【Unity】Unity C#基础(七)枚举、索引器、结构体
【Unity】Unity C#基础(八)类、构造器、静态构造器、对象初始化器、析构函数、静态成员、常用类
【Unity】Unity C#基础(九)继承、多态、抽象类、接口、抽象方法、虚方法、重写、覆盖
【Unity】Unity C#基础(十)委托、匿名方法、事件
【Unity】Unity C#基础(十一)预处理指令
【Unity】Unity C#基础(十二)特性Attribute、反射Reflection
【Unity】Unity C#基础(十三)泛型(Generic)
【Unity】Unity C#基础(十四)注释

Unity脚本开发

【Unity】Unity 生命周期【精】
【Unity】Unity 如何查看源码
【Unity】Inspector中脚本中文乱码问题
【Unity】Unity 代码模版
【Unity】Unity 面向对象原则及类与类的关系【精】

Unity常用类

【Unity】Unity常用类:向量Vector3、四元数Quaternion

内存管理与优化

【Unity】Unity内存管理与优化(一)内存域、堆栈、垃圾回收、内存泄漏、内存碎片【精*】
【Unity】Unity内存管理与优化(二)方法表、重写、隐藏、静/动态绑定、同步块索引【精*】
【Unity】Unity内存管理与优化(三)【未完成】

进阶篇:代码优化及开发规范(干货大全)

【Unity】Unity开发进阶(一)减少跨桥(上下文切换)【未完成】
【Unity】Unity开发进阶(二)自定义Update【未完成】
【Unity】Unity开发进阶(三)对象排序工具、减少使用foreach
【Unity】Unity开发进阶(四)Unity脚本单例工具(必备工具)
【Unity】Unity开发进阶(五)ArrayHelper数组帮助类【荐】
【Unity】Unity开发进阶(六)UnityEvent使用与源码解析【荐】
【Unity】Unity开发进阶(七)双刃剑:扩展方法【荐】
【Unity】Unity开发进阶(八)Windows解析Excel报错问题、跨平台解析Excel文件

UI相关

【Unity】【NGUI】 NGUI学习笔记(一)各版本UI比对
【Unity】【NGUI】NGUI学习笔记(二)NGUI基础功能
【Unity】【NGUI】 NGUI学习笔记(三)动画及相关功能
【Unity】【UGUI】 UGUI进阶(一)自定义不规则按钮【常用】
【Unity】【EasyTouch】EasyTouch5完整示例

U3D基础功能

【Unity】物理引擎、生命周期物理阶段、刚体、碰撞体、触发器、物理材质【精】

角色控制器Character Controller
关节
射线
物理管理器
光照系统
阴影
实时GI
烘焙
光源侦测
光线追踪

模型与动画

Avatar人形角色动画
Mecanim动画系统(Animation和Animator)
骨骼、蒙皮、绑定

地形系统

自带地形系统
各类terrain editor插件
【Unity】Unity插件:地形编辑器MTE(Mesh Terrain Editor)

导航系统

【Unity】Unity寻路系统讲解及Navigation实际应用
【Unity】导航基本组件:Nav Mesh Agent、Off Mesh Link、Nav Mesh Obstacle
【Unity】导航 Navigation 设置:窄桥、隧道、斜坡、台阶、坠落、跳跃
【Unity】Navigation 选择性寻路:Area Mask
【Unity】导航细节问题汇总:Instantiate飘移问题

学术知识相关

物理相关内容
几何相关内容
【Unity】Unity 几何知识、弧度、三角函数、向量运算、点乘、叉乘【精】
【Unity】Unity 欧拉角、四元数、万向节死锁、四元数转轴角
【Unity】常用几何知识:根据角度获取圆形上某个点的坐标

数学相关内容
图形学相关内容

美术相关

【Unity】模型文件格式、常见3D模型格式

3DMax、Maya、Zbrush、C4D、SubstanceDesigner、SubstancePainter等主流引擎比较
3D模型导入与应用
原画设计
模型
材质
材质类型
骨骼、蒙皮、绑定
美术制作规范

Shader相关

【Unity】Unity Shader学习笔记(一)Unity Shader基础
【Unity】Unity Shader学习笔记(二)渲染管线
【Unity】Unity Shader学习笔记(四)创建和使用、基本语法、属性基本类型、数值精度

U2D开发

【Unity】Unity 2D游戏开发(一)U2D基础功能
【Unity】Unity 2D游戏开发(二)Effectors 2D碰撞效应器
【Unity】Unity 2D游戏开发(三)2D游戏常用功能及插件

VR(虚拟现实)

【Unity】虚拟现实 VRTK插件使用教程(一)插件基本配置
【Unity】虚拟现实 VRTK插件使用教程(二)人物传送、光标指针、传送规则、玩家区域检测
【Unity】虚拟现实 VRTK插件使用教程(三)交互、抓取物体、手柄外观
【Unity】虚拟现实 VRTK插件使用教程(四)武器事件处理
【Unity】虚拟现实 VRTK插件使用教程(五)看源码了解VRTK设计思路【精】
【Unity】虚拟现实 VRTK插件使用教程(六)VR UI (UGUI和VRTK的事件处理机制)【精】
【Unity】虚拟现实 VR UI框架搭建【精*】

Unity项目管理

【Unity】Unity PlasticSCM使用说明【未完成】
【Unity】Unity 版本控制+持续集成【未完成】
【Unity】Unity 编译顺序及代码保护【未完成】

Unity实战

> U3D ARPG游戏

【Unity】U3D ARPG游戏制作实例(一)EasyTouch5完整示例
【Unity】U3D ARPG游戏制作实例(二)人物基本动作切换

> U3D TD炮台防守游戏【荐】

【Unity】U3D TD游戏制作实例(一)创建敌人、加载预制件【荐】
【Unity】U3D TD游戏制作实例(二)配置关卡、加载Excel配置文件【荐】
【Unity】U3D TD游戏制作实例(三)相机管理器、生成敌人优化、敌人血槽小组件【荐】
【Unity】U3D TD游戏制作实例(四)建造防御塔:防御塔生成器、一个int代表多选框,圆上任意点位的坐标计算、制作防御塔预制件【荐】
【Unity】U3D TD游戏制作实例(五)防御塔设计:对象排序、锁定敌人、攻击敌人、防御塔特色功能实现【荐】

> U3D 车位售卖系统

【Unity】Unity3D 车位售卖系统制作实例(一)系统介绍及相机控制器

> U3D RPG游戏

【Unity】Unity3D RPG游戏制作实例(一)游戏简介及文档目录整理【未完成】
【Unity】Unity3D RPG游戏制作实例(二)开发思路及概要设计【未完成】

常见问题

【Unity】关于精灵编辑器的问题No Sprite Editor Window registered.

谈谈游戏

关于作者:一些想说的话
【重温经典】《谁谋杀了我们的游戏?》出自《黑神·话悟空》制作人Yocar

链接

UnityHub各版本国际版下载链接

以上是关于Unity基础笔记—— Unity基本操作与基本组件介绍的主要内容,如果未能解决你的问题,请参考以下文章

Unity学习笔记[一] RollBall小游戏

学习笔记:极客学院-2. Unity3D 基础操作-Scene与场景漫游

Unity Shader入门精要读书笔记序章

Unity Shader 基本类型和结构

Unity 入门笔记 - 02 - 各种动画

Unity Shader入门精要学习笔记 - 第12章 屏幕后处理效果