Unity基础笔记(1)

您所在的位置:网站首页 3dmax基本操作介绍 Unity基础笔记(1)

Unity基础笔记(1)

2023-08-30 06:14| 来源: 网络整理| 查看: 265

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中创建的脚本,不一定非要是组件,那么怎么样确定一个脚本是组件?

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

组件的学习方法:

主要从两个方面进行学习

Inspector 面板,组件在 Inspector 面板中一般都会有一些属性可以设置,那我们需要研究的是这些属性的设置对于游戏物体有什么影响;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 组件常用属性和方法:

属性:

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

方法:

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

Transform组件的特殊性:

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

6. GameObject

GameObject是什么?

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

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

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

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

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

GameObject 常用属性和方法

属性:

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

方法:

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

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

预制体的创建:

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

预制体的使用:

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

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

预制体的修改:

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

变体:

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

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

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

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

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

协程的使用场景:

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

为什么需要协程?

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

如何定义协程函数:

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. 常用工具类 数学工具类

Mathf.Abs(int num):返回绝对值;

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

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

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

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

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

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


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3